鱼C论坛

 找回密码
 立即注册
查看: 27|回复: 4

[作品展示] →Python会诚实地告诉你假期还剩下多少

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

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

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

x
  1. from datetime import datetime
  2. s, e = [datetime(*[int(each) for each in input(s + '日期:').split()]) for s in ['起始', '终止']]
  3. x = e - s
  4. n = datetime.now()
  5. dts = [n - s, e - n]
  6. [print(['已过', '还剩'][i], s.days, '天', s.seconds // 3600, '小时', s.seconds // 60 % 60, '分钟', s.seconds % 60, '秒', round((s.days * 86400 + s.seconds) / (x.days * 86400 + x.seconds) * 100, 1), '%') for i, s in enumerate(dts)]
复制代码


本来想写在一行里的,但是那玩意可读性太差,报错找不到在哪

其实也不是不可以 exec 大法()


  1. exec("from datetime import datetime\ns, e = [datetime(*[int(each) for each in input(s + '日期:').split()]) for s in ['起始', '终止']]\nx = e - s\nn = datetime.now()\ndts = [n - s, e - n]\n[print(['已过', '还剩'][i], s.days, '天', s.seconds // 3600, '小时', s.seconds // 60 % 60, '分钟', s.seconds % 60, '秒', round((s.days * 86400 + s.seconds) / (x.days * 86400 + x.seconds) * 100, 1), '%') for i, s in enumerate(dts)]")
复制代码



愿大家能在寒假结束前完成寒假作业!享受难得的休闲时光,然后进入史上最短的学期。

运行示例:

  1. = RESTART: C:/Users/Administrator/Desktop/days.py
  2. 起始日期:2026 2 4 0 0 0
  3. 终止日期:2026 3 4 0 0 0
  4. 已过 12 天 14 小时 45 分钟 34 秒 45.1 %
  5. 还剩 15 天 9 小时 14 分钟 25 秒 54.9 %
复制代码


# 打算优化一下,显示一个进度条,配上 os.system('cls') 做成动态效果

评分

参与人数 1荣誉 +3 鱼币 +3 贡献 +1 收起 理由
smallwh + 3 + 3 + 1 无条件支持楼主!

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2 小时前 | 显示全部楼层
果然冷清
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2 小时前 | 显示全部楼层
鱼油你好!你提供的代码片段确实有些缺失,但意图很清晰:计算假期剩余时间并显示进度。下面是一个优化版本,添加了进度条和动态刷新效果。

首先,我们使用 datetime 模块处理日期,用 os.system('cls') 清屏实现动态更新(自动适配Windows和Linux/Mac)。代码会每秒更新一次,直到假期结束。

注意:运行后按 Ctrl+C 可以终止程序。

以下是完整代码:

  1. import datetime
  2. import os
  3. import time

  4. def main():
  5.     # 获取用户输入起始和终止日期
  6.     start_str = input("起始日期(格式:年 月 日 时 分 秒,例如:2026 2 4 0 0 0):")
  7.     end_str = input("终止日期(格式:年 月 日 时 分 秒,例如:2026 3 4 0 0 0):")

  8.     # 将字符串转换为datetime对象
  9.     start = datetime.datetime.strptime(start_str, "%Y %m %d %H %M %S")
  10.     end = datetime.datetime.strptime(end_str, "%Y %m %d %H %M %S")

  11.     total_duration = end - start  # 假期总时长

  12.     while True:
  13.         now = datetime.datetime.now()

  14.         # 如果当前时间超过终止日期,结束循环
  15.         if now > end:
  16.             os.system('cls' if os.name == 'nt' else 'clear')
  17.             print("假期已经结束!")
  18.             break

  19.         elapsed = now - start  # 已过时间

  20.         # 如果当前时间早于起始日期,假期还未开始
  21.         if elapsed.total_seconds() < 0:
  22.             os.system('cls' if os.name == 'nt' else 'clear')
  23.             print("假期还未开始!")
  24.             break

  25.         # 计算进度百分比
  26.         percentage = elapsed.total_seconds() / total_duration.total_seconds() * 100
  27.         percentage = min(percentage, 100)  # 限制最大为100%

  28.         # 计算剩余时间
  29.         remaining = end - now

  30.         # 构建进度条(长度50个字符)
  31.         bar_length = 50
  32.         filled_length = int(bar_length * percentage / 100)
  33.         bar = '#' * filled_length + '-' * (bar_length - filled_length)

  34.         # 清屏(跨平台)
  35.         os.system('cls' if os.name == 'nt' else 'clear')

  36.         # 显示进度条和时间信息
  37.         print(f"假期进度: [{bar}] {percentage:.1f}%")
  38.         print(f"已过: {elapsed.days} 天 {elapsed.seconds // 3600} 小时 {elapsed.seconds // 60 % 60} 分钟 {elapsed.seconds % 60} 秒")
  39.         print(f"还剩: {remaining.days} 天 {remaining.seconds // 3600} 小时 {remaining.seconds // 60 % 60} 分钟 {remaining.seconds % 60} 秒")
  40.         print("按 Ctrl+C 退出")

  41.         # 每秒更新一次
  42.         time.sleep(1)

  43. if __name__ == "__main__":
  44.     try:
  45.         main()
  46.     except KeyboardInterrupt:
  47.         print("\n程序已退出")
  48.     except Exception as e:
  49.         print(f"输入错误:{e}")
复制代码


代码说明:
- 使用 strptime 解析输入日期,确保格式匹配。
- 进度条用 # 表示已完成部分,- 表示剩余部分。
- os.name 判断操作系统,Windows用 cls,其他用 clear 清屏。
- 添加了异常处理,避免输入错误或意外退出。

运行示例:
输入起始和终止日期后,屏幕会动态显示进度条和时间,类似以下效果(每秒刷新):

假期进度: [####################------------------------] 45.1%
已过: 12 天 14 小时 45 分钟 34 秒
还剩: 15 天 9 小时 14 分钟 25 秒

希望这个优化版本能帮助你更好地管理假期时间!享受休闲时光,高效完成作业哦~

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

使用道具 举报

发表于 1 小时前 | 显示全部楼层
假期里少见的python贴,必须支持
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 19 分钟前 | 显示全部楼层
  1. import datetime

  2. start = input('起始日期(示例2026-02-17 06:06:06,时间可以省略):')
  3. start_date = datetime.datetime.fromisoformat(start)

  4. end = input('终止日期(示例2026-02-18 06:06:06,时间可以省略):')
  5. end_date = datetime.datetime.fromisoformat(end)

  6. now = datetime.datetime.now()

  7. past = now - start_date
  8. future = end_date - now
  9. duration = end_date - start_date

  10. pastinfo = str(past).replace(':',' ').replace('.',' ').split()
  11. print('已过{1}天{3}小时{4}分钟{5}秒,占{0:.2%}'.format(past/duration,*pastinfo))
  12. futureinfo = str(future).replace(':',' ').replace('.',' ').split()
  13. print('还有{1}天{3}小时{4}分钟{5}秒,占{0:.2%}'.format(future/duration,*futureinfo))
复制代码

没有任何新功能的代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-16 17:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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