web-dev-qa-db-fra.com

Créer une minuterie en python

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

Je veux créer une sorte de chronomètre qui, lorsque les minutes atteignent 20 minutes, ouvre une boîte de dialogue. Mais ma variable minutes n'augmente pas dans ce code.

33
user2711485

Vous pouvez vraiment simplifier tout ce programme en utilisant 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 ">>>>>>>>>>>>>>>>>>>>>", mins
        # Sleep for a minute
        time.sleep(60)
        # Increment the minute total
        mins += 1
    # Bring up the dialog box here
26
iCodez

Voir Objets Minuterie depuis le filetage.

Que diriez-vous 

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()

Si vous voulez passer des arguments à la fonction timeout, vous pouvez les donner dans le constructeur de timer:

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

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

Vous pouvez également utiliser functools.partial pour créer une fonction liée ou transmettre une méthode liée à une instance.

51
Antti Haapala

J'utiliserais un timedelta object.

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
6
Silas Ray

Votre code est parfait, sauf que vous devez effectuer le remplacement suivant:

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

ou

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

mais voici une autre solution à ce problème:

def wait(time_in_seconds):
    time.sleep(time_in_seconds) #here it would be 1200 seconds (20 mins)
2
Anshu Dwibhashi

Je veux créer une sorte de chronomètre qui, lorsque les minutes atteignent 20 minutes, ouvre une boîte de dialogue .

Tout ce dont vous avez besoin est de dormir à l'heure spécifiée. time.sleep () met des secondes à dormir, donc 20 * 60 équivaut à 20 minutes.

import time
run = raw_input("Start? > ")
time.sleep(20 * 60)
your_code_to_bring_up_dialog_box()
1
tdelaney
# 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 
1
Karrar Ali
mins = minutes + 1

devrait être

minutes = minutes + 1

Également, 

minutes = 0

doit être en dehors de la boucle while.

1
David
import time 

...

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

...
1
pointguard0
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

En fait, je cherchais moi-même une minuterie et votre code semble fonctionner. La raison probable pour laquelle vos minutes ne sont pas comptabilisées est que lorsque vous dites que

minutes = 0

et alors

minutes = minutes + 1

c'est comme dire

minutes = 0 + 1

Je parie que chaque fois que vous imprimez des minutes, il affiche "1" à cause de ce que je viens d'expliquer, "0 + 1" donnera toujours "1".

Ce que vous devez faire en premier est de placer votre 

minutes = 0

déclaration en dehors de votre boucle while. Après cela, vous pouvez supprimer le

minutes = minutes + 1

ligne parce que vous n'avez pas vraiment besoin d'une autre variable dans ce cas, il suffit de le remplacer par

minutes = minutes + 1

Ainsi, les minutes commenceront avec une valeur de "0", recevront la nouvelle valeur de "0 + 1", recevront la nouvelle valeur de "1 + 1", recevront la nouvelle valeur de "2 + 1", etc.

Je me rends compte que beaucoup de personnes y ont déjà répondu, mais je pensais que cela aiderait davantage, en apprenant sage, si vous pouviez voir où vous avez fait une erreur et essayer de la réparer. Merci également pour la minuterie.

0
lider
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)

Ce travail est très bon pour le temps secondes.

0
Ray Hu

Vous êtes probablement à la recherche d'un objet Timer: http://docs.python.org/2/library/threading.html#timer-objects

0
lmjohns3

Essayez d'avoir votre boucle while comme ceci:

minutes = 0

while run == "start":
   current_sec = timer()
   #print current_sec
   if current_sec == 59:
      minutes = minutes + 1
      print ">>>>>>>>>>>>>>>>>>>>>", mins
0
m-oliv
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.
0
shiva