2013-03-01 2 views
3

Напишите функцию shut_down, которая принимает один параметр (вы можете использовать что угодно, в этом случае мы будем использовать s для строки). Функция shut_down должна возвращать «Shutting down ...», когда она получает «Да», «да» или «ДА» в качестве аргумента, и «Shutdown aborted!» когда он получает «Нет», «Нет» или «НЕТ».Функции и if - else в python. Codeacademy

Если он получает что-либо иное, чем эти входы, функция должна возвращаться «Извините, я вас не понял».

Это мой код до сих пор ... это ошибки и говорит: «Нет» не возвращает «Shutdown aborted!»

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

Добро пожаловать в StackOverflow! Этот сайт используется иначе, чем другие форумы, которые вы использовали раньше. Это ** вопрос ** - и - ** ответ ** сайт. Вы задаете вопрос, другие читают, дают ответ. У вас есть вопрос? –

+0

Для дальнейшего использования, если вы хотите, чтобы программа фактически закрывала компьютер Windows, вы можете использовать 'subprocess.call ([" shutdown "," - s "]), чтобы получить дополнительную информацию [мой вопрос.] (Http://stackoverflow.com/questions/14764126/how-to-make-a-python-script-which-can-logoff-shutdown-and-restart-a-computer) – xxmbabanexx

+1

Не могли бы вы, сэр, взять немного своего безусловно, драгоценное время, чтобы согласиться на рассмотрение ответов и сказать, что вы можете подумать, сэр, о том, чтобы опустить буквы с помощью '.lower()', как это выразил ваш слуга ГордонБерд, который, как и я, так и другие, чья честь ответить на ваш вопрос, посвятила его неважное время, чтобы облегчить вашу школьную задачу. О, пожалуйста. - Кстати, задавая первый вопрос, как вы это делали, это модель хамства: не только не высказывайте приветствия, а выражаясь императивным образом. «Напишите функцию, ...» _ – eyquem

ответ

9

Это:

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

эквивалентно следующему:

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

Который всегда будет возвращать True, так как непустой строки является True.

Вместо этого, вы хотите сравнить s с каждой строки по отдельности, например, так:

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

Он должен закончить так:

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

Большое спасибо! это сработало. – user2121992

4

Вы можете сделать это несколько способов:

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

Или:

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

или 'if s.upper() ==« YES », который улавливает еще несколько случаев (которые вы можете или не хотите, например,« yEs »). –

+0

Не проще ли использовать его 's.lower()'? Лень, я ненавижу писать слишком много :) – xxmbabanexx

+0

Нет, потому что это сравнило бы 'yEs' с' yes', что неверно. – GordonsBeard

2

Добро пожаловать в SO. Я шаг за шагом прохожу через ответ.

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

Это спрашивает, хочет ли пользователь закрыть.

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

Это, вероятно, ново для вас. Если у вас есть строка, а затем .lower(), он изменяет все входные данные от s до нижнего регистра. Это проще, чем предоставление списка всех возможностей.

shut_down(s) 

Это вызывает функцию.

+0

Должно быть 's.lower()', а не '' yes ".lower()' –

+0

Спасибо! Извини за это. – xxmbabanexx

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

Идея GordonsBeard является хорошей. Вероятно, «yEs» и «yES» и т. Д. Являются приемлемыми критериями;
Тогда я предлагаю в этом случае:

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

Это самый уникальный ответ. +1 –

0

Я знаю, что это точно не соответствует спецификации, но это еще один распространенный вариант, который будет поймать несколько перестановок:

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

Я программист на питоне и закончил Codecademy. Я вижу, что у вас есть проблема, и позвольте мне дать вам мой ответ.Он отлично работает

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

Вы можете попробовать этот код:

def shut_down(s): 

if s =="yes": 
    return "Shutting Down" 

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