Problème de code python.

Fermé
taizer13 Messages postés 38 Date d'inscription dimanche 20 février 2011 Statut Membre Dernière intervention 21 août 2014 - Modifié par taizer13 le 13/06/2012 à 10:50
periplasme Messages postés 391 Date d'inscription vendredi 22 avril 2011 Statut Membre Dernière intervention 5 février 2013 - 15 juin 2012 à 09:54
Bonjour, je voudrais que vous m'aidez sur mon code, il n'y as pas d'erreur mais le programme se lance, écrie le titre puis passe directement a la ligne os. system("pause") sans tenir compte de la fonction def...


import os 
from random import randrange  
print("\t\t\t === LE JEU DU PLUS OU MOINS ===by Taizer\n\n") 

def lvl (X=10,Z=1,Y=100): 
    while tentatives >0: 

        nP=input("Quel est le nombre ?") 
        nP=int(nP) 
        tentatives = X 
        Nm= randrange(Z,Y) 
        nP=0 

        tentatives -=1 
        if nP==Nm : 
            print("Bien joué mon pote\n") 

        elif nP >Nm: 
            print("-.C'est moin !\n") 

        else: 
            print("+.C'est plus !\n") 

    if tentatives==0: 
        print("le nombre été :",Nm) 
os.system("pause") 



j'attend votre avis merci :)
A voir également:

6 réponses

periplasme Messages postés 391 Date d'inscription vendredi 22 avril 2011 Statut Membre Dernière intervention 5 février 2013 53
Modifié par periplasme le 13/06/2012 à 11:04
salut, réponse brève, suivi de réponse longue :

réponse brève :
def permet de définir une fonction,

une fois ta fonction créé, il faut l'appelé !
ici il te suffirai d'ajouter
lvl()
avant le os.system("pause")

réponse longue :
1 - evite le os.system("pause"),
mets
input("press enter to quit")

à la place, c'est beaucoup plus portable

2- prend des nom de variable plus lisibles
à quoi servent exacteement X, Z et Y ? pas evident au premier coup d'oeil ...

3-
tu fait
while tentatives >0
mais à ce moment il n'existe pas de variable tentatives ! donc tu n'auras pas le résultat souhaiter !
mets un
tentative = X
avant ton while.

4- tu peux aussi plus découper ton code :
une fonction à part pour vérifier la valeur par exemple ...

5- nP=int(nP) est inutile ! si l'utilisateur entre un chiffre, python va directement le mettre en int.

il y as encore quelques subtilités, mais je vais arréter de t'innonder ici, corrige déjà ses quelques points ;-)
2
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
13 juin 2012 à 11:57
je rajouterai à ce que dit periplasme qu'il vaut peut être mieux corriger l'algorithme avant de corriger la forme. Donc, son point 3 en priorité.
Ensuite, je remarque qu'à chaque tentative tu modifies Nm. C'est normale ? Si oui, c'est le jeu de "j'ai X chances pour avoir un nombre du premier coup" et pas le jeu du plus ou moins.
Si tu trouves le bon nombre, tu ne sors pas de la boucle, c'est à dire que tu "perds" à chaque fois.
0
taizer13 Messages postés 38 Date d'inscription dimanche 20 février 2011 Statut Membre Dernière intervention 21 août 2014 1
Modifié par taizer13 le 13/06/2012 à 13:21
dsl j'avais oublié de metre ma fonction que j'avais importé.

1.
def lvl(X,Z,Y):  
    tentatives=X  
    Nm = randrange(Z,Y)  
    nP=0  

2.a la place de os.system("pause")
while 1: 
 lettre=input("tapez v pour quitter :") 
 if lettre =="v": 
  print("fin") 
  break

je crée une boucle infini pour que utilisateur soit obligé de quitté
3.char sniper
 if nP==Nm : 
            print("Bien joué mon pote\n")
            tentatives=0 #pour remetre tentative a 0 si le nombre est trouvé.
0
periplasme Messages postés 391 Date d'inscription vendredi 22 avril 2011 Statut Membre Dernière intervention 5 février 2013 53
13 juin 2012 à 14:01
hum ... char snipeur à raison : pose d'abord ce que tu veux faire avant de le coder

pour ton jeux ça prendrait cette forme :

