2 votes

Comment réinitialiser une variable utilisée dans une fonction qui l'accepte comme paramètre ?

J'ai un problème, j'ai créé un jeu de multiplication en Python en utilisant des fonctions mais lorsque je vérifie si l'utilisateur a assez de points pour changer de niveau, le compteur de points ne se remet pas à 0. Je suis débutant donc il est fort possible que l'erreur soit stupide, mais je ne comprends pas... Vous pouvez voir cela dans le tuteur Python, mais j'ai essayé d'ajouter "return compteur" mais cela ne fonctionne pas non plus...

Voici le code de la fonction :

 def update (compteur) :
        global level
        if compteur == 20 :
            level+=1
            print("Niveau",level-1,"terminé. Passage au niveau",level,"!")
            compteur = 0
            return compteur

Et tout le code :

###############################################################################
#  Importation de fonctions externes                                          #

import random

###############################################################################
#  Définitions locales de fonctions                                           #

compteur=0

def calcul (max) :
    '''
    Cette fonction calcule une mutiplication avec des valeures aléatoires, elle
    admet un seul paramètre :
        - Maximum des valeures alétoires
    Elle retourne le nombre saisi par l'utilisateur ainsi que le nombre calculé
    par l'ordinateur.
    '''
    global compteur
    global nb_user
    global nb_result
    valeur_1=random.randint(1, max)
    valeur_2=random.randint(1, max)
    nb_result=valeur_1*valeur_2
    print(valeur_1,"*",valeur_2)
    print("Debug =",nb_result,)
    nb_user=int(input("Entrer votre réponse : \n"))
    return nb_user
    return nb_result

def verif (nb_user, nb_result) :
    '''
    Cette fonction vérifie si le résultat saisi par l'utilisateur est égale au
    résultat attendu, elle admet donc deux paramètres :
        - Nb_user
        - Nb_result
    Elle retourne l'indice de réussite.
    '''
    global compteur
    if nb_user == nb_result :
        compteur+=1
        print("Bonne réponse !")
    else :
        compteur-=1
        print("Mauvaise réponse !")

def update (compteur) :
    global level
    if compteur == 20 :
        level+=1
        print("Niveau",level-1,"terminé. Passage au niveau",level,"!")
        compteur = 0
        return compteur

###############################################################################
#  Corps principal du programme

# Déclarations des variables 

level=1

# Debut

print("Bienvenue dans le Jeu des multiplications !")
while level == 1 :
    calcul(10)
    print(compteur, level)
    verif(nb_user, nb_result)
    update(compteur)
while level == 2 :
    calcul(20)
    print(compteur, level)
    verif(nb_user, nb_result)
    update(compteur)
while level == 3 :
    calcul(50)
    verif(nb_user, nb_result)
    update(compteur)
while level == 4 :
    calcul(100)
    verif(nb_user, nb_result)
    update(compteur)
while level == 5 :
    print("Bien joué ! Tu es venu à bout du jeu.")

Merci d'avance pour votre aide !

1voto

Corralien Points 6849

À chaque fois, vous appelez update(compteur) vous devez réaffecter la valeur à compteur :

Remplacer :

update(compteur)

Par :

compteur = update(compteur)

Vous devez mettre en retrait le return compteur :

 def update (compteur) :
        global level
        if compteur == 20 :
            level+=1
            print("Niveau",level-1,"terminé. Passage au niveau",level,"!")
            compteur = 0
        return compteur  # Remove one tab

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X