Объясните, почему код не работает
Дана задача:
Вновь велогонщики собрались узнать, кто из них быстрее. Им предстоит пройти трассу длиной 43872м, и нам нужно вновь определить победителя.
На этот раз нам известны средние скорости трёх фаворитов — Пети, Васи и Толи. Кто из них пришёл к финишу первым?
Формат ввода: В первой строке записана средняя скорость Пети. Во второй — Васи. В третьей — Толи.
Формат вывода: Имя победителя гонки.
Примечание: Гарантируется, что победителем стал только один.
Написал к ней вот такой код на Python:
petya_speed = int(input())
vasya_speed = int(input())
tolya_speed = int(input())
max_speed = max(petya_speed, vasya_speed, tolya_speed)
def winner(speed):
match speed:
case 1 if speed == petya_speed: print('Петя')
case 2 if speed == vasya_speed: print('Вася')
case 3 if speed == tolya_speed: print('Толя')
print(winner(max_speed))
Однако он не работает и выводит None. Объясните, пожалуйста, в чем проблема?
Ответы (1 шт):
Автор решения: arnold
→ Ссылка
Чтобы решить эту проблему нужно:
- Функция должна возвращать не
print('Петя')и т.п., а саму строку'Петя'; - Нужно использовать другие имена переменных в
caseблоках, например, добавить к ним префиксы;
В итоге, код будет выглядеть следующим образом:
petya = int(input())
vasya = int(input())
tolya = int(input())
best = max(petya, vasya, tolya)
def winner(name):
match name:
case x if x == petya: return 'Петя'
case x if x == vasya: return 'Вася'
case x if x == tolya: return 'Толя'
print(winner(best))