Python带AND运算符的While Loop计算下一个周二四号返回错误问题
代码错误原因及修复方案
核心错误点
- 第一,while循环的逻辑条件完全不符合需求
你当前的循环条件(this_d.weekday() is not 1) and (this_d.day is not 4)的生效逻辑是:只有日期同时满足「不是周二」且「不是当月4号」两个条件时,才会进入循环累加天数。只要日期满足「是周二」或者「是当月4号」任意一个条件,循环就不会执行,直接返回当前日期,这就是代码直接返回2021-08-17的核心原因。
你要找的是「同时是周二+当月4号」的日期,循环的继续条件应该是「当前日期不同时满足两个要求」,也就是not (this_d.weekday() == 1 and this_d.day == 4),或者等价写法(this_d.weekday() != 1) or (this_d.day !=4)。 - 第二,语法使用错误,用
is not判断数值相等性is/is not是用于判断两个对象是否为同一个内存实例的运算符,不能用来判断数值是否相等,判断数值不等应该用!=。即使小整数缓存机制下部分场景is not能得到正确结果,这也是不符合Python语法规范的错误写法,存在隐性风险。
修复后代码
import datetime def tue_the_fourth(): this_d = datetime.date.today() # 先判断当天是否符合要求 if this_d.weekday() == 1 and this_d.day ==4: return this_d.strftime("%Y-%m-%d") # 不符合就循环累加,直到找到符合要求的日期 while not (this_d.weekday() == 1 and this_d.day ==4): this_d += datetime.timedelta(days=1) return this_d.strftime("%Y-%m-%d")
内容的提问来源于stack exchange,提问作者Kalphie
相关产品推荐
相关产品推荐

