Дан список людей с указанием их фамилии, имени и даты рождения. Напишите программу, которая будет определять самого старшего человека из этого списка и выводить его фамилию и имя, а если в списке есть несколько самых старших людей с одинаковой датой рождения, то определять их количество. ВХОДНЫЕ ДАННЫЕ На вход программе в первой строке подается количество людей в списке N. В каждой из последующих N строк находится информация в следующем формате: <Фамилия> <Имя> <Дата рождения> где <Фамилия> – строка, состоящая не более, чем из 20 символов без пробелов, <Имя> – строка, состоящая не более, чем из 20 символов без пробелов, <Дата рождения> – строка, имеющая вид ДД.ММ.ГГГГ, где ДД – двузначное число от 01 до 31, ММ – двузначное число от 01 до 12, ГГГГ – четырехзначное число от 1800 до 2100. ВЫХОДНЫЕ ДАННЫЕ Программа должна вывести фамилию и имя самого старшего человека в списке. Если таких людей несколько, то программа должна вывести их количество. spisok = {} N = int(input()) for i in range(N): dannye = input() dannye = dannye.split() if dannye[2] not in spisok: spisok[dannye[2]] = [dannye[0] + ' ' + dannye[1]] else: spisok[dannye[2]].append(dannye[0] + ' ' + dannye[1]) year = 10000 month = 100000 day = 100000 for key in spisok: key1 = key.split('.') key1[0] = int(key1[0]) key1[1] = int(key1[1]) key1[2] = int(key1[2]) if key1[2] < year: fio = spisok[key] year = key1[2] month = key1[1] day = key1[0] key2 = key if key1[2] == year: if key1[1] < month: fio = spisok[key] month = key1[1] day = key1[0] key2 = key if key1[1] == month: if key1[0] < day: fio = spisok[key] day = key1[0] key2 = key if len(spisok[key2]) > 1: print (len(spisok[key2])) else: print(str(fio[0])) Вот решение на Python, у меня проходят 7 из 10 тестов. Помогите найти ошибку.
Ответы на вопрос
Ошибка в том, что проверки года, месяца и дня у вас идут не как единое сравнение даты. После того как найден меньший год, сразу выполняется проверка key1[2] == year, потому что вы уже присвоили year = key1[2]. Из-за этого логика может неправильно обновлять месяц и день.
Проще сравнивать даты как кортежи: \((год, месяц, день)\). Самый старший человек — тот, у кого дата рождения меньше.
Исправленный вариант:
N = int(input())
people = []
for i in range(N):
surname, name, date = input().split()
day, month, year = map(int, date.split('.'))
people.append(((year, month, day), surname + ' ' + name))
min_date = min(person[0] for person in people)
oldest = [fio for date, fio in people if date == min_date]
if len(oldest) == 1:
print(oldest[0])
else:
print(len(oldest))
Здесь \((1800, 1, 1)\) будет меньше, чем \((1800, 2, 1)\), поэтому сравнение дат работает правильно.
Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili

