Proposition dans un panel variable

Fermé
jafffar Messages postés 3 Date d'inscription vendredi 14 février 2020 Statut Membre Dernière intervention 17 février 2020 - 17 févr. 2020 à 03:11
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 - 17 févr. 2020 à 09:11
Bonjour,

Je suis plutôt débutant en Python et je me cherche des petits et grands défis pour m'exercer, progresser, me mettre dans des impasses pour apprendre comment en sortir etc. etc.

Sur internet j'ai piqué une idée de loterie où la machine choisit aléatoirement un nombre en 1 et 20 et si on tombe dessus on gagne 5 fois sa mise. Moi j'ai voulu un casino aux probas équitables confrontant la machine qui choisit aléatoirement un nombre entre 1 et 5 et un joueur ou une joueuse qui si il/elle trouve le bon nombre remporte 5 fois la mise. On a 100 klurgs (notre monnaie) au départ et la machine aussi. Le premier qui ruine l'autre a gagné.

Voilà, ça ça a marché au poil.
J'ai eu l'idée d'une étape suivante: le joueur choisirait non seulement sa mise mais aussi le niveau de probabilité de victoire
- 1 chance sur 2: si il/elle gagne c'est 2 fois la mise dans les poches
- 1 chance sur 3: 3 fois la mise
- 1 chance sur 7: 7 fois la mise
etc. etc. jusqu'à 10 ou pourquoi pas plus.

Voilà mon programme pour 1 tirage sur 5 nombres (de 1 à 5):


print("""Salut et bienvenue dans mon casino honnête et équitable.
Si, si j'ai beau être une machine, je vois bien depuis l'autre côté
de l'écran ta moue dubitative.
Et pourtant, ici tu auras autant de chances que le casino de gagner ou de perdre.
Les risques seront les mêmes pour toi et moi.

Tu disposes de 100 klurgs (notre monnaie locale), d'une valeur de 100 €.
Tu choisis un nombre entier de 1 à 5.
Si tu tombes sur le nombre retenu par la machine tu gagnes, sinon je gagne.
Tu as 1 chance sur 5 de gagner, si tu gagnes tu remporteras donc 5 fois la mise.
""")

name = input("Comment t'appelles-tu? ")

import os
from random import randrange
from math import ceil
flouss = 100
continuer_partie = True

while continuer_partie:
votre_mise = int(input("Combien mises-tu? "))
if votre_mise > flouss > 0:
print("""Tu n'as pas assez d'argent, la maison ne fait pas de crédit,
ajuste ta mise, sachant qu'il te reste""",flouss, """klurgs.""")

else:
#votre_mise -= flouss
print("Votre mise de", votre_mise, "klurgs a été enregistrée.")
nbr = randrange(1,5)
proposition = int(input("Choisis un nombre entre 1 et 5 et croise les doigts: "))
if nbr == proposition:
print("Tu as gagné 5 fois ta mise, soit", votre_mise*5, "klurgs.")
gains = votre_mise * 5
flouss = flouss + gains
#flouss += gains
print("Tu m'as tout pris, tu possèdes désormais",flouss, "klurgs.")

if flouss == 200:
print("""Tu as gagné""",name,""". Bravo !!!

Je suis ruiné. Repasse une autre fois pour ma revanche.""")

elif flouss == 201:
print("""Tu as gagné""",name,""". Bravo !!!
Tu m'as tout pris. Je suis ruiné, je te dois même 1 pauvre petit klurg.
Repasse une autre fois pour ma revanche.""")
break

elif flouss > 201:
dette = flouss - 200
print("""Tu as gagné""",name,""". Bravo !!!
Je suis ruiné, je te dois même""",dette,"""klurgs. Repasse une autre fois pour ma revanche.""")
break



else:
flouss -= votre_mise
print("Tu as perdu ta mise de", votre_mise, "klurgs. Il te reste désormais", flouss, "klurgs")
print("le bon numero etait", nbr)
if flouss <= 0:
print("""Tu es ruiné""", name, """. Trouve à nouveau des klurgs et
reviens jouer contre moi.

Au revoir !!!""")
break


La voie laborieuse serait de copier/coller quasi tout ça pour prévoir les bouts de prog pour 1 tirage sur 2 nombres, sur 3, sur 4 etc. Évidemment je sais que Python est plus efficace que ça et qu'il doit y avoir moyen d'entrer une variable sur la quantité de nombres mis dans le tirage et sur le niveau de probabilité de victoire qui en découle avec ça:

while continuer_partie:
proba = int(input("Combien de nombres doivent participer au tirage? "))
votre_mise = int(input("Combien mises-tu? "))

Ce qui aurait permis dans ma logique d'utiliser ça:
proposition = int(input("Choisis un nombre entre 1 et", proba, "et croise les doigts: "))

Quand je lance donc mon script, pas d'erreur annoncée. On me pose les premières questions et ensuite ça envoie ce message d'erreur:

Comment t'appelles-tu? Amar
A quel niveau de chances souhaites-tu jouer? 8
Combien mises-tu? 17
Votre mise de 17 klurgs a été enregistrée.
Traceback (most recent call last):
File "/home/amar/casinonnete_wing_float.py", line 32, in <module>
proposition = int(input('Choisis un nombre entre 1 et', proba, 'et croise les doigts: '))
TypeError: input expected at most 1 arguments, got 3
>>>

J'ai donc bien compris qu'avec les commandes combinées int(input(....... voire qu'avec input on ne peut pas se permettre d'entrecouper le contenu de la commande par une variable (avec print par exemple on peut taper print("Salut", name, "comment vas-tu?") mais pas pour la phrase qui doit susciter une valeur. Comment faire?

Merci pour vos réponses et pistes solidaires.

Amar

1 réponse

yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
Modifié le 17 févr. 2020 à 09:31
bonjour, tu ne peux passer qu'un paramètre à input(), mais rien ne t’empêche de construire ce paramètre avec une ou plusieurs variables.
par exemple
name="toi"
sante = input("Salut, " + name + ", comment vas-tu?")
invitation= "Salut, " + name + ", comment vas-tu?"
sante2 = input(invitation)
print(sante,sante2)
proba=23
proposition = int(input('Choisis un nombre entre 1 et '+ str(proba) + ' et croise les doigts: '))
print(proposition)
0