Python - como hacer para que no se caiga el programa al ingresar un numero fuera del rango

 
Vista:
sin imagen de perfil
Val: 3
Ha disminuido su posición en 20 puestos en Python (en relación al último mes)
Gráfica de Python

como hacer para que no se caiga el programa al ingresar un numero fuera del rango

Publicado por Rafael (3 intervenciones) el 10/05/2019 01:13:00
el tema amigos es que al ingresar un numero fuera de rango o un carácter el programa se cae, si me podrian ayudar porfa soy nuevo en esto, les muestro mi juego (aun falta corregir algunas cosas de texto pero no muy influyentes)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
import random
import textwrap
 
def print_bold(msg):
    #Funcion para mostrar por pantalla un string en negrita
    print("\033[1m"+msg+"\033[0m")
 
def print_linea_punteada(width=72):
    print('-'*width)
 
def ocupar_casas():
    ocupantes = ['chanchito con escopeta','chanchitos indefensos ']
    casas = []
    while len(casas) < 2 : #Definimos un número de asentamiento para establecerlo como amigo o enemigo
        eleccion_aleatoria = random.choice(ocupantes)
        casas.append(eleccion_aleatoria)
    return casas
 
def mostrar_mision():
    print("\033[1m"+ "comerte a los chanchitos V0.5" + "\033[0m")
 
    msg = ("Un lobo quiere cenar unos chanchitos, pero estos son inteliguentes y construyen 2 casas para luego esconderse todos en una casa, el lobo tiene que elgir una pero cuidado!, los chanchitos pueden estar armados")
 
    print(textwrap.fill(msg, width = 72))
    print("\033[1m"+"Misión:"+"\033[0m")
    print("Elige una casa a cual entrar, solo tendras una oportunidad para atrapar a los chanchitos")
    print("\033[1m"+"NOTA:"+"\033[0m")
    print("¡Cuidado! pueden estar armados")
    print_linea_punteada()
 
def mostrar_salud(medidor_salud, bold):
    if bold:
        print_bold("lobo:")
        print_bold("%d"%(medidor_salud['jugador']))
        print_bold("Salud Enemigo:")
        print_bold("%d"%(medidor_salud['enemigo']))
    else:
        print("lobo:")
        print("%d"%(medidor_salud['jugador']))
        print("Salud Enemigo:")
        print("%d"%(medidor_salud['enemigo']))
 
 
def procesar_decision_usuario():
    msg = "\033[1m" + "Elige una casa, introduce un número entre 1 y 2: " + "\033[0m"
    decision_usuario = input("\n"+msg)
    idx = int(decision_usuario)
    return idx
 
def reset_medidor_salud(medidor_salud):
    medidor_salud['jugador']=40
    medidor_salud['enemigo']=30
 
def atacar(medidor_salud):
    lista_golpes = 4*['jugador']+6*['enemigo']
    unidad_herida = random.choice(lista_golpes)
    puntos_vida = medidor_salud[unidad_herida]
    herida = random.randint(12 ,15)
    medidor_salud[unidad_herida] = max(puntos_vida- herida,0)
    print("¡Ataque!")
    mostrar_salud(medidor_salud,bold=False)
 
def revelar_ocupantes(idx, casas):
    msg=""
    print("Revelando los ocupantes...")
    for i in range(len(casas)):
        ocupantes_info = "<%d:%s>"%(i+1, casas[i])
        if i+1 == idx:
            ocupantes_info = "\033[1m" + ocupantes_info + "\033[0m"
        msg += ocupantes_info + " "
    print("\t" + msg)
    print_linea_punteada()
 
#En la siguiente función se establece un sistema de combate iterativo
def play_game(medidor_salud):
    casas = ocupar_casas()
    idx = procesar_decision_usuario()
    revelar_ocupantes(idx, casas)
 
    if casas[idx-1] != 'chanchito con escopeta':
        print_bold("¡te has comido a los chanchitos porque estaban indefensos")
    else:
        print_bold('¡Chanchitos encontrados cuidado estan armados !')
        mostrar_salud(medidor_salud, bold=True)
        continuar_ataque = True
 
        while continuar_ataque:
            continuar_ataque = input("...continuar con el ataque? Si(1)/No(0)")
            if continuar_ataque == 0:
                print_bold("Huyendo con el siguiente estado de salud...")
                mostrar_salud(medidor_salud, bold=True)
                print_bold("¡Game Over!")
                break
 
            atacar(medidor_salud)
 
            if medidor_salud['enemigo'] <=0:
                print_bold("¡el lobo se ha comido alos chanchitos!")
                break
            if medidor_salud['jugador'] <=0:
                print_bold("el lobo a muerto ...")
                break
 
#Funcion para hacer funcionar el programa principal que queremos ejecutar
def run_application():
    seguir_jugando = 1
    medidor_salud = {}
    reset_medidor_salud(medidor_salud)
    mostrar_mision()
 
    while seguir_jugando == 1:
        reset_medidor_salud(medidor_salud)
        play_game(medidor_salud)
        seguir_jugando = input("¿Quieres jugar de nuevo? Si(1)/No(0):")
 
if __name__ == '__main__':
    run_application()
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 3
Ha disminuido su posición en 20 puestos en Python (en relación al último mes)
Gráfica de Python

como hacer para que no se caiga el programa al ingresar un numero fuera del rango

Publicado por Rafael (3 intervenciones) el 10/05/2019 01:40:47
pensaba hacerlo con el elif pero
seria en este punto o no?
1
2
3
4
5
def procesar_decision_usuario():
    msg = "\033[1m" + "Elige una casa, introduce un número entre 1 y 2: " + "\033[0m"
    decision_usuario = input("\n"+msg)
    idx = int(decision_usuario)
    return idx
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

como hacer para que no se caiga el programa al ingresar un numero fuera del rango

Publicado por tincopasan (1082 intervenciones) el 10/05/2019 02:48:12
pódes validar en cualquier punto, siempre que sea sobre el contenido del input, o sea, lo haces en la línea siguiente o en el momento de usar la variable que contenga al input. necesitarás un while para que se repita hasta que se ingrese lo correcto y un if para realizar la comprobación.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-1
Comentar

como hacer para que no se caiga el programa al ingresar un numero fuera del rango

Publicado por Rafael (3 intervenciones) el 10/05/2019 16:50:37
mm gracias pondre en prueba lo que me has dicho y te aviso, gracias por tomarte tu tiempo para responder amigo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar