You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 07:27:03