
本文介绍如何编写一个python程序,持续接收用户输入的数字,直到输入-1为止,并自动计算此前所有有效输入数字的平均值。重点讲解循环控制、变量累积与平均值计算的正确逻辑。
本文介绍如何编写一个python程序,持续接收用户输入的数字,直到输入-1为止,并自动计算此前所有有效输入数字的平均值。重点讲解循环控制、变量累积与平均值计算的正确逻辑。
在实际编程中,处理“持续输入直至特定终止信号”的需求非常常见。本例要求:用户反复输入整数,当输入 -1 时停止输入,并输出此前所有输入数字的算术平均值。关键在于理解循环结构的选择、输入类型转换以及累加与计数变量的协同使用。
✅ 正确解法:使用 while True + break
最清晰、最符合语义的方式是采用无限循环 while True,并在循环体内判断终止条件:
count = 0
total = 0
while True:
try:
user_input = int(input('Enter a number (-1 to end): '))
if user_input == -1:
break # 遇到-1立即退出循环
total += user_input
count += 1
except ValueError:
print("Invalid input! Please enter an integer.")
continue
if count == 0:
print("No valid numbers entered. Cannot compute average.")
else:
average = total / count
print(f"Average of {count} numbers: {average:.2f}")
? 说明:
- count 记录有效输入个数,total 累加所有有效数值;
- int(input(...)) 将字符串输入转为整数——这是必须步骤,否则无法进行数值比较和运算;
- 使用 try-except 可增强健壮性,防止用户误输非数字内容导致程序崩溃;
- 结束后需判断 count == 0,避免除零错误(如用户直接输入 -1)。
? 替代方案:先收集再计算(列表方式)
若希望更清晰地区分“数据采集”与“结果计算”两个阶段,可先将所有有效输入存入列表:
numbers = []
while True:
try:
num = int(input('Enter a number (-1 to end): '))
if num == -1:
break
numbers.append(num)
except ValueError:
print("Please enter a valid integer.")
if numbers:
average = sum(numbers) / len(numbers)
print(f"Average of {len(numbers)} numbers: {average:.2f}")
else:
print("No numbers to average.")
该写法逻辑分离明确,便于后续扩展(如求最大值、中位数等),且 sum() 和 len() 函数让代码更简洁。
⚠️ 原代码问题分析
你最初的代码存在多个关键错误:
- adad = input(...) 返回的是字符串,for i in adad 是遍历字符串每个字符(如输入 "123" 会拆成 '1', '2', '3'),而非单个数字;
- while i != -1 中 i 是字符,无法与整数 -1 直接比较;
- 循环嵌套混乱(for 内套 while),且未对输入做 int() 转换;
- 缺少终止条件的实际响应机制,导致逻辑无法收敛。
✅ 最佳实践小结
- 始终对用户输入做 int() 或 float() 类型转换;
- 使用 while True + break 模拟“先执行、后判断”的行为,比 while condition 更直观;
- 务必加入异常处理与边界检查(如空输入);
- 变量命名建议语义化(如 total 优于 sum,因 sum 是Python内置函数名,可能引发意外覆盖)。
掌握这一模式后,你就能轻松扩展功能:例如统计正数个数、筛选偶数、或保存历史记录——核心始终是「循环→判断→累积→终止→输出」这一闭环逻辑。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