afficher message bienvenue
généré nombre
lancer jeu avec 10 tentatives, et un nombre entre 1 et 100
tant qu'il n'as pas trouver :
demander au joueur un nombre
verifier
...
...

une fois que tu aura fait cette phase de conception, tu n'auras normalement plus qu'à retranscrire en python et tu n'auras normalement aucun problème.
0
taizer13 Messages postés 38 Date d'inscription dimanche 20 février 2011 Statut Membre Dernière intervention 21 août 2014 1
Modifié par taizer13 le 13/06/2012 à 19:13
voilà, j'ai réussi en suivant vos conseille est sa donne sa :


import os 
from random import randrange  
nP=0 
tentatives =10 

print("\t\t\t === LE JEU DU PLUS OU MOINS ===by Taizer\n\n") 
Nm = randrange(1, 100) 

while tentatives >0: 

    nP=input("Quel est le nombre ?") 
    nP=int(nP) 

    tentatives -=1 
    if nP==Nm : 
        print("Bien joué mon pote\n") 
        tentatives=0 
    elif nP >Nm: 
        print("-.C'est moin !\n") 

    else: 
        print("+.C'est plus !\n") 

if tentatives==0: 
    print("le nombre été :",Nm) 
os.system("pause") 


mon seul problème c'est que je voudraid metre sa sous forme de fonction par rapelé les fonction est faire un système de niveau, en tant que débutant je ne gere pas trop sa,si vous pouvez m aidé sa seré simpa!.merci
0
periplasme Messages postés 391 Date d'inscription vendredi 22 avril 2011 Statut Membre Dernière intervention 5 février 2013 53
13 juin 2012 à 20:07
bon, y as déjà du progrès .
maintenant, pour mettre sa sous forme de fonction je vois un découpage en 2 fonctions :

une pour la boucle de jeu
une pour comparer le nombre mystere avec celui du joueur

mais d'abord, as-tu compris comment marchent les fonctions et comment les utiliser ou veux-tu un rappel ?
0
taizer13 Messages postés 38 Date d'inscription dimanche 20 février 2011 Statut Membre Dernière intervention 21 août 2014 1
Modifié par taizer13 le 13/06/2012 à 20:32
si tu as une explication simple tout en expliquant bien sa serais sympas de ta par car le tuto que je consultai était asser ambigu sur c'est chapitre ^^.
j'ai compris que dans une fonction on pouvait enregistré plein de variable pour une tache précise et que l'on peut employé quand on veut,mais le probleme c'est que jarrive pas a les manipulé.(et aussi que l'on pouvais leur mettre des paramètre)
0
periplasme Messages postés 391 Date d'inscription vendredi 22 avril 2011 Statut Membre Dernière intervention 5 février 2013 53
13 juin 2012 à 21:53
alors petit cours sur les fonctions :
une fonction est donc un ensemble de ligne de codes, le principe, c'est que grâce aux fonctions, on peut diviser un problème complexe en plusieurs plus petits. elle rendent donc l'écriture et la lecture du code plus facile. de plus, une fonction peut être appelée plusieurs fois, c'est donc très utile pour éxécuté une tache de manière répétée.

une fonction peut prendre des valeurs en paramètre, mais aussi retourné une valeur.

en python, une fonction à plusieurs propriétés et ce présente comme suit :

def nom_fonction (parametre_1 , paramtre_2=valeurs_par_defaut):
    """" 
    description de la fonction
    """"
    instruction1
    instruction2
    ...
    return valeur_de_retour


dans l'ordre tu as :
le nom de la fonction : le nom que tu souhaite lui donné.
parametre_1 sera une valeur qu'attend obligatoirement la fonction
parametre_2 n'est pas obligatoire : si tu ne la mets pas, elle utiliseras valeur_par_defaut

la description de la fonction entre triple-quote est totalement optionnel, mais permet d'expliquer comment la fonction marche, cela évite d'avoir à relire tout le code pour comprendre.

la suite d'instruction que tu souhaite mettre dedans
puis le return : une fonction peux retourner une valeur pour l'utiliser ailleurs dans le code.

exemple concret : la fonction input()

dans ton code, tu utilise
nP=input("Quel est le nombre ?")

