Python

Пожалуйста, помогите с Python

Есть последовательность положительных чисел, которая заканчивается числом 0. Выведи номера 3 максимумов этой последовательности.
Ввод:
42
42
12
18
43
0
Вывод:
5
2
1
Вот мой код, но он работает не совсем правильно:
n1 = 0
n2 = 0
n3 = 0
max_1 = 0
max_2 = 0
max_3 = 0
count = 0
n = int(input())
while n != 0:
count += 1
if n > max_1:
max_3 = max_2
max_2 = max_1
max_1 = n
n3 = n2
n2 = n1
n1 = count
elif n < max_1 and n > max_2 and n > max_3:
max_3 = max_2
max_2 = n
n3 = n2
n2 = count
elif n < max_1 and n < max_2 and n > max_3:
max_3 = n
n3 = count
n = int(input())
print(n1)
print(n2)
print(n3)
 a, b = [], []
for n in iter(input, '0'):
a.append(int(n))
b.append(0)
k = len(a) - 1
while k > 0 and a[-1] >= a[b[k - 1]]:
b[k] = b[k - 1]
k -= 1
b[k] = len(a) - 1
print(*[v + 1 for v in b[:3]], sep='\n')
В массиве a собственно вводимые значения.
В массиве b - индексы массива a, отсортированные (методом вставок) по убыванию значений элементов a.

Эффективнее заменить >= на >, но тогда ответ будет не 5 2 1, а 5 1 2 (что абсолютно эквивалентно по набору значений).

Но если надо без массивов, то:
 i, i1, i2, i3, n1, n2, n3 = 0, 0, 0, 0, -1, -1, -1
n = int(input())
while n != 0:
i += 1
if n >= n1: i1, i2, i3, n1, n2, n3 = i, i1, i2, n, n1, n2
elif n >= n2: i2, i3, n2, n3 = i, i2, n, n2
elif n >= n3: i3, n3 = i, n
n = int(input())
if i1: print(i1)
if i2: print(i2)
if i3: print(i3)
if'ы после цикла потому, что может быть введено менее 3 чисел - тогда и в выводе должно быть менее 3 строк.
Виктор Якжик
Виктор Якжик
80 925
Лучший ответ
Алексей Вахрушев Спасибо, Вам, конечно, но я такое ещё не проходил, поэтому такое не прокатит для сдачи решения
Проблема в том, что твой код не учитывает случай, когда максимальные значения встречаются несколько раз. В таких случаях нужно учитывать порядковый номер последнего вхождения максимального значения.

Попробуй вот этот код:
n1 = n2 = n3 = -1
max_1 = max_2 = max_3 = 0
count = 0

while True:
n = int(input())
if n == 0:
break
count += 1
if n > max_1:
max_3 = max_2
n3 = n2
max_2 = max_1
n2 = n1
max_1 = n
n1 = count
elif max_1 >= n > max_2:
max_3 = max_2
n3 = n2
max_2 = n
n2 = count
elif max_2 >= n > max_3:
max_3 = n
n3 = count

print(n1)
print(n2)
print(n3)

обратите внимание на использование отрицательных значений n1, n2 и n3, чтобы отличать случаи, когда соответствующий максимум еще не найден. Кроме того, я добавил условие if n == 0: break, чтобы выйти из цикла, когда введен 0.
Алексей Вахрушев У меня, к сожалению, ничего не поменялось