打印前n个整数和的代码出现NameError,如何修复?
修复你的求和代码:解决NameError并修正逻辑
首先,你遇到的NameError是因为你用了Python 2的raw_input()函数,但现在大多数开发环境用的是Python 3,Python 3里已经把这个函数改名为input()了,所以解释器找不到raw_input这个名称,这就是报错的核心原因。
不过除了这个语法错误,你的代码逻辑也完全偏离了“计算前n个整数的和”的目标,我们一步步来修复:
步骤1:解决NameError
把代码里的n = int(raw_input())改成n = int(input()),这样解释器就能识别输入函数,NameError就会消失。
步骤2:修正函数逻辑与参数问题
你的函数定义了参数n,但又在函数内部重新通过输入覆盖n,这会让函数的参数失去意义。另外,原代码里的j = i + 1、doublesum = i + j - n这些计算完全不是求前n个整数和的逻辑——前n个整数的和可以用数学公式n*(n+1)/2快速计算,也可以用循环累加实现。
修复后的代码(两种可选方式)
方式1:用数学公式(更高效)
def printsum(n): total = n * (n + 1) // 2 # 用整数除法避免出现浮点数结果 print(total) # 如果你想让用户输入n,建议在函数外部获取参数 n = int(input("请输入整数n: ")) printsum(n)
方式2:用循环累加(更直观)
def printsum(n): total = 0 for i in range(1, n+1): total += i print(total) n = int(input("请输入整数n: ")) printsum(n)
原代码逻辑的问题说明
原代码里的计算逻辑完全和“前n个整数求和”无关:
j = i + 1只是取当前循环变量的下一个数doublesum = i + j - n这个式子没有任何求和相关的意义- 最终的
doublesum / 2自然也得不到你想要的结果
所以除了修复NameError,必须修正求和逻辑,才能得到正确的前n个整数的和。
内容的提问来源于stack exchange,提问作者Devesh Lohumi
相关产品推荐
相关产品推荐

