正在尝试以下问题:
参数
weekday
是True
如果它是一个weekday
,参数vacation
是 如果我们在度假,则True
。如果不是工作日或我们正在度假,我们会睡懒觉。如果我们睡懒觉,True
回来。sleep_in(False, False) → True sleep_in(True, False) → False sleep_in(False, True) → True
我尝试运行以下代码来测试解决方案。
weekday = 0
vacation = 5
def sleep_in(weekday, vacation):
if not weekday or vacation:
return True
else:
return False
x = sleep_in(0, 6)
print x
我期待一个错误的结果。然而我却是真的!知道发生了什么吗?
所有 Python 对象都有一个布尔值;数字0
被认为是假的,每隔一个数字都是真的。
所以0
是假的,6
是真的,not 0 or 6
的计算结果是True
not 0
因为 True:
>>> not 0
True
请参阅 Python 文档中的真值测试:
可以测试任何对象的真值,用于 if 或 while 条件或作为下面布尔运算的操作数。以下值被视为 false:
[...]
- 任何数字类型的零,例如 0、0L、0.0、0j。
因此,您不需要使用 if
语句;只需直接返回表达式结果:
def sleep_in(weekday, vacation):
return not weekday or vacation
weekday = 0
vacation = 1
def sleep_in(weekday,vacation):
weekday = not weekday
if weekday or vacation: return True
return False
print (sleep_in(weekday,vacation))
基本上,您正在寻找第一值和第二值的not
。我想首先定义它们更好。输出正确。或单行;
x =lambda weekday,vacation: not weekday or vacation
print (x(0,0))
由于多种原因,您的代码将无法正常工作。首先,您不需要将工作日和假期定义为任何数字,因为它们已经在这些值中将您传递给 true 或 false。此外,您需要做的就是检查工作日是否为 != 真,假期是否为假,如果是,则返回 True。否则,您将返回 false。就这么简单
def sleep_in(weekday, vacation):
if not weekday or vacation:
return True
return False
此外,它返回此错误是因为在python中0被认为是假的,而6被认为是真的,所以它认为你试图将它们设置为布尔值,这覆盖了你得到的。希望这有帮助!
weekday 为 True,如果我们在度假,则参数 vacation 为 True。如果不是工作日或我们正在度假,我们会睡懒觉。如果我们睡懒觉,则返回 True。
粗体语句本身就是提示。
if not weekday or vacation:
return True
return False