donc pour reprendre le schema plus haut, on peut imaginer que la fonction est codée ainsi :

def input(texte_a_afficher=""):
    """" fonction permettant de rentrer une valeur dans une variable""""
    suite d'instruction
    return valeur_entree_au_clavier


quand tu utilise
nP=input("Quel est le nombre ?")

la variable nP de ton code va recevoir la variable valeur_entree_au_clavier de la fonction

(car oui : une variable créé dans une fonction n'est pas accessible en dehors de la fonction. on utilise donc return pour envoyer la variable et la rendre accessible à travers une autre.)

note aussi que l'on peut utiliser le caractère # pour ajouter des commentaires. afin d'expliquer une ou plusieurs lignes de code aux autre développeurs.
exemple concret : une fonction pour vérifier le nombre :
def verif_nombre(nbr_joueur, nbr_mystere):
    """
    renvoie True si les nombre correspondent, False sinon.
    affiche un texte d'aide
    """
    # ok est une variable booléenne : elle ne sait dire que vrai ou faux.
    # on la mets tout de suite à faux et on ne la 
    # passera à vrai que si on trouve.
    ok = False
    if nbr_joueur > nbr_mystere :
        print (" c'est moins ! ")
       
    elif nbr_joueur > nbr_mystere : 
        print("c'est plus ! ")
    else : 
        print("bien joué ptit gars !")
        # valeur trouvée ! on lets donc ok = Vrai
        ok = True
    # on renvoie la valeurs de ok pour l'utiliser ailleurs...
    return ok


pour l'utiliser dans le code :
tu mets la fonction avant la partie "script"
et voici ce que ça donnerait avec ton code :

from random import randrange 

# on mets toujours les fonctions après les import, 
# pour qu'elle soit analysée avant de les utilisé
def verif_nombre(nbr_joueur, nbr_mystere):
    """
    renvoye True si les nombre correspondent, False sinon.
    affiche un texte d'aide
    """
    ok = False
    if nbr_joueur > nbr_mystere :
        print (" c'est moins ! ")
       
    elif nbr_joueur > nbr_mystere : 
        print("c'est plus ! ")
    else : 
        print("bien joué ptit gars !")
        ok = True
    return ok


nP=0 
tentatives =10 

print("\t\t\t === LE JEU DU PLUS OU MOINS ===by Taizer\n\n") 
Nm = randrange(1, 100) 

while tentatives >0: 

    nP=input("Quel est le nombre ?") 
    nP=int(nP) 

    tentatives -=1 
   # hop ! mainteant, il est temps de verifier ! 
   # on va donc lancer la fonction qu'on as définit 
   # et récupéré le resultat dans la variable trouve.
   trouve = verif(nP,Nm)
   # si trouve à récupéré True, alors le joueur à trouvé le bon nombre :-D
   if trouve == True :
        # donc on peut quitter le jeu
        exit(0)
   # sinon, on verifie si c'était sa dernière chance ... 
   elif tentatives==0: 
    print("le nombre été :",Nm) 

# j'aime pas os.system()
input("merci d'avoir joué ! taper sur entree pour quitter.")


et bah mon vieux ! ça fait un sacré pavé ! et encore, j'ai essayer de simplifier ... j'espere au moins que ça t'auras servis et que tu sauras faire l'autre fonction ;-)
0
taizer13 Messages postés 38 Date d'inscription dimanche 20 février 2011 Statut Membre Dernière intervention 21 août 2014 1
14 juin 2012 à 02:13
wouah, merci pour toute ces explications je m'y mettrais demain,
il y a un truc que je n'arrive pas a saisir, retourner un valeur me retourne le cerveaux je n'arrive pas a comprendre et cela me bloc
0
taizer13 Messages postés 38 Date d'inscription dimanche 20 février 2011 Statut Membre Dernière intervention 21 août 2014 1
Modifié par taizer13 le 14/06/2012 à 13:07
je viens enfin de comprendre ce que retourné une valeur veut dire :),Youpii.
si j'ai bien compris : la fonction envoi une valeur dans une variable que la fonction récupère avec return pour l'utilisé ailleurs.
j'ai suivis tes explication est donc fait la fonction que tu ma écrite :
from random import randrange   
#fonction vérif !   
def verif (nombre_joueur,mystere_nombre):   
    ok=False   
    if nombre_joueur >mystere_nombre:   
        print("-.C'est moin !\n")   
           
    elif nombre_joueur < mystere_nombre :   
        print("+.C'est plus !\n")   

    else:   
        print("Bien joué mon pote\n")   
        ok=True   
    return ok   

