了解Allen Downey的“ Think Python”第5.14节练习#1

时间:2018-10-14 11:53:08

标签: python

可以在此处访问练习的链接-Section 5.14 Exercise #1

引用问题:

  

锻炼1
  ...

     

编写一个脚本,该脚本读取当前时间并将其转换为以小时,分钟和秒为单位的一天中的时间,再加上自该纪元以来的天数。

此处提供了可能的解决方案-Solution

上面提供的解决方案似乎很容易理解,但是我对将纪元时间转换为一天中的正常时间的计算/公式感到困惑。这些行最让我感到困惑:

hours = (epoch % seconds_in_a_day) // seconds_in_an_hour + 8
minutes = (epoch % seconds_in_a_day) % seconds_in_an_hour // seconds_in_a_minute
seconds = (epoch % seconds_in_a_day) % seconds_in_an_hour % seconds_in_a_minute

我的问题是,为什么将seconds_in_a_day除以epoch的余数除以seconds_in_an_hour,然后将8加到结果中。我对minutesseconds变量也有类似的困惑。我试图理解这种计算背后的逻辑,但这很令人困惑。

2 个答案:

答案 0 :(得分:2)

由于从1970到现在总共是秒,所以我们只想观察今天经过的秒数。这给出了每个公式的第一部分(epoch % seconds_in_a_day)

现在,由于今天的秒数已经过去,因此我们可以将其除以一个小时中的秒数来得出小时数。由于北京的时区是UTC + 8,因此此处将8添加到结果中。

由于我们一天之内还有几秒钟,所以花了几小时又几秒钟,我们重复了几天使用的逻辑。如果我们知道从今天开始已经过去了n秒,那么我们就可以用一个小时内的秒数来计算该时间的模数,以获取上一次未完成的秒数的“剩余”秒数小时。现在,我们将其除以seconds_in_a_minute,将秒转换为分钟。

相同的逻辑适用于秒。

答案 1 :(得分:1)

我也一直在尝试学习本书中的python编码,今天我遇到了这个问题。这是我的尝试,

total_secs  = time.time()
seconds = total_secs % 60
minutes = (total_secs // 60) % 60
hours = (total_secs // 3600) % 24
days = total_secs // (3600 * 24)

其背后的逻辑是,seconds是总秒数的余数除以一分钟的秒数,而minutes是总分钟数的余数除以分钟数在一个小时内,通过这种逻辑,我们可以以相同的方式获得hoursdays

该代码更易于阅读和理解,希望它可以为以后阅读此书的未来python初学者清除一些困惑。