2016-04-25 2 views
1

Мне нужна петля для игры, которая будет работать до одной минуты. Я уже искал, и я нашел это:Time loop python

t_end = time.time() + 60 
while time.time() < t_end: 
    #blah blah blah 

Но этот цикл будет работать в течение одной минуты, а затем закончить цикл это на. Мне нужна петля для моей игры, которая остановится, как только закончится время, чтобы человек не догадался, прежде чем цикл закончится.

+1

у вас есть что-то внутри вашей петли, которая ждет ввода пользователем? Если да, включите это в свой фрагмент, поскольку это очень важно. – Hamms

+1

Единственный способ разбить задачу, выполняемую в настоящий момент, не дожидаясь завершения цикла, - использовать поток или многопроцессорность. Пожалуйста, будьте осторожны, многопроцессорность может быть сложной для новичков, и при использовании потоковой передачи следует учитывать соображения. Но это единственный способ гарантировать, что программа завершается через ровно 1 минуту. Посмотреть документы здесь: https://docs.python.org/2/library/threading.html https://docs.python.org/2/library/multiprocessing.html –

+0

Дает код для цикл, который останавливается, как только закончится время, а затем скажет, что вам «нужен цикл для моей игры, который остановится, как только закончится время». Что вы на самом деле пытаетесь сделать? –

ответ

-3

Вам понадобится проверить внутри цикла for, чтобы сломать его.

import time 
t_end = time.time() + 60 
while time.time() < t_end: 
    if time.time() >= t_end: 
     break 
    else: 
     #blah blah blah 

Чем больше, чем условие будет гарантировать, что мы по-прежнему разорвать петлю при условии, что часы тикают было достаточно, чтобы сделать time.time() больше t_end между временем цикл начался и время проверил, если заявление.

-1

Возможно, вы хотите просто проверить, не простаивает ли пользователь в течение одной минуты. Вы не можете сделать это с автономным циклом синхронизации, потому что в остальной части вашей программы нет ответа на таймаут, если вы не используете несколько потоков (которые вы, вероятно, не хотите делать). В однопоточной программе вы должны смешать время проверки в остальной части вашей логики, что-то вроде (псевдокод):

last_user_action = time.time() 
while True: 
    if user_did_something(): 
     last_user_action = time.time() 
    else: 
     if time.time() - 60.0 > last_user_action: 
      break 
    blah_blah_blah() # You must keep this fairly short 
sys.exit(1) 

Если функция blah_blah_blah достаточно коротка это будет работать нормально. Если это не так, вам нужно выяснить, как писать многопоточное или управляемое событиями приложение. Tkinter или любая среда GUI имеют необходимые функции.