Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/25: Рейтинг темы: голосов - 25, средняя оценка - 4.52
1 / 1 / 0
Регистрация: 17.02.2022
Сообщений: 15

Опоздание

03.05.2022, 12:09. Показов 6075. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Петя все время опаздывает на автобус, который ходит по расписанию. Помогите Пете понять, когда ему нужно выходить из дома, чтобы не опоздать.

Формат ввода
Вводится расписание движения автобусов по маршруту в виде строк, в которых номер автобуса, часы и минуты разделены двоеточием. Время вводится, пока не будет введена пустая строка.

Затем вводится время в настоящий момент. Затем номера автобусов, которые подходят Пете, также через пробел.

Формат вывода
Считая, что Пете до автобусной остановки идти 5 минут и минуту нужно оставить про запас, выведите, через сколько минут нужно выйти из дома, чтобы не опоздать на ближайший автобус. Если до конца суток такого автобуса нет, выведите None.

Пример
Ввод
31 12:00
14 13:45
46 14:15
31 14:30
28 20:00
13:40
31 14
Вывод
44
У меня получился такой код, но почему то не работает
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
a = ' '
raspisanie = {}
vrema = []
while a != '':
    a = input().split()
    nazvanie = a[1]
    a2 = a[1].split(':')
    time = a2[0] * 60 + a2[1]
    raspisanie.get(nazvanie, time)
t = input().split(':')
time = t[0] * 60 + t[1]
avtobus = input().split()
for j in avtobus:
    r = raspisanie[j] - time - 6
    if r > 0:
        vrema.append(r)
print(min(vrema))
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.05.2022, 12:09
Ответы с готовыми решениями:

Опоздание
Представьте себе такую неприятную ситуацию: вы просыпаетесь утром и обнаруживаете, что проспали и можете опоздать на занятия в лицее. Вы...

Опоздание
Представьте себе такую неприятную ситуацию: вы просыпаетесь утром и обнаруживаете, что проспали и можете опоздать на занятия в лицее. Вы...

Опоздание
Представьте себе такую неприятную ситуацию: вы просыпаетесь утром и обнаруживаете, что проспали и можете опоздать на занятия в лицее. Вы...

11
 Аватар для Vadim84
70 / 47 / 30
Регистрация: 20.04.2022
Сообщений: 105
03.05.2022, 13:59
Цитата Сообщение от LordKolMos Посмотреть сообщение
time = a2[0] * 60 + a2[1]
вот тут строка '12' * 60 + '00', нужен int, дальше не смотрел

Добавлено через 5 минут
Python
1
2
a = input().split()
    nazvanie = a[1]
а тут вводится пустая строка и nazvanie обращается к несуществующему индексу
1
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,707
03.05.2022, 15:04
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
rasp = {}
while True:
    try:
        avt, t = input('Номер автобуса, время отправления (ЧЧ:ММ): ').split()
        h_a, m_a = map( int, t.split(':') )
        rasp[avt] = h_a*60 + m_a
    except:
        break
h_cur, min_cur = map( int, input('Текущее время (ЧЧ:ММ): ').split(':') )
t_cur = h_cur*60 + min_cur
good_nums = input('Номера нужных автобусов: ').split()
res_times = []
delta_t = 6
for n in good_nums:
    if n in rasp:
        res = rasp[n] - t_cur - delta_t
        if res >= 0:
            res_times.append( res )
if not res_times:
    print('None')
else:
    print( min( res_times ) )
1
1 / 1 / 0
Регистрация: 17.02.2022
Сообщений: 15
07.05.2022, 09:49  [ТС]
всё поправил но почему то опять не работает, а тот код от idealist тоже не работает такая же ошибка, не знаю как её убрать
вот -
Traceback (most recent call last):
File "/temp/executing/test.py", line 3, in <module>
from solution import *
File "/temp/executing/solution.py", line 6, in <module>
h_cur, min_cur = map(int, input().split(':'))
ValueError: invalid literal for int() with base 10: '14 13'
make: *** [run] Error 1
А вот код
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
a = input()
raspisanie = {}
vrema = []
while True:
    nazvanie = a[0]
    a2 = a[1].split(':')
    time = int(a2[0]) * 60 + int(a2[1])
    raspisanie.get(nazvanie, time)
    a = input()
    if a == '':
        break
    else:
        a = a.split()
