一些测试用例输出错误

时间:2019-08-21 16:16:44

标签: python-3.7

以下是问题声明中的部分: 我们说话的鹦鹉很吵。 “小时”参数是当前小时时间,范围为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

2 个答案:

答案 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 RP 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))