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

调试器显示j小于i?Python两数之和代码问题求助

两数之和代码问题解析:为什么j没有从i+1开始?

核心问题根源

你的代码里有两个关键逻辑错误,直接导致了j的取值不符合预期:

  • 第一个循环遍历的是nums的元素值,而非数组索引,这让你后续用i控制j的范围完全偏离了目标
  • 第二个循环的range(i+1)里的i是元素值(比如当元素是1时,range(2)会生成0、1),所以j自然会取到0,和你想要的「j从i的下一个索引开始」完全不是一回事

详细错误拆解

  1. 遍历对象错误:你需要的是遍历数组的索引,这样才能精准控制j从当前索引的下一个位置开始,避免重复检查同一对元素。但你现在写的for i in nums是把数组里的数值(1、2、3...)赋值给i,这和索引没有任何关系。
  2. 循环范围错误:当i是元素值1时,range(i+1)等价于range(2),会生成0和1两个整数,所以j会取到0,这完全不符合你「j从i+1开始」的预期——因为你混淆了元素值和索引的概念。
  3. 判断逻辑错误:if i == (target - j)里的j是循环生成的整数,不是nums中的元素,这导致你的判断逻辑完全错误,正确的逻辑应该是检查两个不同位置的元素相加等于目标值。

修正后的代码

def main():
    target = int(input(" Target Number: "))
    nums = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    print(two_sum(target, nums))


def two_sum(target, nums):
    # 遍历数组的索引,而非元素值
    for i_idx in range(len(nums)):
        # j从i的下一个索引开始,避免重复检查
        for j_idx in range(i_idx + 1, len(nums)):
            if nums[i_idx] + nums[j_idx] == target:
                # 返回元素值,和你原代码的返回逻辑一致;如果需要返回索引,就返回i_idx, j_idx
                return nums[i_idx], nums[j_idx]
    # 题目保证有解,这里可以加个默认返回
    return None


if __name__ == "__main__":
    main()

验证示例

比如输入target=3时,i_idx=0(对应元素1),j_idx从1开始,nums[0]+nums[1]=1+2=3,直接返回(1,2),符合预期;不会出现j取0的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 20:23:12