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

Python代码求助:输出当前日期后排除周一周日的5天却重复显示同一天

问题分析与解决方案

嘿,我一眼就揪出问题所在了——你的代码每次都在检查初始当天的星期几,而不是你计算出来的NextDay,这就是为啥所有结果都显示同一天!

错误根源

你在循环里写了这行代码:

Day = str(findDay(StartDay))

这里的StartDay是程序启动时就固定好的「今天」的日期字符串,不管DayCount往后加多少天,每次调用findDay传的都是同一个初始日期,自然每次得到的星期名称都和今天一模一样。正确的做法应该是把循环中计算出的NextDay转换成对应的日期格式,传给findDay函数。

修正后的代码(附带优化)

其实我们还能简化代码,不用自定义findDay函数——datetime对象本身就可以直接获取星期名称,这样更简洁也更不容易出错:

import datetime

Today = datetime.date.today()
# 定义需要筛选的目标星期(用集合查找效率更高)
target_days = {'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'}
keyboard_days = []
day_count = 0

# 直到收集够5天为止
while len(keyboard_days) < 5:
    next_day = Today + datetime.timedelta(days=day_count)
    # 直接获取当前日期的星期全称
    current_day_name = next_day.strftime("%A")
    if current_day_name in target_days:
        keyboard_days.append(current_day_name)
        print(current_day_name)
    day_count += 1

# 打印最终数组验证
print("最终存入数组的日期星期:", keyboard_days)

优化点说明

  • 用len(keyboard_days) < 5作为循环条件,不用额外维护count变量,逻辑更直观
  • 直接调用next_day.strftime("%A")获取星期名称,省去自定义函数的冗余和出错可能
  • 把目标星期改成集合类型,成员查找的效率比列表更高(虽然数据量小的时候差异不明显,但这是更好的编程习惯)
  • 变量名改成小写加下划线的格式,符合Python的PEP8命名规范,可读性更强

原代码的快速修复(如果你想保留原来的findDay函数)

如果你不想改动太多原有代码,只需要把循环里的Day = str(findDay(StartDay))改成:

# 把NextDay转换成findDay需要的"%d %m %Y"格式字符串
next_day_str = next_day.strftime("%d %m %Y")
Day = str(findDay(next_day_str))

这样每次就会检查当前NextDay的星期,而不是固定的今天了。

内容的提问来源于stack exchange,提问作者user13847144

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 11:22:48