Python - Tengo un problema al usar or

 
Vista:

Tengo un problema al usar or

Publicado por Alejandro (3 intervenciones) el 27/07/2019 23:43:27
Hola, estoy aprendiendo python y he pensado que seria buena idea hacer una aventura conversacional con lo que voy aprendiendo, todo funciona bien, cuando se introduce la acción correcta el juego avanza, pero al poner mas de una opción en los if con or ponga la acción que ponga siempre me salta error, ¿alguien sabe porque? soy muy nuevo asique es probable que sea un error muy sencillo.
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
inventario = []
inv = inventario
def p():
    print("Estas en una pequeña habitacion, con una gran puerta metalica en la pared norte y un cofre cerca de ti")
    entr=input()
    while entr != "abrir puerta" or "abrir cofre":
        print("error")
        p2()
    if entr == "abrir puerta" and inv == ["llave"]:
        print("abres la puerta")
        h()
    if entr == "abrir puerta" and inv != ["llave"]:
            print("necesitas la llave")
            p2()
    if entr == "abrir cofre":
        inv = ["llave"]
 
 
def p2():
 
    entr=input()
    while entr!="abrir puerta" or "abrir cofre":
        print("error")
        p2()
    if entr=="abrir cofre":
        inv=["llave"]
 
    if entr == "abrir puerta" and inv == ["llave"]:
        print("abres la puerta")
        h()
    if entr == "abrir puerta" and inv != ["llave"]:
        print("necesitas la llave")
        p2()
 
def h():
    print("Al abrir la puerta entras en una gran sala, te encuentras en frente de ti a un ogro, puedes ver una espada en el suelo")
    entr=input()
    while entr != "atacar ogro" or "coger espada" or "recoger espada":
        print("error")
        h2()
    if entr == "atacar ogro" and inv == ["llave","espada"]:
        print("El ogro cae muerto al suelo")
    if entr == "atacar ogro" and inv == ["llave"]:
        print("no es buena idea golpear a un ogro sin armas")
        h2
    if entr == "coger espada" or "recoger espada":
        inv = ["llave","espada"]
def h2():
    entr=input()
    while entr != "atacar ogro" or "coger espada" or "recoger espada":
        print("error")
        h2()
    if entr == "atacar ogro" and inv == ["llave","espada"]:
        print("El ogro cae muerto al suelo")
    if entr == "atacar ogro" and inv == ["llave"]:
        print("no es buena idea golpear a un ogro sin armas")
        h2
    if entr == "coger espada" or "recoger espada":
        inv = ["llave","espada"]
p()
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
Imágen de perfil de Hector Madriz
Val: 361
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Tengo un problema al usar or

Publicado por Hector Madriz (69 intervenciones) el 28/07/2019 00:26:03
Buen día, indícame de que se trata tu script? (Enunciado)

Saludos
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
Imágen de perfil de Hector Madriz
Val: 361
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Tengo un problema al usar or

Publicado por Hector Madriz (69 intervenciones) el 28/07/2019 01:09:46
a primera vista y sin analizar el código, tienes algunos errores; por ejemplo:

while entr != "atacar ogro" or "coger espada" or "recoger espada": --> INCORRECTO
while (entr != "atacar ogro") or (entr !="coger espada") or (entr !="recoger espada"): --> CORRECTO

por ello solicito mas detalles sobre el enunciado para ver en que te puedo colaborar.

Saludos
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

Tengo un problema al usar or

Publicado por Alejandro Gimenez (3 intervenciones) el 28/07/2019 13:13:59
Lo que quiero hacer es una aventura conversacional con lo que voy aprendiendo, el codigo va bien si solo pongo una accion correcta por ejemplo:
1
if entr == "abrir puerta":
pero si añado mas de una opcion con or de esta forma siempre da error:
1
if entr == "abrir puerta" or "coger llave":
no se si me he explicado bien espero que si
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
Imágen de perfil de Paolo
Val: 13
Ha disminuido su posición en 9 puestos en Python (en relación al último mes)
Gráfica de Python

Tengo un problema al usar or

Publicado por Paolo (5 intervenciones) el 28/07/2019 02:29:59
Los operadores relacionales como el != tienen mayor prioridad (se ejecutan antes)
que los operadores lógicos como el or:
1
A != B or C    # (A != B) or C
y si A != B retorna falso, el resultado dependerá del valor booleano de C según su tipo de variable,
en tu caso, al trabajar con cadenas, estas siempre retornan verdadero a menos que estén vacías.

Solución:
1
A == B or A == C

O también algo que suelo hacer para leer y comprender más rápido el cual es el propósito de Python:
1
A in (B, C)
Es una suposición mía que esto se ejecute más rápido ya que el A se evalúa una sola vez,
pero aún si no lo fuera, lo seguiría haciendo porque le hace mejor a mis ojos.
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
Imágen de perfil de Hector Madriz
Val: 361
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Tengo un problema al usar or

Publicado por Hector Madriz (69 intervenciones) el 29/07/2019 00:35:35
Bue día, prueba esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Resp=input("Quieres ir a la playa?[si,no,tal vez,quizas] : ")
 
####### opcion 1
if (Resp=="si") or (Resp=="no") or (Resp=="tal vez") or (Resp=="quizas"):
    print("La respuesta (", Resp,") es valida...")
else:
    print("La respuesta (", Resp,") es invalida...")
 
####### opcion 2
if Resp in ["si","no","tal vez","quizas"]:
   print("La respuesta (", Resp,") es valida...")
else:
   print("La respuesta (", Resp,") es invalida...")
 
####### opcion 3
if (Resp!="si") and (Resp!="no") and (Resp!="tal vez") and (Resp!="quizas"):
   print("La respuesta (", Resp,") es invalida...")
else:
   print("La respuesta (", Resp,") es valida...")

Ten presente que:
If (condicion1) or (condicion2) or (condicion3): # basta que una de las condiciones sea verdad para que el resultado de la evaluación sea verdad (lógica matemática)

espero te sirva...Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar

Tengo un problema al usar or

Publicado por Alejandro Gimenez (3 intervenciones) el 30/07/2019 08:37:35
Muchisimas gracias ya lo puedo solucionar
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