Home > Software design >  How to reset a variable used in a function that accepts it as a parameter?
How to reset a variable used in a function that accepts it as a parameter?

Time:01-18

I have a problem, I created a multiplication game in Python using functions but when I check if the user has enough points to change level, the point counter ("compteur") does not reset to 0. I'm a beginner so it It's quite possible that the error is stupid, but I don't understand... You can see this in Python tutor, but I tried adding "return compteur" but that doesn't work either...

Here is the function code:

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

And the whole 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.")

Thank you in advance for your help !

CodePudding user response:

At each time, you call update(compteur) you have to assign back the value to compteur:

Replace:

update(compteur)

By:

compteur = update(compteur)

You have to indent back the 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
  •  Tags:  
  • Related