2015-01-06 18 views
5

Na przykład:Python: Jak zatrzymać funkcję?

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 

Moim problemem jest to, że gdy pewien warunek staje się prawdą (w check_winner funkcji) i end function() jest wykonywana będzie wrócić do komputera() lub odtwarzacza(), ponieważ nie ma linii to mówi komputerowi, aby przestał wykonywać odtwarzacz() lub komputer(). Jak zatrzymać funkcje w Pythonie?

+0

'return' kończy działanie funkcji, czy tego szukasz? – Maroun

+0

Tak (o ile można go użyć ponownie bez ponownego uruchamiania programu). – user3711671

+0

Zapomniałem dodać 1 funkcję (główną) w pytaniu, ale nadal mam problem, tak jak inni mówili, że powrót powraca do funkcji, która wywołała drugą funkcję (tę z instrukcją return), więc ona nigdy się nie zatrzyma, dodając powrót do kilka miejsc nic nie zrobiło i program nadal będzie wykonywany, gdzie dokładnie muszę napisać return? Chcę, aby program powrócił do main(), jeśli gracz chce, a jeśli nie, to chcę całkowicie przestać program. – user3711671

Odpowiedz

4

Prosta instrukcja return "zatrzyma się" lub zwróci funkcję, mówiąc precyzyjnie, "zwraca" wykonywanie funkcji do miejsca, w którym funkcja została wywołana - funkcja zostaje zakończona bez dalszych działań.

Oznacza to, że możesz mieć wiele miejsc w całej swojej funkcji, w których mógłby powrócić. Jak to:

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(); 
+0

Więc po prostu muszę dodać "Zwrot zwycięzcy" (lub po prostu wrócić (None)?) Przed end() w funkcji check_winner? – user3711671

+0

Tak, każdy punkt, w którym określono zwrot, spowoduje przerwanie wykonywania funkcji i powrót do kodu wywołującego. – Hektor

0

W tym przykładzie linia do_something_else() nie zostaną wykonane, jeśli do_not_continue jest True. Control powróci zamiast tego do dowolnej funkcji o nazwie some_function.

def some_function(): 

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

    do_something_else() 
1
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 

Powyżej jest dość prosty przykład ... I składa się oświadczenie o check_winner użyciu score = 100 oznaczający, że gra jest skończona.

Będziesz chciał użyć podobnej metody przekazywania score do check_winner, używając game_over = check_winner(score). Następnie możesz utworzyć partyturę na początku programu i przekazać ją do computer i player podobnie jak w przypadku obsługi game_over.