39
import time
def timer():
   now = time.localtime(time.time())
   return now[5]


run = raw_input("Start? > ")
while run == "start":
   minutes = 0
   current_sec = timer()
   #print current_sec
   if current_sec == 59:
      mins = minutes + 1
      print ">>>>>>>>>>>>>>>>>>>>>", mins

我想创建一种秒表,当分钟达到 20 分钟时,会弹出一个对话框,对话框不是问题。但是我的分钟变量在这段代码中没有增加。

4

14 回答 14

68

请参阅线程中的计时器对象

怎么样

from threading import Timer

def timeout():
    print("Game over")

# duration is in seconds
t = Timer(20 * 60, timeout)
t.start()

# wait for time completion
t.join()

如果您想将参数传递给timeout函数,您可以在计时器构造函数中提供它们:

def timeout(foo, bar=None):
    print('The arguments were: foo: {}, bar: {}'.format(foo, bar))

t = Timer(20 * 60, timeout, args=['something'], kwargs={'bar': 'else'})

或者你可以使用functools.partial来创建一个绑定函数,或者你可以传入一个实例绑定方法。

于 2013-08-23T15:12:40.277 回答
31

您可以使用以下方法真正简化整个程序time.sleep

import time
run = raw_input("Start? > ")
mins = 0
# Only run if the user types in "start"
if run == "start":
    # Loop until we reach 20 minutes running
    while mins != 20:
        print(">>>>>>>>>>>>>>>>>>>>> {}".format(mins))
        # Sleep for a minute
        time.sleep(60)
        # Increment the minute total
        mins += 1
    # Bring up the dialog box here
于 2013-08-23T15:13:33.777 回答
7

我会使用一个timedelta对象。

from datetime import datetime, timedelta

...
period = timedelta(minutes=1)
next_time = datetime.now() + period
minutes = 0
while run == 'start':
    if next_time <= datetime.now():
        minutes += 1
        next_time += period
于 2013-08-23T15:25:48.873 回答
2

您的代码很完美,只是您必须进行以下替换:

minutes += 1 #instead of mins = minutes + 1

或者

minutes = minutes + 1 #instead of mins = minutes + 1

但这是解决此问题的另一种方法:

def wait(time_in_seconds):
    time.sleep(time_in_seconds) #here it would be 1200 seconds (20 mins)
于 2013-08-23T15:14:58.507 回答
1
mins = minutes + 1

应该

minutes = minutes + 1

还,

minutes = 0

需要在while循环之外。

于 2013-08-23T15:09:34.937 回答
1

我想创建一种秒表,当分钟达到 20 分钟时,会弹出一个对话框

你只需要在指定的时间睡觉。time.sleep() 需要几秒钟才能进入睡眠,所以 20 * 60 是 20 分钟。

import time
run = raw_input("Start? > ")
time.sleep(20 * 60)
your_code_to_bring_up_dialog_box()
于 2013-08-23T15:35:26.207 回答
1
# this is kind of timer, stop after the input minute run out.    
import time
min=int(input('>>')) 
while min>0:
    print min
    time.sleep(60) # every minute 
    min-=1  # take one minute 
于 2014-10-25T22:04:55.203 回答
1
import time 

...

def stopwatch(mins):
   # complete this whole code in some mins.
   time.sleep(60*mins)

...
于 2015-02-10T11:12:02.007 回答
1
import time
mintt=input("How many seconds you want to time?:")
timer=int(mintt)
while (timer != 0 ):
    timer=timer-1
    time.sleep(1)
    print(timer)

这项工作非常适合计时秒。

于 2017-10-06T06:39:56.777 回答
0

您可能正在寻找 Timer 对象:http ://docs.python.org/2/library/threading.html#timer-objects

于 2013-08-23T15:10:32.880 回答
0

尝试让你的 while 循环像这样:

minutes = 0

while run == "start":
   current_sec = timer()
   #print current_sec
   if current_sec == 59:
      minutes = minutes + 1
      print ">>>>>>>>>>>>>>>>>>>>>", mins
于 2013-08-23T15:12:15.020 回答
0
import time
def timer(n):
    while n!=0:
        n=n-1
        time.sleep(n)#time.sleep(seconds) #here you can mention seconds according to your requirement.
        print "00 : ",n
timer(30) #here you can change n according to your requirement.
于 2016-11-09T07:16:52.930 回答
0
import time
def timer():
   now = time.localtime(time.time())
   return now[5]


run = raw_input("Start? > ")
while run == "start":
   minutes = 0
   current_sec = timer()
   #print current_sec
   if current_sec == 59:
      mins = minutes + 1
      print ">>>>>>>>>>>>>>>>>>>>>", mins

我实际上自己正在寻找一个计时器,而您的代码似乎可以正常工作,您的分钟数未被计算的可能原因是,当您这么说时

分钟 = 0

进而

分钟 = 分钟 + 1

和说一样

分钟 = 0 + 1

我敢打赌,每次打印分钟时,它都会显示“1”,因为我刚刚解释过,“0+1”总是会导致“1”。

您首先要做的是将您的

分钟 = 0

在您的 while 循环之外声明。之后,您可以删除

分钟 = 分钟 + 1

行,因为在这种情况下您实际上并不需要另一个变量,只需将其替换为

分钟 = 分钟 + 1

这样分钟将以“0”值开始,接收新值“0+1”,接收新值“1+1”,接收新值“2+1”,等等。

我意识到很多人已经回答了它,但我认为它会有所帮助,学习明智,如果你能看到你犯了错误并尝试修复它。希望它有所帮助。另外,感谢计时器。

于 2017-05-17T21:30:39.083 回答
0
from datetime import datetime
now=datetime.now()
Sec=-1
sec=now.strftime("%S")
SEC=0
while True:
    SEC=int(SEC)
    sec=int(sec)
    now=datetime.now()
    sec=now.strftime("%S")
    if SEC<sec:
        Sec+=1
    SEC=sec
print(Sec) #the timer is Sec
于 2022-01-13T15:14:10.797 回答