【问题标题】:Understanding Allen Downey's 'Think Python' Section 5.14 Exercise #1理解 Allen Downey 的“Think Python”第 5.14 节练习 #1
【发布时间】:2019-07-28 20:20:04
【问题描述】:

可以在此处访问练习链接 - 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_dayepoch 相除的余数除以seconds_in_an_hour,然后在结果中加上一个8。我对minutesseconds 变量也有类似的困惑。我试图理解这种计算背后的逻辑,但这很令人困惑。

【问题讨论】:

    标签: python


    【解决方案1】:

    因为自1970 以来的总时间是秒,所以我们只想观察今天经过的秒数。这给出了每个公式的第一部分,(epoch % seconds_in_a_day)

    现在,由于我们有今天已经过去的秒数,我们可以将它除以一小时的秒数,得到小时数。因为北京的时区是UTC+8,所以这里加了8。

    由于我们在一天内也有秒数,因此我们会重复用于数天的逻辑。如果我们知道n 秒从今天开始已经过去,我们可以将这个时间与一个小时内的秒数取模,以获得在最后一个非完整小时内已经过去的“剩余”秒数。现在我们只需将其除以seconds_in_a_minute 即可将秒变为分钟。

    同样的逻辑也适用于秒。

    【讨论】:

    • 不错!这解释了很多,也消除了很多疑虑。
    【解决方案2】:

    我也一直在努力学习这本书,试图学习一些 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初学者解开一些疑惑。

    【讨论】:

      猜你喜欢
      • 2023-03-18
      • 1970-01-01
      • 2017-02-10
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多