计算用户输入总和、最值的程序在学校编译器报错,求替代实现方案
现有代码的问题排查
- 边界case未处理:如果首次输入就是
X,此时list1为空,average、min_value、big_value三个变量未定义,执行打印语句会直接抛出NameError,大概率是编译器判定错误的核心原因 - 输出结果不符合需求:需求要求按输入顺序输出所有输入值,现有代码使用了
sorted(list1),会将输入结果排序后输出,和要求的顺序不一致 - 冗余计算:每次新增输入都重新计算全列表的最大值、最小值、平均值,没有必要,会增加不必要的性能损耗
- 输入兼容性不足:未处理用户输入小写
x的场景,若测试用例存在小写输入会直接触发int()转换报错 - 提示语冗余:如果学校编译器的校验是严格匹配输出内容,
input("Enter number: ")打印的提示语可能会被判定为多余输出,干扰结果校验
优化后的实现方案
num_list = [] while True: # 若校验不需要输入提示,可直接修改为input_content = input().strip() input_content = input("Enter number: ").strip() if input_content.upper() == 'X': break # 可选增加输入合法性校验,避免非数字输入报错 try: num = int(input_content) num_list.append(num) except ValueError: continue # 处理空输入的边界情况 if not num_list: print("result:[]") print("average:0.00") print("min:0.00") print("max:0.00") else: sum_val = sum(num_list) avg = sum_val / len(num_list) min_val = min(num_list) max_val = max(num_list) # 按输入顺序输出,不做排序 print(f"result:{num_list}") print(f"average:{avg:.2f}") print(f"min:{min_val:.2f}") print(f"max:{max_val:.2f}")
其他可选编码思路
- 低内存占用实现(无需存储全量输入,适合超大量输入场景):
count = 0 sum_val = 0 min_val = float('inf') max_val = float('-inf') num_list = [] # 若不需要输出输入序列可直接删除该变量 while True: input_content = input().strip().upper() if input_content == 'X': break num = int(input_content) count += 1 sum_val += num if num < min_val: min_val = num if num > max_val: max_val = num num_list.append(num) if count == 0: # 空输入处理逻辑和上方优化方案一致 pass else: avg = sum_val / count # 输出逻辑和上方优化方案一致
- Python 3.8+ 简化写法(使用海象运算符缩减循环代码):
num_list = [] while (input_content := input().strip().upper()) != 'X': num_list.append(int(input_content)) # 后续计算、输出逻辑和上方优化方案一致
通用校验收敛建议
- 严格匹配输出格式:包括空格、符号、小数点位数,不要有多余的打印内容
- 覆盖所有边界case:空输入、单输入、多输入、合法/非法输入的处理都要提前考虑
- 避免未定义变量:所有在循环内赋值、循环外使用的变量,都要在循环外提前初始化默认值
内容的提问来源于stack exchange,提问作者Ertu
相关产品推荐
相关产品推荐

