2014-03-13 6 views
0

Это простой таймер Помоморо, который я написал. Теоретически, он будет работать бесконечно, чередуя время между 25 и 5 минутами.Почему этот скрипт не работает/работает только один раз?

import time 
import sys 
import datetime 
import winsound 

def ring(sound): 
    winsound.PlaySound('%s.wav' % sound, winsound.SND_FILENAME) 

times = 0 

while True: 
    tomato = 0 
    while tomato <= 1500: 
     timeLeft = 1500 - tomato 
     formatted = str(datetime.timedelta(seconds=timeLeft)) 
     sys.stdout.write('\r'+ formatted) 
     time.sleep(1) 
     tomato += 1 
    ring("MetalGong") 

    fun = 0 
    while fun <= 300: 
     funTimeleft = 300 - fun 
     funFormatted = str(datetime.timedelta(seconds=funTimeleft)) 
     sys.stdout.write('\r'+ funFormatted) 
     time.sleep(1) 
     fun +=1 
    ring("AirHorn") 

    times += 1 
    print("You have completed" + times + "Pomodoros.") 

Но это только за один раз; как только он закончил 5-минутный блок, консольное окно закрылось (я выполнил его непосредственно двойным щелчком, а не через терминал).

Зачем это закрывается? Это связано с тем, как я использовал while True:?

Спасибо!

evamvid

+0

, если вы запустите его с консоли вы увидите, вы очень быстро почему .... ну примерно 5 минут –

+0

выглядит как его неудачу в этом «winsound.PlaySound (»% s.wav '% sound, winsound.SND_FILENAME)'. Вы получаете сообщение об ошибке? – sanooj

ответ

1

В будущем попробуйте запустить его из консоли, так что вы можете увидеть отслеживающий он генерирует, когда возбуждается исключение.

print("You have completed" + times + "Pomodoros.") 

Вы не можете неявно конкатенации int с и строк. Это выдает TypeError и таким образом заканчивает вашу программу.

Чтобы исправить:

print("You have completed " + str(times) + " Pomodoros.") # this works, and is ugly 

print("You have completed {} Pomodoros.".format(times)) # better. 
Смежные вопросы