Ayuda en python

Hola, en un ejercicio para aprender python tengo que:
Escribe una función, apagado, que tome un parámetro (puedes usar el que quieras; en este caso, nosotros usaremos s, de string). La función apagado debe usar return para retornar "Apagando..." cuando reciba los argumentos "Si", "si", o "SI", y "¡Apagado cancelado!" cuando reciba "No", "no", o "NO".
Si recibe un argumento diferente, la función debe usar return para retornar "Lo siento, no te entendí."
Y yo he hecho este código, lo que pasa es que no funciona correctamente:
afir= "si"
neg= "no"
def apagado(s):
    if s== afir or afir.upper() or "Si":
        return "Apagando..."
    elif s== neg or neg.upper() or "No":
        return "¡Apagado cancelado!"
    else:
        return "Lo siento, no te entendi"
print apagado(1)

Digamos que llames como llames a la función siempre te muestra: Apagando...
Gracias de antemano
Un tip que te puede facilitar a desarrollar la pieza de código es el uso de los modificadores en la propia entrada ¿Qué quiero decir? que transformes la respuesta del usuario por ejemplo en todo minúsculas y te olvides así de colocar todas las opciones posibles a la hora de hacer los condicionales y demás, has colocado demasiados ("afir or afir.upper() or "Si").

Ejemplo:

# -*- coding: utf-8 -*-

afir= "si"
neg= "no"
s="si" # Este es el valor de entrada, cambia el si por lo que quieras para ver la reacción de la función

def apagado(s):
    if s== "si":
        return "Apagando..."
    elif s== "no":
        return "¡Apagado cancelado!"
    else:
        return "Lo siento, no te entendi"

print apagado(s.lower()) # meto el valor dejándolo en un formato, así simplifico los condicionales.


Lo que fallaba en tu código era que en los or te habías equivocado al construirlos, esto arreglaría tu código y daría como output el que no lo entiende.

# -*- coding: utf-8 -*-

afir= "si"
neg= "no"
def apagado(s):
    if s== afir or s == afir.upper() or s=="Si":
        return "Apagando..."
    elif s== neg or s==neg.upper() or s=="No":
        return "¡Apagado cancelado!"
    else:
        return "Lo siento, no te entendi"
print apagado(1)
Howarto escribió:Un tip que te puede facilitar a desarrollar la pieza de código es el uso de los modificadores en la propia entrada ¿Qué quiero decir? que transformes la respuesta del usuario por ejemplo en todo minúsculas y te olvides así de colocar todas las opciones posibles a la hora de hacer los condicionales y demás, has colocado demasiados ("afir or afir.upper() or "Si").

Ejemplo:

# -*- coding: utf-8 -*-

afir= "si"
neg= "no"
s="si" # Este es el valor de entrada, cambia el si por lo que quieras para ver la reacción de la función

def apagado(s):
    if s== "si":
        return "Apagando..."
    elif s== "no":
        return "¡Apagado cancelado!"
    else:
        return "Lo siento, no te entendi"

print apagado(s.lower()) # meto el valor dejándolo en un formato, así simplifico los condicionales.


Lo que fallaba en tu código era que en los or te habías equivocado al construirlos, esto arreglaría tu código y daría como output el que no lo entiende.

# -*- coding: utf-8 -*-

afir= "si"
neg= "no"
def apagado(s):
    if s== afir or s == afir.upper() or s=="Si":
        return "Apagando..."
    elif s== neg or s==neg.upper() or s=="No":
        return "¡Apagado cancelado!"
    else:
        return "Lo siento, no te entendi"
print apagado(1)

Muchísimas gracias!
3 respuestas