Объясните, почему код не работает

Рейтинг: -4Ответов: 1Опубликовано: 17.03.2023

Дана задача:

Вновь велогонщики собрались узнать, кто из них быстрее. Им предстоит пройти трассу длиной 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. Объясните, пожалуйста, в чем проблема?

Ответы

▲ 3Принят

Чтобы решить эту проблему нужно:

  1. Функция должна возвращать не print('Петя') и т.п., а саму строку 'Петя';
  2. Нужно использовать другие имена переменных в 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))