You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python模拟Do循环计算平均值结果异常求助

问题分析与修复方案

核心问题

  • 循环内未正确累加分数:你在循环里写的totalTestScore = total + 1完全没有用到输入的testScore,而是一直把totalTestScore固定为1,这就是平均值始终是1.0的直接原因。
  • 计数逻辑错误:输入负数时,你的代码仍然执行了count = count +1,会把无效的负数输入也算进计数里,导致分母偏大。
  • 平均值计算时机错误:循环开始前就提前计算了average,此时还没有任何有效输入;循环结束后重新调用calculateAverage却没有把结果赋值给average,最后返回的还是一开始的错误值。
  • calculateAverage函数逻辑混乱:这个函数没有使用传入的参数,反而自己重新定义变量、调用输入函数,完全偏离了“计算总分和计数的平均值”的设计目的。

修复后的代码(保留模拟Do循环的原有规划)

# 补充getTestScore函数的实现(获取用户输入的整数)
def getTestScore():
    return int(input("输入整数(负数终止):"))

# 修正calculateAverage函数,专注于计算平均值
def calculateAverage(totalScore, count):
    # 处理无有效输入的边界情况,避免除以0
    if count == 0:
        return 0.0
    return float(totalScore) / count

# 模拟Do循环的主逻辑
def calculateAverageLoop():
    total = 0
    count = 0
    while True:    # 模拟Do循环:先执行循环体再判断退出条件
        testScore = getTestScore()
        # 先判断是否为负数,是则直接退出,不统计
        if testScore < 0:
            break
        # 仅当输入有效时,累加总分和计数
        total += testScore
        count += 1
    # 循环结束后再计算平均值
    average = calculateAverage(total, count)
    return average

# 测试运行
if __name__ == "__main__":
    result = calculateAverageLoop()
    print(f"平均值:{result}")

关键改动说明

  • 修正了循环内的累加逻辑:把无效的totalTestScore = total +1改成total += testScore,真正累加用户输入的有效分数;只有当输入非负时才增加计数,避免无效输入干扰结果。
  • 调整平均值计算时机:去掉循环前的无效预计算,等所有有效输入完成后再调用calculateAverage并赋值给average。
  • 重构calculateAverage函数:让它只负责接收总分和计数参数,计算并返回平均值,同时处理无有效输入的边界情况。
  • 补充了getTestScore的实现,确保程序能正常获取用户输入。

内容的提问来源于stack exchange,提问作者CodeRon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 01:05:19