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
相关产品推荐
相关产品推荐

