Python 编码蝙蝠预热返回意外的 True



正在尝试以下问题:

参数 weekdayTrue 如果它是一个 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被认为是真的,所以它认为你试图将它们设置为布尔值,这覆盖了你得到的。希望这有帮助!

如果参数工作日是 True,则参数

weekday 为 True,如果我们在度假,则参数 vacation 为 True。如果不是工作日或我们正在度假,我们会睡懒觉。如果我们睡懒觉,则返回 True。

粗体语句本身就是提示。

if not weekday or vacation:
    return True
return False

最新更新