2012-10-10 10 views
6

Jak mogę ustawić Pythona na początku instrukcji if, jeśli warunek nie jest spełniony poprawnie.Powrót do pierwszej instrukcji if, jeśli nie ma prawidłowych wyborów

Mam podstawowy if/else tak:

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." 

Co ja chcę to poprosi użytkownika, aby dokonać innego wyboru tego if bez nich konieczności ponownego uruchamiania całego programu, ale jestem bardzo nowości w Pythonie i mam problem ze znalezieniem odpowiedzi online w dowolnym miejscu.

+1

Będziesz musiał owinąć całość w pętlę (zazwyczaj 'while'). – quantumSoup

+0

, więc czy zrobię to za mnie? dzięki choremu badaniom, nie miałem pojęcia, gdzie zacząć – wondergoat77

+0

@ quantumSoup Czasami tak jak ja tęsknię za pętlą do-while, łatwą do emulowania z regularną pętlą chociaż – TheZ

Odpowiedz

6

Dość powszechnym sposobem aby to zrobić jest użycie while True pętlę, która będzie działać na czas nieokreślony, z break sprawozdania, aby wyjść z pętli, gdy wejście jest ważny:

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." 

Jest też ładny sposób, żeby ograniczyć liczbę prób, na przykład:

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

dzięki za dodatkowe informacje! – wondergoat77

4

Użyj pętli 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

dziękuję, pobiliście mnie, aby samemu to ustalić i zamknąć pytanie, doceń pomoc dzięki – wondergoat77

+0

Nawiasy w wierszu 2 są niepotrzebne i brakowało Ci dwukropka. Również byłoby łatwiej używać 'while a not in (1, 2):'. – deadly

+0

@deadly Bardzo dobrze. –

3

można użyć funkcji rekurencyjnej

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) 
Powiązane problemy