t = input().split(':')
time = int(t[0]) * 60 + int(t[1])
avtobusi = input().split()
for j in avtobusi:
    r = raspisanie[j] - time - 6
    if r > 0:
        vrema.append(r)
print(min(vrema))
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,707
07.05.2022, 11:28
Цитата Сообщение от LordKolMos Посмотреть сообщение
h_cur, min_cur = map(int, input().split(':'))
ValueError: invalid literal for int() with base 10: '14 13'
По этой записи можно предположить, что в текущем времени больше двух чисел, разделенных двоеточием, может там и секунды приплели.
Вот так попробуйте:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
rasp = {}
while True:
    try:
        avt, t = input('Номер автобуса, время отправления (ЧЧ:ММ): ').split()
        h_a, m_a = map( int, t.split(':') )
        rasp[avt] = h_a*60 + m_a
    except:
        break
h_cur, min_cur, *sec = map( int, input('Текущее время (ЧЧ:ММ): ').split(':') )
t_cur = h_cur*60 + min_cur
good_nums = input('Номера нужных автобусов: ').split()
res_times = []
delta_t = 6
for n in good_nums:
    if n in rasp:
        res = rasp[n] - t_cur - delta_t
        if res >= 0:
            res_times.append( res )
if not res_times:
    print('None')
else:
    print( min( res_times ) )
1
Вирусоборец
 Аватар для thyrex
14432 / 7474 / 1579
Регистрация: 06.09.2009
Сообщений: 27,112
07.05.2022, 13:33
idealist, после
Python
1
2
    except:
        break
программа пытается разделить строку 31 14 и в качестве разделителя ищет ":"

Добавлено через 1 час 9 минут
Плюс, если текущее время будет, например, 11:40, то вместо 14 выдаст 119, если модифицировать Ваш ввод так

Python
2
3
4
5
6
7
8
9
10
11
12
13
14
15
while True:
    try:
        info = input()
        p1, p2 = info.split(':')
        if ' ' in p1:
            m_a = int(p2)
            avt, h_a = p1.split()
            rasp[avt] = int(h_a)*60 + m_a
        else:
            h_cur, min_cur = int(p1), int(p2)
            t_cur = h_cur*60 + min_cur
    except:
        good_nums = info.split()
        break
Добавлено через 31 минуту
Рабочий вариант

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
rasp = {}
while True:
    try:
        info = input()
        p1, p2 = info.split(':')
        if ' ' in p1:
            m_a = int(p2)
            avt, h_a = p1.split()
            avt_time = int(h_a)*60 + m_a
            if not avt in rasp:
                rasp[avt] = [avt_time]
            else:
                rasp[avt].append(avt_time)
        else:
            t_cur = int(p1)*60 + int(p2)
    except:
        good_nums = info.split()
        break
res_times = []
delta_t = 6
for n in good_nums:
    if n in rasp:
        for p in range(len(rasp[n])):
            res = rasp[n][p] - t_cur - delta_t
            if res >= 0:
                res_times.append(res)
if not res_times:
    print('None')
else:
    print(min(res_times))
1
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,707
07.05.2022, 15:00
Цитата Сообщение от thyrex Посмотреть сообщение
Рабочий вариант
А почему вы решили, что мой нерабочий? Вы его тестировали?
Пример из первого сообщения он правильно обрабатывает.

Цитата Сообщение от thyrex Посмотреть сообщение
Python
1
2
except:
    break
программа пытается разделить строку 31 14 и в качестве разделителя ищет ":"
Не, этот фрагмент кода прекращает бесконечный цикл ввода расписания, когда вводится пустая строка.

Список номеров нужных автобусов вводится в виде списка здесь:

Python
1
good_nums = input('Номера нужных автобусов: ').split()
0
Вирусоборец
 Аватар для thyrex
14432 / 7474 / 1579
Регистрация: 06.09.2009
Сообщений: 27,112
07.05.2022, 16:13
idealist, если бы не тестировал, не написал бы

