为什么以下Python自定义sleep_in函数无法正确返回预期的False值
Python sleep_in函数返回值异常问题分析
根因定位
- 类型匹配错误:代码中将字符串类型的
weekday参数直接与列表类型的工作日集合做相等判断,字符串和列表是完全不同的数据类型,weekday == ['monday', 'tuesday', 'wednesday', 'thursday', 'friday']这个判断恒为False,第一个分支永远不会触发。 - 逻辑判断错误:第二个分支的
weekday != ['monday', 'tuesday', 'wednesday', 'thursday', 'friday']因为上述类型不匹配的问题恒为True,or逻辑下只要任意一个条件为真整个表达式就为真,因此无论传入的weekday是什么,只要vacation为No都会直接返回True,永远走不到返回False的else分支。
修复方案
调整判断逻辑为校验传入的weekday是否属于工作日列表,同时简化冗余的分支:
def sleep_in(weekday, vacation): workdays = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday'] # 非工作日 或 休假状态下可以睡懒觉 return weekday not in workdays or vacation == 'Yes' print(sleep_in('monday', 'No'))
调整后调用sleep_in('monday', 'No')会正确返回预期的False。
内容的提问来源于stack exchange,提问作者aachebe1029
相关产品推荐
相关产品推荐

