Не могу понять логику работы счетчика
Есть задача:
Определите среднее значение всех элементов последовательности, завершающейся числом 0. Использовать массивы в данной задаче нельзя.
Я её сделал, вот код моего решения:
number = int(input())
amount = 0
sumSequence = number
while number != 0:
number = int(input())
amount += 1
sumSequence += number
print(amount, sumSequence)
mean = sumSequence / amount
print(mean)
Были проверены все тесты - программа работает правильно, но я не могу понять, почему она работает, т.к. по моей логике в ней должна быть ошибка.
Поясняю, в коде есть переменная amount, подсчитывающая количество элементов последовательности, которая изначально равна 0. Увеличиваться эта переменная должна с началом работы цикла.
Наример, пользователь вводит последовательность 1, 7, 9, 0. Программа считывает 1 вне цикла, поэтому amount продолжает быть равным 0. Затем, когда начинает работу цикл, amount с каждым вводом увеличивается до тех пор, пока пользователь не введет 0. Пользователь вводит 7 - amount равняется 1, вводит 9 - равняется 2.
Почему тогда в итоге, после работы цикла, amount равен 3?
Ответы (1 шт):
Это работает потому, что вы увеличиваете счётчик amount и в том случае, когда number == 0.Выход из цикла происходит на следующей итерации уже после увеличения счётчика.
Если добавить вывод отладочной информации на печать - становится понятнее, что происходит в цикле:
while number != 0:
number = int(input())
amount += 1
sumSequence += number
print(f"number:\t{number}\tamount:\t{amount}\tsumSequence:\t{sumSequence}")
ввод: 1, 7, 9, 0, вывод:
number: 7 amount: 1 sumSequence: 8
number: 9 amount: 2 sumSequence: 17
number: 0 amount: 3 sumSequence: 17
Но лучше сделать код более понятным:
sum_ = 0
count_ = 0
while True:
num = int(input())
if num == 0:
break
sum_ += num
count_ += 1
res = sum_ / count_