В исключение он вываливается на команде
Python
1
avt, t = input('Номер автобуса, время отправления (ЧЧ:ММ): ').split()
при попытке обработать строку 13:40, в которой нет никаких пробелов. После обработки исключения управление передается на обработку строки 31 14, в которой нет двоеточия в качестве разделителя.

Поэтому это
Цитата Сообщение от idealist Посмотреть сообщение
Пример из первого сообщения он правильно обрабатывает.
голословное утверждение.

+ в случае корректности
Цитата Сообщение от thyrex Посмотреть сообщение
если текущее время будет, например, 11:40, то вместо 14 выдаст 119
А все потому, что Вы считаете, что автобусы определенного номера ходят раз в день (но даже в примере это не так) и просто заменяете значение в словаре на большее
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,707
07.05.2022, 16:27
Цитата Сообщение от thyrex Посмотреть сообщение
В исключение он вываливается на команде

avt, t = input('Номер автобуса, время отправления (ЧЧ:ММ): ').split()
при попытке обработать строку 13:40, в которой нет никаких пробелов. После обработки исключения управление передается на обработку строки 31 14, в которой нет двоеточия в качестве разделителя.
Вы условие невнимательно прочитали:

Цитата Сообщение от LordKolMos Посмотреть сообщение
Вводится расписание движения автобусов по маршруту в виде строк, в которых номер автобуса, часы и минуты разделены двоеточием. Время вводится, пока не будет введена пустая строка.
После того как ввели все строчки расписания, на очередной запрос номера автобуса и времени вводите пустую строку. Тогда программа нормально отработает.
1
Вирусоборец
 Аватар для thyrex
14432 / 7474 / 1579
Регистрация: 06.09.2009
Сообщений: 27,112
07.05.2022, 16:38
Ок, невнимательно прочитал.

Но вторая часть моего замечания остается в силе: расписание Ваша программа обрабатывает некорректно, что чревато неверными ответами.
1
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,707
07.05.2022, 20:38
Цитата Сообщение от thyrex Посмотреть сообщение
расписание Ваша программа обрабатывает некорректно, что чревато неверными ответами.
Да, пардон, здесь ошибочка просочилась, спасибо.

Вот так более правильно:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
rasp = {}
while True:
    try:
        avt, t    = input(f'\n(Для выхода из ввода расписания просто нажмите Enter)'
                          f'\nНомер автобуса, время отправления (ЧЧ:ММ) : ').split()
        h_a, m_a  = map( int, t.split(':') )
        rasp[avt] = rasp.get(avt, [] ) + [ h_a*60 + m_a ]
    except:
        break
h_cur, min_cur, *sec = map( int, input('Текущее время (ЧЧ:ММ): ').split(':') )
t_cur = h_cur*60 + min_cur
good_nums = input('Номера нужных автобусов: ').split()
res_times = []
delta_t = 6
for n in good_nums:
    for tm in rasp[n]:
        res = tm - t_cur - delta_t
        if res >= 0:
            res_times.append( res )
if not res_times:
    print('None')
else:
    print( min( res_times ) )
2
1 / 1 / 0
Регистрация: 26.05.2022
Сообщений: 2
26.05.2022, 15:34
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
r = dict()
while (a := input()) != '':
    avt, t = a.split()
    h, m = map(int, t.split(':'))
    r[avt] = r.get(avt, []) + [h * 60 + m]
y_h, y_m = map(int, input().split(':'))
you = y_h * 60 + y_m
need = list(input().split())
f = False
res = 0
for i in need:
    for j in r[i]:
        x = j - you - 6
        if x >= 0 and (not f or (f and x < res)):
            res = x
            f = True
if f:
    print(res)
else:
    print('None')
сразу выбирает минимальную разницу времени с нужным автобусом
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.05.2022, 15:34
Помогаю со студенческими работами здесь

Как правильно записать опоздание функции через функцию-ножницы, если t!=0 при t>4? Как правую часть записать?
Нужно найти изображение оригинала. Всю суть проблемы написал в заголовке.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru