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

如何在for循环中比较单变量?Python温度程序最值计算异常

问题根因

代码无法正确统计最高、最低温度,核心是几处逻辑错误:

  • 变量混用:同时用htemp、ltemp两个变量做温度累加、存储极值,累加操作会直接覆盖极值记录,无法保留比较结果。
  • 极值判断逻辑写反:找最高温的判断条件写反,现有逻辑是当已存值大于当日高温时更新,实际一直在存更小的温度值;最低温的判断逻辑同样反向。
  • 极值初始值错误:初始把最高、最低温都设为0,如果所有输入温度都低于0或者都高于0,初始值会直接导致极值结果错误。
  • 输入校验逻辑漏洞:输入非法时仅让用户重输一次,没有对第二次输入做合法性校验,也没有在重输分支里做极值判断,很容易把非法值计入统计,或者漏记极值。
修正后代码
DAYS = 4
# 温度总和变量,仅用于计算平均值
high_sum = 0
low_sum = 0
# 极值变量初始值设在合法温度范围外,保证第一次输入能正常更新
max_temp = -41
min_temp = 41
max_temp_day = 0
min_temp_day = 0

print(">---=== Python 温度分析程序 ===---<")
for day in range(1, DAYS + 1):
    # 循环校验输入,直到输入合法再进入统计
    while True:
        high = int(input(f"请输入第 {day} 天的最高温:"))
        low = int(input(f"请输入第 {day} 天的最低温:"))
        if -40 <= low < high <= 40:
            break
        print("> 输入错误,温度需在-40到40区间内,且最高温必须大于最低温,请重新输入 <")
    
    # 累加温度值用于平均值计算
    high_sum += high
    low_sum += low

    # 更新最高温记录
    if high > max_temp:
        max_temp = high
        max_temp_day = day
    # 更新最低温记录
    if low < min_temp:
        min_temp = low
        min_temp_day = day

avg_low = low_sum / DAYS
avg_high = high_sum / DAYS
avg_all = (high_sum + low_sum) / (DAYS * 2)

print(f"\n平均最低温为:{avg_low}")
print(f"平均最高温为:{avg_high}")
print(f"整体平均温度为:{avg_all}")
print(f"最高温为 {max_temp},出现在第 {max_temp_day} 天")
print(f"最低温为 {min_temp},出现在第 {min_temp_day} 天")
关键调整说明
  • 拆分变量职责:把计算平均值用的总和变量、存储极值的变量完全分开,避免累加操作覆盖极值数据。
  • 修正极值判断逻辑:最高温更新条件调整为「当日最高温大于已记录的最高温」,最低温更新条件调整为「当日最低温小于已记录的最低温」,符合极值比较逻辑。
  • 调整极值初始值:最高温初始值设为低于合法区间下限的-41,最低温初始值设为高于合法区间上限的41,保证第一次合法输入一定会触发极值更新,不会被初始值干扰。
  • 补全输入校验:用循环实现持续校验,只要输入不符合规则就一直提示重输,不会出现重输一次仍非法就直接统计的问题。
  • 简化天数遍历逻辑:直接生成1到4的天数序列,不需要手动给循环索引加1,减少冗余代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 20:39:30