2012-08-11 90 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