鱼C论坛

 找回密码
 立即注册
查看: 20|回复: 1

[萌新报道] 新人报道第七天

[复制链接]
发表于 4 小时前 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. from datetime import date
  2. first_day =date(2026,3,31)
  3. name = 'helen_h'
  4. today =date.today()
  5. day_diff = today - first_day
  6. days = day_diff.days  +1
  7. print(f'欢迎{name}!今天是你报道打卡的{days}天')
复制代码


以上代码只适用于天天来论坛的,一旦有缺勤就不再适用。
那该怎么写呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 4 小时前 | 显示全部楼层
欢迎来到 FishC!你的问题很棒,这确实是打卡计数中常见的情况。

要解决缺勤问题,我们需要记录每次打卡的实际日期,而不是简单计算天数差。以下是两种解决方案:

方案一:使用列表记录每次打卡日期(适合数据量小的情况)


  1. from datetime import date

  2. # 模拟已经记录的打卡日期
  3. checkin_dates = [
  4.     date(2026, 3, 31),  # 第1天
  5.     date(2026, 4, 1),   # 第2天
  6.     date(2026, 4, 3),   # 第4天(4月2日缺勤)
  7.     # ... 其他打卡日期
  8. ]

  9. name = 'helen_h'
  10. today = date.today()

  11. # 如果今天还没记录,就添加到列表
  12. if today not in checkin_dates:
  13.     checkin_dates.append(today)

  14. # 计算实际打卡天数
  15. actual_days = len(checkin_dates)

  16. print(f'欢迎{name}!今天是你报道打卡的第{actual_days}天')
  17. print(f'实际打卡日期:{sorted(checkin_dates)}')
复制代码


方案二:使用文件或数据库记录(推荐,数据持久化)


  1. from datetime import date
  2. import json
  3. import os

  4. name = 'helen_h'
  5. today = date.today()
  6. record_file = f'{name}_checkin.json'

  7. # 如果记录文件不存在,创建初始记录
  8. if not os.path.exists(record_file):
  9.     with open(record_file, 'w') as f:
  10.         json.dump([str(date(2026, 3, 31))], f)  # 第一天

  11. # 读取历史记录
  12. with open(record_file, 'r') as f:
  13.     dates_str = json.load(f)

  14. # 转换为日期对象
  15. checkin_dates = [date.fromisoformat(d) for d in dates_str]

  16. # 如果今天还没记录,就添加并保存
  17. if today not in checkin_dates:
  18.     checkin_dates.append(today)
  19.     with open(record_file, 'w') as f:
  20.         # 保存为字符串格式
  21.         dates_str = [d.isoformat() for d in checkin_dates]
  22.         json.dump(dates_str, f)

  23. actual_days = len(checkin_days)

  24. print(f'欢迎{name}!今天是你报道打卡的第{actual_days}天')
  25. print(f'历史打卡次数:{actual_days}次')
复制代码


关键思路:
1. 记录每次打卡的 实际日期,而不是计算连续天数
2. 每次打卡时检查是否已记录过当天
3. 实际打卡天数 = 已记录日期的数量

这样即使中间缺勤,也能正确统计实际打卡次数。你可以根据需求选择适合的方案!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-4-7 22:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表