【问题标题】:Trouble with a Python Countdown ProgramPython 倒计时程序的问题
【发布时间】:2013-07-25 17:40:36
【问题描述】:

大约一个月前,我最近完成了一门 Python 课程。我正在通过创建程序继续扩展我对 Python 的了解。

下面的代码是一个 Python 倒计时程序的程序。该程序所做的是要求用户输入秒、分钟和小时的计数。

无论如何,我注意到程序中出现了 2 个错误。

第一个错误: 如果我们输入小时和秒计数(并且没有分钟计数),程序将计算该特定小时的剩余时间,但它不会减去小时并将分钟设置回 59。相反,它会将分钟打印为一个负数。

第二个错误: 如果我们输入小时、秒和分钟计数,程序将计算剩余时间。但是当程序到达最后一分钟(即 01:00:59)时,它会跳过那一分钟并继续下一分钟(即 00:59:59)。

关于第二个错误:假设我输入 1 Hour, 1 Minute, 5 Seconds。它会倒计时 5 秒。然后计算机将打印 1:00:00。而不是倒计时那一分钟的秒数。它会跳到 0:59:59。希望有帮助 如果我能在修复这两个错误方面获得一些帮助,或者是一种以不同方式格式化程序的方法,那就太好了。

感谢您的阅读,期待您的回答, -匿名

import time
time_count = 0
    second = int(raw_input("Seconds:"))
    count_minute = int(raw_input("Minutes:"))
count_hour = int(raw_input("Hours:"))

    time_count += second
time_count += count_minute * 60
time_count += count_hour * 3600

    def clean():    
    global second
    global count_minute
    global count_hour
    print_second = str(second).zfill(2)
    print_minute = str(count_minute).zfill(2)
    print_hour = str(count_hour).zfill(2)
    print "%s:%s:%s" % (print_hour, print_minute, print_second)
time.sleep(1)
clean()
time.sleep(1)
for i in range(1, time_count + 1)[::-1]:
    if second == 0 and count_minute == 0 and count_hour == 0:
        clean()
        break 
    elif second != 0:
        second -= 1
    elif second == 0:
        count_minute -= 1
        second = 59
        if count_minute == 0 and count_hour > 0:
            clean()
            count_hour -= 1
            count_minute = 59
    clean()
    time.sleep(1)
print """
Timer Finished.
"""

【问题讨论】:

  • 能否请您去掉不相关的代码(例如格式化和输出视觉线条),以便 SO 帮助者可以更专注于您的实际问题/问题?
  • 所以你的意思是Jacob Kodner 只是你的别名,匿名?确实是鬼鬼祟祟!
  • 在格式化程序时,您可能应该在这里提出问题:codereview.stackexchange.com
  • 请更好地解释第二个错误,我想你可能打错了
  • 关于第二个错误:假设我输入 1 小时 1 分钟 5 秒。它会倒计时 5 秒。然后计算机将打印 1:00:00。而不是倒计时那一分钟的秒数。它会跳到 0:59:59。希望对我有所帮助如果我能在修复这两个错误方面获得一些帮助,或者是一种不同格式的程序的方法,那就太棒了。

标签: python time module timing


【解决方案1】:

您的代码中的一些问题是,globalsdirect typechecking 等的不必要使用。此外,如果您使用更高级别的构造(如 timedelta 对象),您的代码无错误的可能性会更高。这样更好:

from datetime import timedelta
from time import sleep

while True:
    try:
        hours, minutes, seconds = input('Enter hours, minutes, seconds (with a comma in between): ')
    except (ValueError, TypeError):    # other errors
        print("Error 1, please ...")
        continue
    except NameError:
        print("Error 2")
        continue
    else:
        print("All good")
        break

total = timedelta(hours=hours, minutes=minutes, seconds=seconds)
for passed_seconds in range(int(total.total_seconds())):
    print total - timedelta(seconds=passed_seconds)
    sleep(1)

【讨论】:

  • 非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多