Comment appeler ma fonction «counting ()» depuis la fonction question ()? De sorte que je n'ai besoin que de spécifier qu'il doit être exécuté une fois - peu importe le nombre de questions que j'ai dans mon jeu de quiz. J'ai essayé, mais rien ne fonctionne.

S'il vous plaît, aidez-moi, merci.

P.s mes questions portent sur le suédois, mais elles n'ont pas d'importance.

    from time import sleep
        
        def main():
            option()
            
        def start_menu():
            
            """This will display the main menu"""
            print("*"*40)
            print("MAIN MENU")
            print("*"*40)
            print("1. Start the quiz") 
            print("2. Statistics")
            print("3. Exit game")
        
        def option():
            """This should get user input """
            while True:
                start_menu()
                option= input("Write your choice here [1-3]")
                if option=="1":
                    qustion_game()
                elif option=="2": 
                    statistics()
                elif option=="3": 
                    game_over()
                    return
                else:
                    print("he selection you specified was not valid, [1-3]")
        
        def qustion_game():
            """Frågesporten"""
            print("♡"*40)
            print("Welcome to this quiz ")
            print("♡"*40)
            print("")
        
            sleep(1)
            question("Annika hade 4 barn, den första hette januari, den andra hette februari, tredje hette april, vad hette den fjärde.?", "vad")
            print("")
            counting()

           
        
            sleep(1)
            print("♡"*40)
            question("Vem får lön utan att jobba en enda dag i hela sitt liv?", "nattvakt" )
            print("")
            counting()
           
        
            sleep(1)
            print("♡"*40)
            question("Lägg till 1000 till 40. Lägg till 1000. Lägg till 30. Lägg till 1000 igen. Lägg nu till 20. Lägg till 1000 igen.Lägg nu till 10.Vad är svaret?", "4100")
            print("")
            counting()
           
          
        
        
        def question(quiz,quiz_answer):
            """Outputen av frågor"""
            user_guess=input(quiz)
            while user_guess != quiz_answer:
                print("Sorry, try again...")
                fail_answer()
                user_guess=input(quiz)
            print("")
            print("*"*40)
            print("Correct")
         
            
        
        def statistics():
            """Provides the user with statistics on how many questions they have answered and how many errors they have made """
            print("Statistics")
            print("*"*40)
            
            print("You have totally answered " + str(answered) +" questions") 
            print("Off " +str(answered)+ " answer, have you answered incorrectly on " + str(fail))
        
        
        def fail_answer():
            """prints how many questions the user has answered"""
            global answered
            answered = answered + 1
        
        def counting():
            """prints how many errors the user has made"""
            global fail
            fail = fail + 1
           
        def game_over():
            """Exit the game"""
            print ("Game over, see you next time")
        
        fail = 0
        answered = 0
        main()
        
    
         
1
Sanna 31 août 2020 à 06:21

2 réponses

Meilleure réponse

Je pense que la meilleure façon pour vous de résoudre ce problème est d'utiliser une classe, qui peut maintenir son état interne. Ensuite, vous pouvez appeler la fonction autant de fois que vous le souhaitez et elle conservera un état interne de vos variables. Ensuite, vous pouvez appeler class.failed_answer () autant de fois que l'utilisateur échoue à votre question et cela continuera toujours à partir de ce point, en évitant de réinitialiser votre variable quel que soit le nombre de questions que vous avez.

Le code complet (comme l'auteur de la question a posé dans les commentaires) serait le suivant:

from time import sleep

class Statistics:
    def __init__(self):
        self.answered = 0
        self.failed = 0

    def counting(self):
        self.answered += 1

    def failed_answer(self):
        self.failed += 1

def main():
    option()

def start_menu():
    """This will display the main menu"""
    print("*"*40)
    print("MAIN MENU")
    print("*"*40)
    print("1. Start the quiz")
    print("2. Statistics")
    print("3. Exit game")

def option():
    """This should get user input """
    stats = Statistics()
    while True:
        start_menu()
        option= input("Write your choice here [1-3]")
        if option=="1":
            qustion_game(stats)
        elif option=="2":
            statistics(stats)
        elif option=="3":
            game_over()
            return
        else:
            print("The selection you specified was not valid, [1-3]")

def qustion_game(stats):
    """Frågesporten"""
    print("♡"*40)
    print("Welcome to this quiz ")
    print("♡"*40)
    print("")

    sleep(1)
    question("Annika hade 4 barn, den första hette januari, den andra hette februari, tredje hette april, vad hette den fjärde.?", "vad", stats)
    print("")



    sleep(1)
    print("♡"*40)
    question("Vem får lön utan att jobba en enda dag i hela sitt liv?", "nattvakt", stats)
    print("")


    sleep(1)
    print("♡"*40)
    question("Lägg till 1000 till 40. Lägg till 1000. Lägg till 30. Lägg till 1000 igen. Lägg nu till 20. Lägg till 1000 igen.Lägg nu till 10.Vad är svaret?", "4100", stats)
    print("")

def question(quiz, quiz_answer, stats):
    """Outputen av frågor"""
    user_guess=input(quiz)
    stats.counting()
    while user_guess != quiz_answer:
        print("Sorry, try again...")
        stats.failed_answer()
        user_guess=input(quiz)
    print("")
    print("*"*40)
    print("Correct")

def statistics(stats):
    """Provides the user with statistics on how many questions they have answered and how many errors they have made """
    print("Statistics")
    print("*"*40)

    print("You have totally answered %d questions" %stats.answered)
    print("Off %d answers have you answered incorrectly on %d" %(stats.answered, stats.failed))

def game_over():
    """Exit the game"""
    print ("Game over, see you next time")

if __name__ == '__main__':
    main()
1
Ronald Pereira 31 août 2020 à 14:33

Vous devez désindenter l'intégralité de votre code.

De plus, il semble que vos fonctions fail_answer et counting font les mauvaises choses - elles doivent être permutées.

def fail_answer():
    """prints how many errors the user has made"""
    global fail
    fail = fail + 1

def counting():
    """prints how many questions the user has answered"""
    global answered
    answered = answered + 1

En dehors de cela, votre code fonctionne dans sa forme existante, si vous insérez simplement un appel à counting de l'intérieur question après l'impression Correct:

def question(quiz,quiz_answer):
    ... existing code goes here ...
    print("Correct")
    counting()
1
alani 31 août 2020 à 03:38