Программа не может выйти из цикла
Есть программа:
import pandas as pd
from datetime import time
flag = True
while flag:
# информация поездах
a = [{'train_code': '887B', 'station': 'Lipki', 'time_arrive': time(12, 00)},
{'train_code': '411C', 'station': 'Kyiv ', 'time_arrive': time(10, 00)},
{'train_code': '743L', 'station': 'Lipki', 'time_arrive': time(12, 00)},
{'train_code': '113F', 'station': 'Rivne', 'time_arrive': time(11, 00)}]
# вводим диапазон времени приходящих поездов
start_time = time(hour=int(input("Enter start hours: ")), minute=int(input("Enter start minutes: ")))
end_time = time(hour=int(input("Enter last hours: ")), minute=int(input("Enter last minutes: ")))
s = sorted(a, key=lambda x: x['time_arrive'])
# проверяем прибытие каких поездов совпадает с заданым нами диапазоном
for train in s:
if start_time <= train.get('time_arrive') <= end_time:
print(train)
df = pd.DataFrame(a)
res = df.groupby(["time_arrive", "station"]).filter(lambda x: len(x) > 1)
# если среди маршрутов есть такие, что приходят на одну станцию в одно и то же время, выводим ошибку и просим ввести новые данные
for i in res["time_arrive"].to_list():
if start_time <= i <= end_time:
count = len(res)
if count >= 2:
print(f'There are {count} wrong destinations')
print('Accident error. Choose the other time range please.')
flag = True
# если "ошибочных маршрутов" нет, прекращаем работу программы
else:
flag = False
break
Проблема заключается в том, что при отсутствии "ошибочных маршрутов" программа все-равно запрашивает повторный ввод. Подскажите пожалуйста где я мог упустить что-то. Заранее спасибо.
Ответы (1 шт):
Автор решения: nc_6d
→ Ссылка
Вот, нашел нужное решение:
import pandas as pd
from datetime import time
flag = True
while flag:
# информация o поездах
a = [{'train_code': '887B', 'station': 'Lipki', 'time_arrive': time(12, 00)},
{'train_code': '411C', 'station': 'Kyiv ', 'time_arrive': time(10, 00)},
{'train_code': '743L', 'station': 'Lipki', 'time_arrive': time(12, 00)},
{'train_code': '113F', 'station': 'Rivne', 'time_arrive': time(11, 00)}]
# вводим диапазон времени приходящих поездов
start_time = time(hour=int(input("Enter start hours: ")), minute=int(input("Enter start minutes: ")))
end_time = time(hour=int(input("Enter last hours: ")), minute=int(input("Enter last minutes: ")))
s = sorted(a, key=lambda x: x['time_arrive'])
# проверяем прибытие каких поездов совпадает с заданым нами диапазоном
for train in s:
if start_time <= train.get('time_arrive') <= end_time:
print(train)
df = pd.DataFrame(a)
res = df.groupby(["time_arrive", "station"]).filter(lambda x: len(x) > 1)
count = len(res)
# если среди маршрутов есть такие, что приходят на одну станцию в одно и то же время, выводим ошибку и просим ввести новые данные
for i in res["time_arrive"].to_list():
if (start_time <= i <= end_time) and (count >= 2):
print(f'There are {count} wrong destinations')
print('Accident error. Choose the other time range please.')
break
flag = False
# если "ошибочных маршрутов" нет, прекращаем работу программы
else:
flag = False
break
Программа не могла выйти из цикла, потому что res["time_arrive"].to_list() все время возвращало 2 аргумента, что в свою очередь триггерило соответствующее условие.