Probleme de python

Fermé
loulou - Modifié le 25 nov. 2021 à 18:24
mamiemando Messages postés 33088 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 avril 2024 - 25 nov. 2021 à 18:30
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 ?

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 22747 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 2 mai 2024 1 477
Modifié le 25 nov. 2021 à 18:31
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")
1
jee pee Messages postés 39680 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 2 mai 2024 9 253
Modifié le 25 nov. 2021 à 18:35
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èque
lycee
n'est pas standard, on ignore ce qu'il y a dedans, mais on peut entrevoir un soucis : ta fonction
demande()
.

La fonction standard
input
renvoie une chaîne, or
demande()
est utilisée pour initialiser
a
qui est visiblement une valeur numérique. Or si
f
est un entier, tu le compares à un numéro (par exemple
1
) 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

1
mamiemando Messages postés 33088 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 avril 2024 7 751
Modifié le 25 nov. 2021 à 18:44
Bonjour,

Pour reformuler et compléter ce qui a déjà été dit :

1) Il faut contrôler le type de
f
(par exemple avec
print(type(f))
). Vu que c'est probablement une valeur numérique (e.g. un
int
), tu le compares au résultat de
random.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
    en
    numeros
    ) 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
1