CodingBat鹦鹉(parrot)问题Python代码故障排查及优化求助
鹦鹉问题代码错误排查与解决方案
错误原因排查
现有代码的问题出在逻辑运算符优先级上:Python中and的优先级高于or,所以原代码的判断逻辑实际执行顺序是:
(talking and hour < 7) or (hour > 20)
这就导致只要hour>20,不管talking是否为True,都会直接返回True,完全不符合需求里的「必须同时满足鹦鹉在叫+时间异常才返回True」的规则,这就是talking=False、hour=21/23两个用例不通过的原因。
修复方案
只要给时间判断的部分加上括号,保证「早于7或晚于20」是一个整体的判断条件即可:
def parrot_trouble(talking, hour): if talking and (hour < 7 or hour > 20): return True else: return False
更简洁的实现
因为判断表达式本身返回的就是布尔值,可以直接返回表达式结果,省去if分支,代码更精简:
def parrot_trouble(talking, hour): return talking and (hour < 7 or hour > 20)
验证效果
修复后的代码可以通过所有测试用例:
parrot_trouble(True, 6) → True符合预期parrot_trouble(True, 7) → False符合预期parrot_trouble(False, 6) → False符合预期parrot_trouble(False, 21) → False符合预期parrot_trouble(False, 23) → False符合预期
内容的提问来源于stack exchange,提问作者Albert
相关产品推荐
相关产品推荐

