2012-10-10 5 views
6

Come posso spostare Python all'inizio di un'istruzione if se nessuna condizione è soddisfatta correttamente.Come tornare alla prima istruzione se nessuna scelta è valida

Ho una base if/else in questo modo:

print "pick a number, 1 or 2" 
a = int(raw_input("> ") 

if a == 1: 
    print "this" 
if a == 2: 
    print "that" 
else: 
    print "you have made an invalid choice, try again." 

Quello che voglio è quello di richiedere all'utente di fare un'altra scelta per questa istruzione if senza dover riavviare l'intero programma, ma sono molto nuovo a Python e sto avendo problemi a trovare la risposta online ovunque.

+1

Dovrai avvolgere il tutto in un ciclo (di solito 'while'). – quantumSoup

+0

così mentre lo farò per me? grazie di non andare a cercare, non avevo idea nemmeno da dove cominciare – wondergoat77

+0

@quantumSoup E 'tempo di questi mi manca il ciclo do-while, facile da emulare con un ciclo continuo sebbene grazie a – TheZ

risposta

6

Un modo abbastanza comune per farlo è usare un while True ciclo che verrà eseguito a tempo indeterminato, con break dichiarazioni per uscire dal ciclo quando l'ingresso è valida:

print "pick a number, 1 or 2" 
while True: 
    a = int(raw_input("> ") 
    if a == 1: 
     print "this" 
     break 
    if a == 2: 
     print "that" 
     break 
    print "you have made an invalid choice, try again." 

C'è anche un bel modo qui per limitare il numero di tentativi, ad esempio:

print "pick a number, 1 or 2" 
for retry in range(5): 
    a = int(raw_input("> ") 
    if a == 1: 
     print "this" 
     break 
    if a == 2: 
     print "that" 
     break 
    print "you have made an invalid choice, try again." 
else: 
    print "you keep making invalid choices, exiting." 
    sys.exit(1) 
+0

grazie per le informazioni aggiuntive! – wondergoat77

4

Utilizzare un ciclo while.

print "pick a number, 1 or 2" 
a = None 
while a not in (1, 2): 

    a = int(raw_input("> ")) 

    if a == 1: 
     print "this" 
    if a == 2: 
     print "that" 
    else: 
     print "you have made an invalid choice, try again." 
+0

grazie, mi hai battuto per capire da solo e chiudere il domanda, apprezzare l'aiuto grazie – wondergoat77

+0

Le parentesi nella riga 2 non sono necessarie e hai perso il colon. Inoltre sarebbe più facile da usare 'mentre a non in (1, 2):'. – deadly

+0

@deadly Molto bene. –

3

è possibile utilizzare una funzione ricorsiva

def chk_number(retry) 
    if retry==1 
     print "you have made an invalid choice, try again." 
    a=int(raw_input("> ")) 
    if a == 1: 
     return "this" 
    if a == 2: 
     return "that" 
    else: 
     return chk_number(1) 

print "Pick a number, 1 or 2" 
print chk_number(0)