2012-08-11 25 views
1

使用不等式運算符,我必須定義一個程序週末,它將一個字符串作爲輸入,如果是'Saturday'或'Sunday'則返回布爾值True,否則返回False。python:簡單的布爾型不等式運算符錯誤

這裏是我的代碼

def weekend(day): 
    if day != 'Saturday' or day != 'Sunday': 
     return False 
    else: 
     return True 

這個看似返回False每天,我不知道爲什麼,在邏輯上會work..o_o ..誰能請解釋我太小白:S

+2

通過德摩根的:!'X = A或y = B'是一樣的'(X! == a和y == b)'。應該清楚的是,由於'x == y'和'a!= b',這會創建一個剛玉:'!(x == a and x == b)' - >'!(true and false)'*或*'!(false and true)' - >'!(false)' - >'true' :) – 2012-08-11 05:06:11

回答

6

修正版本:

if day != 'Saturday' and day != 'Sunday' 

更好的版本:

return day in ['Saturday', 'Sunday'] 

爲什麼or不起作用:

當您使用or,您的病情會讀類似「如果今天不是星期六或今天不是星期天」。現在,通過「星期六」取代「今天」:

如果週六不周六或週六是不是週日

聲明「週六是不是星期六」顯然是假的,「週六不是週日」顯然是真的,所以整個陳述變成「如果虛假或真實」,這總是正確的。

替換「今天」的任何一天,你會發現,這句話始終計算爲這些句子,這是總是正確的一個:

if True or False # day = Sunday 
if False or True # day = Saturday 
if True or True # any other day 
+0

事實上,後者的版本如果是迄今爲止最清晰和最pythonic的方式來做到這一點。 – WhyNotHugo 2012-08-11 05:03:48

+0

感謝您的回答,但您能告訴我爲什麼'或'不起作用嗎? – 2012-08-11 05:10:43

+0

@ user1561559我添加了爲什麼'或'在這裏不起作用的解釋。 – 2012-08-11 05:22:22

1

你的意思是and

def weekend(day): 
    if day != 'Saturday' and day != 'Sunday': 
     return False 
    else: 
     return True 

或更清晰的版本(這隻適用於上述的德摩根):

def weekend(day): 
    if day == 'Saturday' or day == 'Sunday': 
     return True 
    else: 
     return False 

這一天將總是不同於這兩天的一個

+1

反向! '如果天=='星期六'或天=='星期天':返回True' – dawg 2012-08-11 05:04:06

+0

的確,由於不好,我解釋得很對,但是寫了錯誤的例子。固定。 – WhyNotHugo 2012-08-11 05:05:45

5

對付它的最好方法,使用這樣的:

return day.lower() in ['saturday','sunday'] 
0

提示了未來:想通過你的代碼,如果你是在痛苦的詳細計算機。例如,我真的會與我自己進行這樣的對話:

嗯,當day = 'Saturday',代碼返回False,即使我認爲它不應該。讓我們看看線路上發生了什麼。

def weekend(day):

  • 好吧,似乎好從現在開始,我會隨時'Saturday'我看到它取代day ...

if day != 'Saturday' or day != 'Sunday':

  • 好了,所以我會從心理上將其翻譯爲if 'Saturday' != 'Saturday' or 'Saturday' != 'Sunday':
  • 現在我將通過評估比較來簡化它。
    • 'Saturday' != 'Saturday'成爲False
    • 'Saturday' != 'Sunday':成爲True
  • 堵在那些,我看到if聲明說if False or True,這是一樣的if True。所以這意味着day = Saturday導致返回值False

啊哈,所以現在我看到day = 'Saturday'的情況有什麼問題; day != 'Sunday'條件意味着if評估爲True

因此,雖然下面的代碼將返回Trueday = 'Saturday'

def weekend(day): 
    if day != 'Saturday': 
     return False 
    else: 
     return True 

這個代碼將工作day = 'Sunday'

def weekend(day): 
    if day != 'Sunday': 
     return False 
    else: 
     return True 

兩個不能與or結合。

因此,儘量在將來像這樣談談自己 - 它對調試非常有用,特別是在佈局邏輯混亂的情況下。

(根據記錄,我認爲return day.lower() in ['saturday','sunday']是接近最好的方法。)

1
def weekend(day): 
    # your code here 
    if day == 'Saturday' or day == 'Sunday': 
     return True 
    else: 
     return False