如何在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
相关产品推荐
相关产品推荐

