2013-07-25 2 views
0

Я недавно закончил курс в Python около месяца назад. Я продолжаю расширять свои знания на Python, создавая программы.Проблема с программой обратного отсчета Python

Код ниже представляет собой программу для программы обратного отсчета Python. Что делает программа, так это то, что она запрашивает у пользователя количество секунд, минут и часов.

В любом случае, я заметил 2 ошибки, которые встречаются в программе.

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

Вторая ошибка: Если мы введем час, секунду и минуту, программа рассчитает время повторного использования. Но когда программа дойдет до последней минуты (т.е. 01:00:59), она пропустит эту минуту и ​​перейдет к следующей (то есть 00:59:59).

О 2-й ошибке: предположим, что я ввожу 1 час, 1 минута, 5 секунд. Он будет отсчитывать 5 секунд. Затем компьютер выйдет 1:00:00. Вместо того, чтобы подсчитывать секунды за эту определенную минуту. Он пропустит до 0:59:59. Надеюсь, что поможет Было бы замечательно, если бы я мог получить некоторую помощь в исправлении этих двух ошибок и, возможно, в том, чтобы по-разному форматировать программу.

Спасибо за чтение и я с нетерпением жду вашего ответа, -Anonymous

import time 
time_count = 0 
    second = int(raw_input("Seconds:")) 
    count_minute = int(raw_input("Minutes:")) 
count_hour = int(raw_input("Hours:")) 

    time_count += second 
time_count += count_minute * 60 
time_count += count_hour * 3600 

    def clean():  
    global second 
    global count_minute 
    global count_hour 
    print_second = str(second).zfill(2) 
    print_minute = str(count_minute).zfill(2) 
    print_hour = str(count_hour).zfill(2) 
    print "%s:%s:%s" % (print_hour, print_minute, print_second) 
time.sleep(1) 
clean() 
time.sleep(1) 
for i in range(1, time_count + 1)[::-1]: 
    if second == 0 and count_minute == 0 and count_hour == 0: 
     clean() 
     break 
    elif second != 0: 
     second -= 1 
    elif second == 0: 
     count_minute -= 1 
     second = 59 
     if count_minute == 0 and count_hour > 0: 
      clean() 
      count_hour -= 1 
      count_minute = 59 
    clean() 
    time.sleep(1) 
print """ 
Timer Finished. 
""" 
+0

Не могли бы вы снять ненужный код (например, форматирование и вывод визуальных линий), чтобы SO-помощники могли больше сосредоточиться на вашей реальной проблеме/вопросе? – woozyking

+3

Итак, вы имеете в виду, что «Джейкоб Коднер» - это ваш псевдоним, Аноним? Смутно! –

+0

Когда дело доходит до форматирования вашей программы, вы должны, вероятно, задать вопрос здесь: http://codereview.stackexchange.com/ –

ответ

0

Некоторые проблемы в вашем коде, ненужное использование globals, direct typechecking и т.д. Кроме того, если вы используете более высокий уровень конструкции (например, timedelta объектов) вероятность того, что ваш код будет ошибкой, будет выше. Это лучше:

from datetime import timedelta 
from time import sleep 

while True: 
    try: 
     hours, minutes, seconds = input('Enter hours, minutes, seconds (with a comma in between): ') 
    except (ValueError, TypeError): # other errors 
     print("Error 1, please ...") 
     continue 
    except NameError: 
     print("Error 2") 
     continue 
    else: 
     print("All good") 
     break 

total = timedelta(hours=hours, minutes=minutes, seconds=seconds) 
for passed_seconds in range(int(total.total_seconds())): 
    print total - timedelta(seconds=passed_seconds) 
    sleep(1) 
+0

Большое вам спасибо за помощь! – JKodner

Смежные вопросы