Не могу найти ошибку в коде

Почему-то для входных значений количества игроков 2 и 3 программа не работает нормально, а для 4 работаетЗадание: Известна информация о нескольких игроках: ФИО, возраст, сумма набранных очков, e-mail (может быть не указан). Выведите на экран: - ФИО самого молодого игрока; - ФИО игрока с наибольшей суммой очков; - количество тех, у кого не указан e-mail.Код:
i = int(input('Введите кол-во игроков'))
l = []
for k in range(i):
    print('Если e-mail не указан, ставьте "-": ')
    l.append([input('ФИО '), input('возраст '), input('очки '), input('e-mail ')])
 
for igrok in l:
    print(igrok)
 
molodoy = l[0][0]
vozrast = l[0][1]
for k in range(1, i):
    if vozrast > l[k][1] :
            vozrast = l[k][1]
            molodoy = l[k][0]
            
print('ФИО самого молодого игрока:', molodoy)
 
********** = l[0][0]
ochki_sravnenie = l[0][2]
for k in range(1, i):
    if ochki_sravnenie < l[k][2] :
            ochki_sravnenie = l[k][2]
            ********** = l[k][0]
            
print('ФИО игрока с наибольшей суммой очков:', **********)
 
pustoy_mail = 0
for k in range(i):
    if l[k][3] == '-':
        pustoy_mail += 1
        
print('количество тех, у кого не указан e-mail:', pustoy_mail)
Пример вывода с ошибкой для кол-ва игроков = 3 (i = 3): ['sdfgh', '45', '43679', 'hj'] ['bkl', '2', '7', 'hgjfguk'] ['xvffh', '65', '656', '-'] ФИО самого молодого игрока: bkl ФИО игрока с наибольшей суммой очков: bkl количество тех, у кого не указан e-mail: 1
2 ответа

Натаниэль98, в строке 22 вы сравниваете два объекта типа <class'str'>, отсюда и неверный результат. То же самое вы делаете в строке 13, но здесь вам повезло с входным набором данных. Переменные, предназначенные для хранения значений возраста и очков, должны иметь числовой тип данных. Функция input() же, напротив, возвращает объект, имеющий строковый тип данных.


players = []
 
for i in range(int(input('игроков '))):
    players.append([input('ФИО: '), int(input('возраст ')), int(input('очки ')), input('e-mail ')])
 
print('youngest: ', min(players, key=lambda x: x[1])[0])
print('    best: ', max(players, key=lambda x: x[2])[0])
print('no email: ', len([p for p in players if p[3] == '-']))