倒数计时器如何工作?

时间:2014-09-19 19:26:33

标签: python

我已经看了一段时间,并且一直在思考它是如何运作的。 我知道它的第一部分但是当我到达柜台时我被困在

    hr, sc = divmod(counter, 3600)
    mn, sc = divmod(sc, 60)

我已经研究过divmod()但我仍然对它实际上做了什么感到困惑。为什么sc在没有在其他地方定义的时候在这里工作?

总结:

1:什么是divemod() 2:上面的代码在下面的倒数计时器中做了什么,它是如何做到的?

hours= int(input("Hours: "))
minutes= int(input("Minutes: "))
sec= int(input("Seconds: "))

counter=hours*3600+minutes*60+sec
mins=int(counter/60)
hr=int(mins/60)

while counter > 0:
    counter-=1
    hr, sc = divmod(counter, 3600)
    mn, sc = divmod(sc, 60)
    print ('%d hours, %d minutes and %d seconds' % (hr, mn, sc))
    mins=int(counter/60)
    hr=int(mins/60)
    time.sleep(1)

谢谢!

1 个答案:

答案 0 :(得分:2)

Divmod是一个执行除法并返回两个值的函数,即整数商和余数。它在技术上返回一个两个数字的元组,并将其解压缩到两个变量中。

例如,divmod(10, 3)会返回(3, 1),其中3是10 / 3的结果,1是10 % 3(10 mod 3)的结果。

a, b = divmod(10, 3)相当于a, b = (3, 1),它将3分配给a,将1分配给b

在计时器的情况下,这将取秒值并打破与小时和分钟数量相对应的秒数。每3600秒是一小时,每60秒(减去小时后)是几分钟。

因此,当计时器剩余的秒数为10,000时,第一个divmod表示“这实际上是2小时2800秒”,而第二个divmod则执行2,800,说:“实际上是46分钟40秒。“综合起来,这两行说“10,000秒实际上是2小时46分40秒。”


除了1之外,执行这些计算的代码需要非零时间,因此这个倒数计时器实际上会慢于所需的时间,因为它每秒倒计时需要花费一秒多的时间(它会休眠一秒然后执行一些计算)。


除了2之外,您编写的代码可以简化为以下内容:

hours = int(input("Hours: "))
minutes = int(input("Minutes: "))
seconds = int(input("Seconds: "))

counter = hours*3600 + minutes*60 + seconds

while counter > 0:
    counter -= 1
    hours, seconds = divmod(counter, 3600)
    minutes, seconds = divmod(seconds, 60)
    print('%d hours, %d minutes and %d seconds' % (hours, minutes, seconds))
    time.sleep(1)

除了3,请注意输入功能。如果用户键入表达式而不是数字,则由python解释器进行评估。见Is it ever useful to use Python's input over raw_input?

您已经将输入结果转换为整数。使用raw_input INSTEAD OF input !!!!! (除非这是python3,在这种情况下raw_input已重命名为input)。对于python2,请执行以下操作:

hours = int(raw_input("Hours: "))
minutes = int(raw_input("Minutes: "))
seconds = int(raw_input("Seconds: "))