Probleme de python
Bonjour,
Mon programme pour faire une roulette ne marche pas . Il m'écrit tout le temps" vous avez perdu". Est-ce que vous savez pourquoi ?
Merci de la réponse
Mon programme pour faire une roulette ne marche pas . Il m'écrit tout le temps" vous avez perdu". Est-ce que vous savez pourquoi ?
from lycee import *
import random
sous = 100
while sous > 0:
a = demande("combien veux-tu miser ?")
sous = sous - a
print("sous=", sous)
f = demande("quel numéro choisis-tu (entre 1 et 10) ?")
numéros = ('1', '2', '3', '4', '5', '6', '7', '8', '9', '10')
if f == random.choice(numéros):
print("Vous avez gagné")
sous = sous + 2 * a
else:
print("Vous avez perdu")
Merci de la réponse
3 réponses
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
Bonjour,
Peux-tu utiliser les balises de code quand tu partages du code?
Explications: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
pour comprendre ton code, teste celui-ci:numero = '1' if numero == 1: print("test ok") else: print ("test nok") -
Bonjour,
Pour voir le contenu des variables il faudrait faire des print intermédiaires, c'est ainsi que l'on voit ce qui se passe.
Après ta bibliothèquelycee
n'est pas standard, on ignore ce qu'il y a dedans, mais on peut entrevoir un soucis : ta fonctiondemande()
.
La fonction standardinput
renvoie une chaîne, ordemande()
est utilisée pour initialisera
qui est visiblement une valeur numérique. Or sif
est un entier, tu le compares à un numéro (par exemple1
) qui est pris parmi un ensemble de chaines de caractère (par exemple'1'
). Donc il ne peuvent jamais être égaux.
import random sous = 100 while sous > 0: a = int(input("combien veux-tu miser ?")) sous = sous - a print("sous=", sous) f = input("Quel numéro choisis-tu (entre 1 et 10) ?") numéros = ('1','2','3','4','5','6','7','8','9','10') j = random.choice(numéros) print(f, j) if f == j: print("Vous avez gagné") sous = sous + 2 * a else: print("Vous avez perdu")
Après, il y a les probabilités, on a à chaque tour 1 chance sur 10, tu devrais réduire numéros à 1,2,3 ; c'est plus facile à tester
-
Bonjour,
Pour reformuler et compléter ce qui a déjà été dit :
1) Il faut contrôler le type def
(par exemple avecprint(type(f))
). Vu que c'est probablement une valeur numérique (e.g. unint
), tu le compares au résultat derandom.choice
qui te retourne un élément parmi des chaînes de caractères. Or en python (et dans la très grande majorité des langages de programmation), une valeur numérique et sa représentation sous forme de chaîne de caractère sont différents (donc en Python,"1" != 1
).
2) Comme le soulignes jee pee, au delà du code, il faut bien voir que tu n'as qu'une chance sur 10 de gagner, et comme ton programme n'indique pas quel numéro il fallait choisir, c'est peut être juste que tu n'as pas de chance... Donc à ta place, je changerais la dernière instruction par :
if f == random.choice(numéros): print("Vous avez gagné") sous = sous + 2 * a else: print("Vous avez perdu")
... par :r = random.choice(numéros) if f == r: print("Vous avez gagné") sous = sous + 2 * a else: print("Vous avez perdu") print(f"Vous avez proposé {f}, il fallait deviner {r}")
Autres conseils :- Utilise toujours 4 espaces par tabulation (pas 5 puis 3 comme tu l'as fait).
- Utilise des variables dont le nom est parlant (par exemple
a
pourrait être renommémise
) - Prends les bonnes habitudes pour "écrire" proprement : essaye de suivre les convention PEP8 pour écrire ton code (espace autours des opérateurs, ...)
- Évite les caractères spéciaux pour nommer tes variables (renomme
numéros
ennumeros
) cela peut poser problème, surtout si tu ne mets pas en début de fichier les lignes permettant l'utilisation de caractères spéciaux dans le code.
Bonne chance