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

Python使用For循环求1-100正偶数与负奇数和的结果异常问题

问题排查:代码结果与预期不符的原因分析

让我们先理清楚核心矛盾:你的代码逻辑和你预期的计算规则不一致,导致结果差了2。

1. 拆解代码的实际计算逻辑

你的代码里:

lst = range(1,101)
total = 0
for x in lst:
    if x % 2:  # 奇数的x%2结果是1(布尔值True),偶数是0(布尔值False)
        total -= x
    else:
        total += x

这段代码的规则是:所有奇数都做减法,所有偶数都做加法,对应的计算式是:

-1 + 2 - 3 + 4 - 5 + 6 - ... - 99 + 100

我们可以把每两个数分组计算:
(-1+2) + (-3+4) + ... + (-99+100)
一共50组,每组结果都是1,所以总结果是50*1=50,这和代码运行结果一致,说明代码本身逻辑是自洽的。

2. 分析你预期的计算式

你给出的预期计算式是 1+2-3+4+…+98-99+100,按这个规则计算的话,我们调整分组方式:
把第一个数1单独拿出来,剩下的从2到99每两个数分组:
1 + (2-3) + (4-5) + ... + (98-99) + 100
这里从2到99一共98个数,分成49组,每组结果是-1,所以:
1 + (49*(-1)) + 100 = 1 -49 +100 = 52,这就是你预期的结果。

3. 找到核心差异点

两者的核心差异在于第一个奇数1的处理:

  • 代码逻辑:所有奇数都减 → 1被减去了(-1)
  • 预期逻辑:第一个奇数1要加,其他奇数才减 → 1被加上了(+1)

一减一加之间,差值是2,所以代码结果50 + 2 = 52,正好是预期结果。

4. 修正代码的两种方案

如果你想实现预期的计算规则(1加,其他奇数减,所有偶数加),可以用两种方式修改:

方案一:单独处理第一个数,再循环剩下的数

total = 1  # 先把第一个数1加进去
for x in range(2, 101):
    if x % 2:
        total -= x
    else:
        total += x
print(total)  # 输出52

方案二:在循环里判断是否是第一个奇数

total = 0
for x in range(1, 101):
    if x % 2:
        if x == 1:
            total += x  # 第一个奇数加
        else:
            total -= x  # 其他奇数减
    else:
        total += x  # 所有偶数加
print(total)  # 输出52

另外,如果你其实是想实现“正偶数与负奇数的累加和”(即所有奇数都负,所有偶数都正),那你的代码是正确的,这时候预期结果应该是50,可能是你对计算式的理解有误哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:46:12