Probleme de python

loulou -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
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

  1. jee pee Messages postés 31865 Date d'inscription   Statut Modérateur Dernière intervention   9 973
     
    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
  2. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    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