为什么统计正负整数的Python程序输入后循环结束无输出?
程序提前终止问题原因分析
作业题目要求:编写程序读取不确定数量的整数,统计读取到的正、负数个数,计算输入值的总和与平均值(不计入0)。程序在输入0时结束,平均值以浮点数形式展示。
问题代码
positive = 0 negative = 0 total = 0 count = 0 number = eval(input("Enter an integer, the input ends if it is 0:")) while number != 0: total += number count += 1 if number > 0: positive += 1 elif number < 0: negative += 1 else: break average = total/count print("The number of positives is", positive) print("The number of negatives is", negative) print("The total is", total) print("The average is", average)
问题现象
输入一个数值后,程序没有输出任何其他内容就结束了。
根因说明
- 核心问题1:循环逻辑缺失输入更新。程序仅在进入while循环前读取了一次用户输入,循环体内没有读取新输入的代码,number值不会更新。如果第一次输入的是非0值,程序会进入无限死循环,看起来处于无响应状态。
- 核心问题2:未做除零防护。如果用户第一次输入的就是0,会直接跳过while循环,执行
average = total/count时,count初始值为0,触发ZeroDivisionError除零异常,程序直接崩溃退出,没有后续统计输出。 - 冗余逻辑问题:while循环的进入条件是
number != 0,因此循环体内的else: break分支永远不会被触发,属于无效代码。
修复方案
- 在while循环体末尾新增输入读取语句,更新number的值:
number = eval(input("Enter an integer, the input ends if it is 0:"))
- 计算平均值前先判断count是否为0,避免除零错误,示例如下:
if count == 0: print("未输入任何有效非零整数") else: average = total/count print("The number of positives is", positive) print("The number of negatives is", negative) print("The total is", total) print("The average is", average)
内容的提问来源于stack exchange,提问作者alabasta
相关产品推荐
相关产品推荐

