web-dev-qa-db-fra.com

Python: Comment arrêter une fonction?

Par exemple:

def main():
    if something == True:
        player()
    Elif something_else == True:
        computer()

def player():
    # do something here
    check_winner()  # check something 
    computer()  # let the computer do something

def check_winner(): 
    check something
    if someone wins:
        end()   


def computer():
    # do something here
    check_winner() # check something
    player() # go back to player function


def end():
    if condition:
        # the player wants to play again:
        main()
    Elif not condition:
        # the player doesn't want to play again:
        # stop the program


    # whatever i do here won't matter because it will go back to player() or computer()

main()  # start the program

Mon problème est que si une certaine condition devient vraie (dans la fonction check_winner) et que la fonction end () est exécutée, elle retournera à computer () ou à player () car aucune ligne n'indique à l'ordinateur de cesser d'exécuter player () ou ordinateur. () .Comment arrêtez-vous les fonctions en Python?

18
user3711671

Une simple déclaration de retour va "arrêter" ou renvoyer la fonction; en termes précis, il "retourne" l'exécution de la fonction au point où la fonction a été appelée - la fonction est terminée sans autre action.

Cela signifie que vous pourriez avoir plusieurs endroits dans votre fonction où cela pourrait revenir. Comme ça:

  def player():
       do something here
       check_winner_variable = check_winner() #check something 
       if(check_winner_variable == '1') 
             return
       second_test_variable = second_test()
       if(second_test_variable == '1') 
             return

       #let the computer do something
       computer();
20
Hektor
def player(game_over):
    do something here
    game_over = check_winner() #Here we tell check_winner to run and tell us what game_over should be, either true or false
    if not game_over: 
        computer(game_over)  #We are only going to do this if check_winner comes back as False

def check_winner(): 
    check something
    #here needs to be an if / then statement deciding if the game is over, return True if over, false if not
    if score == 100:
        return True
    else:
        return False

def computer(game_over):
    do something here
    game_over = check_winner() #Here we tell check_winner to run and tell us what game_over should be, either true or false
    if not game_over:
        player(game_over) #We are only going to do this if check_winner comes back as False

game_over = False   #We need a variable to hold wether the game is over or not, we'll start it out being false.
player(game_over)   #Start your loops, sending in the status of game_over

Ci-dessus est un exemple assez simple ... J'ai composé une déclaration pour check_winner En utilisant score = 100 Pour indiquer que le jeu est terminé.

Vous voudrez utiliser une méthode similaire pour passer score en check_winner, En utilisant game_over = check_winner(score). Ensuite, vous pouvez créer une partition au début de votre programme et la transmettre à computer et player comme si game_over Était traité.

2
MrAlexBailey

Dans cet exemple, la ligne do_something_else() ne sera pas exécutée si do_not_continue est True. Le contrôle retournera à la place de la fonction appelée some_function.

 def some_function():

     if do_not_continue:
         return    # implicitly, this is the same as saying return None

     do_something_else()
2
jez