使用Python列表推导式求解欧拉问题6平方和差报错原因咨询
错误原因排查
- 直接触发
TypeError: 'int' object is not iterable的原因是:sum()函数强制要求传入可迭代对象(如列表、range、生成器等),但你代码中sum(a)和sum(a*a)里的a是range(100)迭代出来的单个整数,单个整数不属于可迭代对象,传入sum()直接抛出类型错误。 - 存在逻辑错误:你用列表推导式生成的是两个列表,Python原生列表不支持直接用
-运算符做差值运算,即使修复第一个类型错误,后续也会抛出操作数类型不支持的报错。 - 取值范围错误:欧拉问题6要求计算1到100的差值,你用的
range(100)生成的是0到99的整数,取值范围不符合题目要求。
正确单行实现方案
print(sum(range(1, 101)) ** 2 - sum(i * i for i in range(1, 101)))
代码逻辑说明:
- 前半段
sum(range(1, 101)) ** 2:先计算1到100所有整数的和,再对和做平方运算,得到「和的平方」。 - 后半段
sum(i * i for i in range(1, 101)):遍历1到100的每个整数计算平方,再对所有平方值求和,得到「平方的和」。 - 两者做差即为欧拉问题6要求的最终结果,运行后输出值为
25164150。
内容的提问来源于stack exchange,提问作者Никита Петров
相关产品推荐
相关产品推荐

