Python循环输入5个数值:求和、均值等功能报错排查
问题分析与修复方案
核心错误原因
- 变量类型不匹配:你用单个整数变量
Number存储每次输入的值,循环结束后它只保留最后一个输入的数字。但sum()、min()、max()这些函数需要处理可迭代对象(比如列表),直接传单个整数必然会触发"int不可迭代"的报错。 - 输入验证分支缩进错误:代码里的
else: break缩进位置不对,导致即使用户输入了符合要求的数值,也无法跳出内层的while循环。 - 变量名冲突:你定义了大写的
Interest = 0.2,后面计算时却用了小写的interest,会导致变量未定义的潜在问题;同时利息计算的逻辑表述也需要明确。
修复后的完整代码
# 初始化列表存储所有输入的数值 numbers = [] interest_rate = 0.2 for _ in range(5): while True: input_value = input("Enter a number: ") # 验证输入非空 if not input_value: print("ERROR: Number must be supplied.") continue # 验证输入是正整数 if not input_value.isdigit(): print("ERROR: Number must be a number.") continue num = int(input_value) # 验证数值范围 if 0 <= num <= 100: numbers.append(num) break else: print("ERROR: Number must be between 0 and 100.") print("Continue to the next value...") # 计算各项统计值 total = sum(numbers) average = total / len(numbers) minimum = min(numbers) maximum = max(numbers) # 计算20%利息:如果是总和的20%用total*interest_rate,总和加利息则用total*(1+interest_rate) interest_amount = total * interest_rate total_with_interest = total + interest_amount # 输出结果 print(f"Total: {total}") print(f"Average: {average:.2f}") print(f"Minimum: {minimum}") print(f"Maximum: {maximum}") print(f"20% Interest of the Total: {interest_amount:.2f}") print(f"Total Plus 20% Interest: {total_with_interest:.2f}")
关键修改说明
- 改用列表存储输入:把单个变量改成列表
numbers,每次验证通过后用append()添加数值,确保所有输入都被保存,能正常被sum()/min()/max()处理。 - 修正缩进逻辑:将
break放到输入验证通过的分支内,确保符合条件时能退出内层循环,进入下一次输入流程。 - 规范变量命名:使用小写蛇形命名(如
interest_rate),避免大小写混淆,提升代码可读性。 - 优化输出格式:用f-string格式化输出,保留两位小数让结果更直观;用
len(numbers)代替硬编码的5,后续修改输入次数时无需调整计算逻辑。
内容的提问来源于stack exchange,提问作者RylieAnya
相关产品推荐
相关产品推荐

