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

Опоздание

03.05.2022, 12:09. Показов 6225. Ответов 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,706
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,706
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
14445 / 7486 / 1580
Регистрация: 06.09.2009
Сообщений: 27,129
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,706
07.05.2022, 15:00
Цитата Сообщение от thyrex Посмотреть сообщение
Рабочий вариант
А почему вы решили, что мой нерабочий? Вы его тестировали?
Пример из первого сообщения он правильно обрабатывает.

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

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

Python
1
good_nums = input('Номера нужных автобусов: ').split()
0
Вирусоборец
 Аватар для thyrex
14445 / 7486 / 1580
Регистрация: 06.09.2009
Сообщений: 27,129
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,706
07.05.2022, 16:27
Цитата Сообщение от thyrex Посмотреть сообщение
В исключение он вываливается на команде

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

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

Но вторая часть моего замечания остается в силе: расписание Ваша программа обрабатывает некорректно, что чревато неверными ответами.
1
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
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
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru