Ошибка с вашим кодом в том, что на этом куске кода ...
while inputPositiveInteger() != -1:
total += inputPositiveInteger()
Сначала вы набираете inputPositiveInteger
и выбрасываете результат в вашем состоянии.Вам необходимо сохранить результат, иначе один вход из двух игнорируется, а другой добавляется, даже если он -1
.
num = inputPositiveInteger()
while num != -1:
total += num
count += 1
num = inputPositiveInteger()
Улучшения
Хотя, обратите внимание, что ваш кодможет быть значительно улучшено.См. Комментарии в следующей улучшенной версии вашего кода.
def calcAverage(total, count):
# In Python3, / is a float division you do not need a float cast
average = total / count
return format(average, ',.2f')
def inputPositiveInteger():
str_int = input("Please enter a positive integer, anything else to quit: ")
# If str_int.isdigit() returns True you can safely assume the int cast will work
return int(str_int) if str_int.isdigit() else -1
# In Python, we usually rely on this format to run the main script
if __name__ == '__main__':
# Using the second form of iter is a neat way to loop over user inputs
nums = iter(inputPositiveInteger, -1)
sum_ = sum(nums)
print(sum_)
print(len(nums))
print(calcAverage(sum_, len(nums)))
Одна деталь, о которой стоит прочитать в приведенном выше коде, - это вторая форма iter
.