我已经看了一段时间,并且一直在思考它是如何运作的。 我知道它的第一部分但是当我到达柜台时我被困在
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)
谢谢!
答案 0 :(得分:2)
例如,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: "))