以下是问题声明中的部分: 我们说话的鹦鹉很吵。 “小时”参数是当前小时时间,范围为0..23。如果鹦鹉在说话,并且时间在7点之前或20点之后,我们就会遇到麻烦。如果我们遇到麻烦,请返回True。
测试案例: parrot_trouble(真,6)→真 parrot_trouble(真,7)→假 parrot_trouble(False,6)→错误
代码:(我尝试过/写过)
def parrot_trouble(talking, hour):
if talking and hour<7 or hour>20:
return True
if not talking and hour>7 or hour<=20:
return False
测试案例未运行: parrot_trouble(False,21)→False,但是我得到了True parrot_trouble(False,23)→False,但是我得到了True
答案 0 :(得分:1)
这里的问题是if talking and hour<7 or hour>20:
语句。
您真正要说的是if (talking and hour<7) or hour>20
。这意味着,如果小时数超过20,无论如何都将始终返回True。
尝试这样的事情:
def parrot_talking(talking, hour):
if (talking and hour<7) or (talking and hour>20):
return True
else: return False
答案 1 :(得分:0)
两件事:
首先,请记住(P and Q) or R
与P and (Q or R)
不同。您打算使用后者,但Python将其解释为第一个。在python和其他几种编程语言中,and和ors串在一起,它将从左到右应用它们。我认为,括号将有助于使您的想法井井有条,即使遗漏了同样的意思也应使用括号。在您的情况下,忘记括号会导致代码错误。当您运行parrot_trouble(False,21)时,由于hour>20
为true,它返回true。
第二,与其使用第二个if语句返回false,不如使用else语句或根本不使用任何语句,这要干净得多。更好的是,不要使用if语句开头,而是将所有这些简化为单个return语句。此外,您对if语句的否定是错误的。 talking and (hour<7 or hour>20)
的取反实际上是not talking or (hour >= 7 and hour <= 20)
def parrot_trouble(talking, hour):
return (talking and (hour<7 or hour>20))