我正在try 编写一个程序,该程序将计算给定时间和实际时间的差值,然后在While循环中显示该增量.我已经完成了大部分工作,到目前为止我发现的唯一问题是print语句中的时间变量不会随着循环运行而更新.

import datetime
import time
from os import system
from sys import platform

clear_screen = lambda: system("cls" if platform == "win32" else "clear")

# print("What is the time and date of your event?")
# year = int(input("Year: "))
# month = int(input("Month: "))
# day = int(input("Day: "))
# hour = int(input("Hour: "))
# minute = int(input("Minute: "))
i = 0
year = 2023
month = 1
day = 27
hour = 12
minute = 0
second = 00
today = datetime.datetime.now()
date_entry = datetime.datetime(year, month, day, hour, minute, second)

print(f"The current date & time: {today}")
print(f"The big day is: {date_entry}")
print()
print()
print(f"蒂夫的大日子马上就要到了:")
print()
event_count = date_entry - today
event_hour = event_count.total_seconds() / 3600
event_min = ((event_hour % 1) * (60 / 100)) * 100
event_sec = ((event_min % 1) * (60 / 100)) * 100


def countdown():
    print(f"{event_hour:.0f} Hours, {event_min:.0f} Minutes, {event_sec:.0f} seconds until big mode!!!!!")
    
while i < 50:
    i += 1
    countdown()
    time.sleep(2)
    # clear_screen()`

我有一种感觉,打印语句中的时间变量没有重新计算...我曾try 通过将变量移到Countdown()函数中来重新构建程序.这产生了同样的结果.

我期待脚本输出的小时,分钟和秒,直到一个定义的时间.这部分工作得很好.然后暂停2秒(这是可行的),然后在重新计算时间增量后再次打印该语句.如果失败,打印的时间与第一个打印语句中的打印时间完全相同.

您可能还注意到了Clear_Screen().这有点用,它会清除所有的输出.我希望弄清楚在循环中打印的最后一行(即:40小时12分56秒直到大模式!)这是我还没有看太多的东西.如果你有什么建议...

提前感谢您的任何建议.

输出: 当前日期和时间:2023-01-25 19:48:04.383425 大日子是:2023-01-27 12:00:00

蒂夫的大日子马上就要到了:

距离大模式还有40小时12分56秒! 距离大模式还有40小时12分56秒! 距离大模式还有40小时12分56秒! 距离大模式还有40小时12分56秒! 距离大模式还有40小时12分56秒!

推荐答案

在调用时间函数时要小心,时间仅在第一次分配给变量时才会被分配,以下是REPL中的一个示例:

>>> import time
>>> time.time()
1674700748.035392
>>> time.time()
1674700749.2911549
>>> time.time()
1674700750.440412
>>> time.time()
1674700751.571879
>>> x = time.time()
>>> x
1674700755.0605464
>>> x
1674700755.0605464
>>> x
1674700755.0605464
>>> x
1674700755.0605464
>>> for i in range(5): print(time.time())
... 
1674700912.1213877
1674700912.1214447
1674700912.1214585
1674700912.1214688
1674700912.1214786
>>> for i in range(5): print(x)
... 
1674700755.0605464
1674700755.0605464
1674700755.0605464
1674700755.0605464
1674700755.0605464

正如你所看到的,如果我多次调用time.time,时间改变了,但如果我把它赋给x,那么x总是有相同的值.

Python相关问答推荐

如何编写一个正规表达式来查找序列中具有2个或更多相同辅音的所有单词

如何将带有逗号分隔的数字的字符串解析为int Array?

过滤绕轴旋转的螺旋桨

Python 3.12中的通用[T]类方法隐式类型检索

如何在具有重复数据的pandas中对groupby进行总和,同时保留其他列

从webhook中的短代码(而不是电话号码)接收Twilio消息

根据条件将新值添加到下面的行或下面新创建的行中

如何将ctyles.POINTER(ctyles.c_float)转换为int?

使用新的类型语法正确注释ParamSecdecorator (3.12)

在Python Attrs包中,如何在field_Transformer函数中添加字段?

大小为M的第N位_计数(或人口计数)的公式

如何从pandas的rame类继承并使用filepath实例化

python中字符串的条件替换

连接一个rabrame和另一个1d rabrame不是问题,但当使用[...]'运算符会产生不同的结果

matplotlib + python foor loop

下三角形掩码与seaborn clustermap bug

Python Pandas—时间序列—时间戳缺失时间精确在00:00

具有相同图例 colored颜色 和标签的堆叠子图

将CSS链接到HTML文件的问题

Python Mercury离线安装