几分钟内的python计时器

问题描述 投票:-1回答:2

我正在尝试运行以下代码。它无法运行5分钟,请您告诉我这里的问题。我试图在后台运行它,保存为.pyw并在完成1小时后提醒我,根据计时器参数传递的内容。

import time
import ctypes
def timer(minutes):
    seconds = minutes * 60
    start = time.time()
    time.clock()
    elapsed = 0
    while elapsed < seconds:
        elapsed = time.time() - start
    time.sleep(1)
    timer(5) #would want enter in hours not in seconds
    ctypes.windll.user32.MessageBoxA(0,"DoneToday", "Dones", 0)
python python-2.7
2个回答
1
投票

你的timer()函数无限循环。

你的while elapsed < seconds:循环后,两行下来,你已经把timer(5)。所以只是再次召唤自己,再次,再次......

删除此行后,它将按预期工作:

timer(5) #would want enter in hours not in seconds

正如@vermillon所提到的,任何理由你不只是在做time.sleep(minutes * 60)?我假设你计划在那个循环中做其他事情,而不仅仅是计算时间。


编辑:让OP看到正在运行的代码

>>> def timer(minutes):
...     seconds = minutes * 60
...     start = time.time()
...     time.clock()
...     elapsed = 0
...     while elapsed < seconds:
...         elapsed = time.time() - start
...     time.sleep(1)
...     ctypes.windll.user32.MessageBoxA(0,"DoneToday", "Dones", 0)
...     print 'also printing Done so you can see it'
...
>>> timer(0.1)
also printing Done so you can see it
>>>

0
投票

如果你想要一个显示剩余分钟和秒数的计时器,那么这里是你的代码:

import time
import sys

def run_timer(seconds):
    for remaining in range(seconds, 0, -1):
        sys.stdout.write("\r")
        minutes = 0
        seconds = remaining
        if remaining > 60:
            minutes = int(seconds/60)
            seconds = int(seconds%60)
        else:
            seconds = remaining
        sys.stdout.write("{:2d} minutes {:2d} seconds remaining.".format(minutes,seconds)) 
        sys.stdout.flush()
        time.sleep(0.1)
    sys.stdout.write("Timer complete") 

run_timer(120)
© www.soinside.com 2019 - 2024. All rights reserved.