Funciones y si – si no en python. Codeacademy

Escriba una función, shut_down, que tome un parámetro (puede usar lo que quiera, en este caso, usaríamos s para la cadena). La función shut_down debería devolver “Shutting down …” cuando aparece “Yes”, “yes” o “YES” como argumento, y “Shutdown aborted!” cuando aparece “No”, “no” o “NO”.

Si obtiene algo más que esas entradas, la función debería devolver “Lo siento, no te entendí”.

Este es mi código hasta ahora … falla y dice que “No” no devuelve “¡Apagado interrumpido!”

def shut_down(s): if s == "Yes" or "yes" or "YES": return "Shutting down..." elif s == "No" or "no" or "NO": return "Shutdown aborted!" else: return "Sorry, I didn't understand you." 

Esta:

 s == "Yes" or "yes" or "YES" 

es equivalente a esto:

 (s == "Yes") or ("yes") or ("YES") 

Lo que siempre devolverá True , ya que una cadena no vacía es True .

En su lugar, desea comparar s con cada cadena individualmente, así:

 (s == "Yes") or (s == "yes") or (s == "YES") # brackets just for clarification 

Debería terminar así:

 def shut_down(s): if s == "Yes" or s == "yes" or s == "YES": return "Shutting down..." elif s == "No" or s == "no" or s == "NO": return "Shutdown aborted!" else: return "Sorry, I didn't understand you." 

Puedes hacerlo de un par de maneras:

 if s == 'Yes' or s == 'yes' or s == 'YES': return "Shutting down..." 

O:

 if s in ['Yes', 'yes', 'YES']: return "Shutting down..." 

Bienvenido a SO. Voy a caminar a través de la respuesta, paso a paso.

 s = raw_input ("Would you like to shut down?") 

Esto pregunta si el usuario desea cerrar.

 def shut_down(s): if s.lower() == "yes": print "Shutting down..." elif s.lower() == "no": print "Shutdown aborted!" else: print "Sorry, I didn't understand you." 

Esto es probablemente nuevo para ti. Si tiene una cadena, y luego .lower() cambia todas las entradas de s a minúsculas. Esto es más simple que dar una lista de todas las posibilidades.

 shut_down(s) 

Esto llama a la función.

 def shut_down(s): return ("Shutting down..." if s in("Yes","yes","YES") else "Shutdown aborted!" if s in ("No","no","NO") else "Sorry, I didn't understand you.") 

La idea de GordonsBeard es buena. Probablemente “yEs” y “yES” etc. son criterios aceptables;
Entonces te propongo en este caso:

 def shut_down(s,d = {'yes':"Shutting down...",'no':"Shutdown aborted!"}): return d.get(s.lower(),"Sorry, I didn't understand you.") 

Sé que esto no se ajusta exactamente a la especificación, pero esta es otra opción común que podría detectar algunas permutaciones más:

 def shut_down(s): s = s.upper() if s == "YES": return "Shutting down..." elif s == "NO": return "Shutdown aborted!" else: return "Sorry, I didn't understand you." 

Soy un progtwigdor de python y he terminado Codecademy. Veo que tienes un problema y déjame darte mi respuesta. Funciona perfectamente

 def shut_down(s): if s == "yes": return "Shutting down" elif s == "no": return "Shutdown aborted" else: return "Sorry" 

Puedes probar este código:

 def shut_down(s): if s =="yes": return "Shutting Down" elif s =="no": return "Shutdown aborted" else: return "Sorry" print shut_down("yes") 

El código del usuario ‘grc’ publicado aquí, casi me funcionó. Tuve que ajustar el mensaje de vuelta para hacerlo bien. Si el mensaje (es decir, todas las cadenas devueltas) no es exactamente el mismo que se describe en Codecademy, entonces el espacio de trabajo no validará su respuesta.

 def shut_down(s): if s == "Yes" or s == "yes" or s == "YES": return "Shutting down" elif s == "No" or s == "no" or s == "NO": return "Shutdown aborted" else: return "Sorry" 
 def shut_down(phrase): word = phrase return word take_action = input(shut_down('do you want to shutdown the program?: '.title())) if take_action.lower() == 'yes': print('Shutting down...') elif take_action.lower() == 'no': print('Shutdown aborted!') else: print('Sorry, I didn\'t understand you.')