Top.Mail.Ru
Ответы

Код в Питон

Помогите с кодом не понимаю в чем проблема(пишу программе что надо закончить в 0:3, второстепенный цикл прекрашает работу, а первый нет просто перешагивает значение с 0 на 1 и часы дальше пошли

По дате
По рейтингу
Аватар пользователя
Профи

Проблема в том, что оператор break прерывает только тот цикл, в котором он находится. В вашем случае break прерывает только внутренний цикл по минутам, а внешний цикл по часам продолжает работать.

Вот несколько способов решения:

Способ 1 - Использование флага:

12345678910111213141516
import time

t = int(input("В какой час остановить ? "))
t2 = int(input("В какую минуту остановить ? "))

stop = False

for hour in range(24):
    for minute in range(60):
        print(hour, ":", minute)
        time.sleep(1)
        if t == hour and t2 == minute:
            stop = True
            break
    if stop:
        break

Способ 2 - Использование функции:

1234567891011121314
import time

def clock():
    t = int(input("В какой час остановить ? "))
    t2 = int(input("В какую минуту остановить ? "))
    
    for hour in range(24):
        for minute in range(60):
            print(hour, ":", minute)
            time.sleep(1)
            if t == hour and t2 == minute:
                return  # выход из функции прерывает все циклы

clock()

Способ 3 - Использование исключения:

1234567891011121314
import time

t = int(input("В какой час остановить ? "))
t2 = int(input("В какую минуту остановить ? "))

try:
    for hour in range(24):
        for minute in range(60):
            print(hour, ":", minute)
            time.sleep(1)
            if t == hour and t2 == minute:
                raise StopIteration
except StopIteration:
    pass

Первый способ с флагом - самый понятный и часто используемый для таких задач.

Аватар пользователя
Мыслитель

ГПТ плюс объясняет так:
---------------------------------
Проблема в том, что у тебя внутренний break (на 12-й строке) прерывает только внутренний цикл (for minute in range(60)), но внешний цикл по часам (for hour in range(24)) продолжает выполняться.

Чтобы полностью остановить оба цикла при достижении нужного времени, можно использовать флаг (stop = False) или функцию break в связке с else, но проще и понятнее всего будет так:

✅ Исправленный код:

12345678910111213141516
import time

t = int(input("В какой час остановить ? "))
t2 = int(input("В какую минуту остановить ? "))

stop = False  # флаг для выхода из обоих циклов

for hour in range(24):
    for minute in range(60):
        print(hour, ":", minute)
        time.sleep(1)
        if t == hour and t2 == minute:
            stop = True
            break  # выйти из minute-цикла
    if stop:
        break  # выйти из hour-цикла

Объяснение:

  • Флаг stop ставится в True, если достигнуто нужное время.

  • После этого выполняется break внутри обоих циклов.

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

Аватар пользователя
Мудрец

пайтон



Видео по теме