print("plus ou moin Taizer")   
nombre_joueur=0   
#choix du niveau   
lvl= input("facile : 1\n moyen : 2 \n jacki : 3\nsaisir le niveau : ")   
lvl=int(lvl)   

if lvl==1:   
     mystere_nombre= randrange(1, 100) #condition niveaux 1,je pence que je fairais une                                                                                                                                  #                                                                       #une fonction   
                                                                        #pour les conditions des niveaux.   
     tentatives=10   
while tentatives>0:  
    nombre_joueur=input("Quel est le nombre ?")   
    nombre_joueur=int(nombre_joueur)   
    tentatives -=1   
    trouve = verif(nombre_joueur,mystere_nombre)   
    if trouve==True :            
        exit(0)   
    elif tentatives==0:   
        print("le nombre été :",mystere_nombre)   
input("taper sur <Entree> pour quitter.")   
#le jeux ne pouras marché que dans le niveau 1 pour l'instant

et fonctionne bien mercii :), je crois que j'ai bien compris le principe de la fonction je te remercie pour toute ces explication periplasme tout en remercient Char Snipeur.
juste une dernière question :) : une foi que l'utilisateur as trouvé le bon numéro(ou pas ) on peut revenir au début pour recommencé le jeux ??
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
taizer13 Messages postés 38 Date d'inscription dimanche 20 février 2011 Statut Membre Dernière intervention 21 août 2014 1
Modifié par taizer13 le 14/06/2012 à 13:19
je croyais avoir fini mon code mais le niveau 2 et 3 ne fonctionne pas il me dise que tentative is not defined.pourtant lvl2 tentatives =10 et lvl3 tentatives=8.
from random import randrange  
#fonction vérif !  
def verif (nombre_joueur,mystere_nombre):  
    ok=False  
    if nombre_joueur >mystere_nombre:  
        print("-.C'est moin !\n")  
          
    elif nombre_joueur < mystere_nombre :  
        print("+.C'est plus !\n")  

    else:  
        print("Bien joué mon pote\n")  
        ok=True  
    return ok  

print("plus ou moin Taizer")  
nombre_joueur=0  
#choix du niveau  
lvl= input("facile : 1\n moyen : 2 \n jacki : 3\nsaisir le niveau : ")  
lvl=int(lvl)  

if lvl==1:  
     mystere_nombre= randrange(1, 100) #condition niveaux 1,je pence que je    
                                                                 #fairais une fonction 
                                                                #pour les conditions des niveaux.  
     tentatives=10  
while tentatives>0:  
    nombre_joueur=input("Quel est le nombre ?")  
    nombre_joueur=int(nombre_joueur)  
    tentatives -=1  
    trouve = verif(nombre_joueur,mystere_nombre)  
    if trouve==True :           
        exit(0)  
    elif tentatives==0:  
        print("le nombre été :",mystere_nombre)  
input("taper sur <Entree> pour quitter.")  

if lvl==2:  
     mystere_nombre= randrange(1, 500) #condition niveaux 2,je pence que je    
                                                                 #fairais une fonction 
                                                                #pour les conditions des niveaux.  
     tentatives=10  
while tentatives>0: #une erreur sur cette ligne "tentatives non defini";pourtan tentatives=10 --'  
    nombre_joueur=input("Quel est le nombre ?")  
    nombre_joueur=int(nombre_joueur)  
    tentatives -=1  
    trouve = verif(nombre_joueur,mystere_nombre)  
    if trouve==True :           
        exit(0)  
    elif tentatives==0:  
        print("le nombre été :",mystere_nombre)  
input("taper sur <Entree> pour quitter.")  

if lvl==3:  
     mystere_nombre=randrange(1, 1000) #condition niveaux 3,je pence que je    
                                                                 #fairais une fonction 
                                                                #pour les conditions des niveaux.  
     tentatives=8  
