LeetCode刷题遇'name 'twoSum' is not defined'错误,请求排查原因
解决'twoSum' is not defined错误及代码其他问题
核心错误:类方法调用方式错误
你将twoSum定义在了Solution类内部,它是类的成员方法,不属于全局作用域。直接调用twoSum(num, target)会找不到该名称,必须通过类实例来调用。
其他需要修正的问题
- 类方法缺少self参数:Python实例方法的第一个参数必须是
self(指代类实例本身),否则无法正常调用。 - 类型注解错误:输入的
num是整数列表,应标注为List[int]而非int;返回值是索引列表,同样应为List[int],需要先导入typing模块的List。 - 循环逻辑缺陷:
- 外层循环
range(len(num)-1)会漏掉最后一个元素,应改为range(len(nums)); - 内层循环从
i开始会重复检查同一元素,且同样漏掉最后一个元素,应改为range(i+1, len(nums)),避免重复计算并覆盖所有配对。
- 外层循环
- 变量名不规范:用
list作为变量名会覆盖Python内置的list类型,建议改为result或直接返回列表。
修正后的代码(类方法版本)
from typing import List class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: for i in range(len(nums)): for j in range(i + 1, len(nums)): if nums[i] + nums[j] == target: return [i, j] def main(): nums = [3,2,4] target = 6 # 实例化类后调用方法 sol = Solution() r = sol.twoSum(nums, target) print(r) if __name__ == '__main__': main()
修正后的代码(全局函数版本,无需类)
from typing import List def twoSum(nums: List[int], target: int) -> List[int]: for i in range(len(nums)): for j in range(i + 1, len(nums)): if nums[i] + nums[j] == target: return [i, j] def main(): nums = [3,2,4] target = 6 r = twoSum(nums, target) print(r) if __name__ == '__main__': main()
内容的提问来源于stack exchange,提问作者PythonLearner2222
相关产品推荐
相关产品推荐

