2015-01-06 31 views
5

Per esempio:Python: come fermare una funzione?

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 

mio problema è che se una certa condizione diventa vera (nella funzione check_winner) e la funzione end() esegue tornerà al computer() o lettore() perché non c'è nessuna linea che dice al computer di interrompere l'esecuzione di player() o computer(). Come si fermano le funzioni in Python?

+0

'return' termina una funzione, è quello che stai cercando? – Maroun

+0

Sì (finché può essere utilizzato nuovamente senza riavviare il programma). – user3711671

+0

Ho dimenticato di aggiungere 1 funzione (principale) nella domanda, ma ho ancora un problema, come altri ha detto che il rendimento ritorna a una funzione che ha chiamato la seconda funzione (quella con dichiarazione di ritorno) quindi non si fermerà mai, aggiungendo il ritorno a diversi posti non hanno fatto nulla e il programma sarà ancora eseguito, dove esattamente devo scrivere di ritorno? Voglio che il programma torni a main() se il giocatore lo vuole e se non lo fa, voglio fermarmi completamente il programma. – user3711671

risposta

4

Un'istruzione di ritorno semplice "arresta" o restituisce la funzione, in termini precisi, "restituisce" l'esecuzione della funzione al punto in cui è stata richiamata la funzione - la funzione viene terminata senza ulteriori azioni.

Ciò significa che è possibile avere un numero di punti in tutta la funzione in cui potrebbe tornare. Ti piace questa:

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

Quindi devo solo aggiungere "return winner" (o semplicemente return (None)?) Prima di end() nella funzione check_winner? – user3711671

+0

Sì, qualsiasi punto in cui viene specificato il reso terminerà l'esecuzione della funzione e tornerà al codice chiamante. – Hektor

0

In questo esempio, non viene eseguita la linea do_something_else() se do_not_continue è True. Il controllo tornerà, invece, a qualsiasi funzione chiamata 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 

Sopra è un esempio abbastanza semplice ... ho fatto una dichiarazione per check_winner utilizzando score = 100 per indicare la partita finita.

Si desidera utilizzare il metodo simile di passare score in check_winner, utilizzando game_over = check_winner(score). Quindi è possibile creare un punteggio all'inizio del programma e passarlo a computer e player come viene gestito lo game_over.