while tentatives>0: #une erreur sur cette ligne "tentatives non defini";pourtan tentatives=10 --'  
    nombre_joueur=input("Quel est le nombre ?")  
    nombre_joueur=int(nombre_joueur)  
    tentatives -=1  
    trouve = verif(nombre_joueur,mystere_nombre)  
    if trouve==True :           
        exit(0)  
    elif tentatives==0:  
        print("le nombre été :",mystere_nombre)  
input("taper sur <Entree> pour quitter.")
0
periplasme Messages postés 391 Date d'inscription vendredi 22 avril 2011 Statut Membre Dernière intervention 5 février 2013 53
14 juin 2012 à 13:32
donc la, on part sur un autre interet des fonctions : répété des taches .
tu utilise 3 fois le bloc
while tentatives>0: #une erreur sur cette ligne "tentatives non defini";pourtan tentatives=10 --'  
    nombre_joueur=input("Quel est le nombre ?")  
    nombre_joueur=int(nombre_joueur)  
    tentatives -=1  
    trouve = verif(nombre_joueur,mystere_nombre)  
    if trouve==True :           
        exit(0)  
    elif tentatives==0:  
        print("le nombre été :",mystere_nombre)  
input("taper sur <Entree> pour quitter.")  


alors qu'il serait plus simple de le mettre une fois dans une fonction et de l'appeler 3 fois ...

il y as beaucoup d'erreur de débutant - et c'est normal, vu que tu es débutant ;-) - donc avant de te lancer dans la création d'un tel truc, je te propose de lire quelques tutos qui vont bien sur python, et de prendre le temps d'apprendre comment ça marche au travers d'exemple moins complexes .

je te conseil celui ci si tu veux apprendre les bases, sans aller trop loin, avec une approche très soft :
http://www.siteduzero.com/tutoriel-3-223267-apprenez-a-programmer-en-python.html

ou celui la si ton but est d'apprendre à te servir de python plus en profondeur, avec une approche plus professionnel :
https://python.developpez.com/cours/TutoSwinnen/
0
taizer13 Messages postés 38 Date d'inscription dimanche 20 février 2011 Statut Membre Dernière intervention 21 août 2014 1
14 juin 2012 à 19:30
je penses que tu as raison on peut d'apprentissage s'impose.
merci beaucoup pour tes conseil !
0
taizer13 Messages postés 38 Date d'inscription dimanche 20 février 2011 Statut Membre Dernière intervention 21 août 2014 1
15 juin 2012 à 02:09
et voila le jeux fonctionne trés bien :) :
from random import randrange

#fonction vérif !
def verif (nombre_joueur,mystere_nombre):
    ok=False
    if nombre_joueur >mystere_nombre:
        print("-.C'est moin !\n")
        
    elif nombre_joueur < mystere_nombre :
        print("+.C'est plus !\n")

    else:
        print("Bien joué mon pote\n")
        ok=True
    return ok

def boucle_jeu (nbr_tentatives,Min,Max):
    mystere_nombre= randrange(Min,Max)
    tentatives=nbr_tentatives
    while tentatives>0:
        nombre_joueur=input("Quel est le nombre ?")
        nombre_joueur=int(nombre_joueur)
        tentatives -=1
        trouve = verif(nombre_joueur,mystere_nombre)
        if trouve==True :
            exit(0)
        elif tentatives==0:
            print("le nombre été :",mystere_nombre)
    input("taper sur <Entree> pour quitter.")

print("plus ou moin Taizer")
nombre_joueur=0
#choix du niveau
lvl= input("facile : 1\n moyen : 2 \n jacki : 3\nsaisir le niveau : ")
lvl=int(lvl)

if lvl==1:
     boucle_jeu(10,1,100)

if lvl==2:
     boucle_jeu(10,1,500)

if lvl==3:
     boucle_jeu(8,1,1000)
0
periplasme Messages postés 391 Date d'inscription vendredi 22 avril 2011 Statut Membre Dernière intervention 5 février 2013 53
15 juin 2012 à 09:54
pas mal ! félicitation ! tu as bien compris le principe des fonction on dirait ;-)
il y as encore des ajustement à faire, mais je te laisse découvrir tout ça au fil de ta découverte du petit serpent jaune et bleu ^^
0