2012-10-10 17 views
6

¿Cómo puedo hacer que Python se mueva a la parte superior de una instrucción if si ninguna condición se cumple correctamente?Cómo volver a la primera instrucción if si no hay opciones válidas

que tiene un básico de if/else así:

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

Lo que quiero es para pedir al usuario a hacer otra elección para esta sentencia if sin ellos tener que reiniciar el programa entero, pero estoy muy nuevo en Python y tengo problemas para encontrar la respuesta en línea en cualquier lugar.

+1

Tendrá que envolver todo el conjunto en un bucle (normalmente 'while'). – quantumSoup

+0

así que mientras lo haré por mí? gracias ir a investigar, no tenía ni idea de dónde empezar – wondergoat77

+0

@quantumSoup Es en momentos como estos echo de menos el ciclo do-while, fácil de emular con un ciclo while while – TheZ

Respuesta

6

una forma bastante común de hacer esto es utilizar un bucle while True que se ejecutará de forma indefinida, con break declaraciones para salir del bucle cuando la entrada es válida:

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

También hay un buen hasta aquí para restringir el número de reintentos, por ejemplo:

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

gracias por la información adicional! – wondergoat77

4

Utilice 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

gracias, me pegaste para resolverlo y cerrar el pregunta, agradece la ayuda, gracias – wondergoat77

+0

Los paréntesis en la línea 2 son innecesarios y te perdiste los dos puntos. También sería más fácil usar 'while a not in (1, 2):'. – deadly

+0

@deadly Muy bien. –

3

Se puede utilizar una función recursiva

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) 
Cuestiones relacionadas