处理 Project Euler 问题的 Python 代码时出现内存错误
Memory Error in processing Python Code for Project Euler problem
尝试了运行一个代码来解决存档的欧拉项目问题
If we list all the natural numbers below 10 that are multiples of 3
or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.
Find the sum of all the multiples of 3 or 5 below 1000.
但我现在遇到了内存错误。难道我做错了什么? PL。解释。我的代码-
def euler_1(n):
x=0
abc=[]
while x<n:
if x%3==0 or x%5==0:
abc.append(x)
x+=1
else:
pass
return sum(abc)
只需使用列表理解并跳过只会减慢速度的 while 循环和追加。
sum([x for x in range(1, 1000) if x%3==0 or x%5==0]) # -> 233168
您需要确保每次迭代循环时都递增计数器。否则你会卡在非倍数上并遇到无限循环。
考虑以下情况。当x=4
:
if x%3==0 or x%5==0:
# evaluates to false
所以我们移动 else
语句并返回到循环的顶部。什么都没有改变,所以 x 仍然是 4,并且这个过程无限重复。如果您设置为使用 while 循环,则需要将 x+=1
移到 ifs 之外以在所有情况下发生:
def euler_1(n):
x=0
abc=[]
while x<n:
if x%3==0 or x%5==0:
abc.append(x)
x+=1
return sum(abc)
但是,如果我可以提出一些建议:首先,您不需要从 0 开始计数器,而是从您想要找到倍数的最小整数开始。 0、1 和 2 没有意义的迭代,因为它们永远不会计数。
其次,我建议使用 for 循环或列表理解,因为无论结果如何,它们都会在每个循环中增加计数器。确保将范围的末尾设置为 n+1
,因为 Python 范围是半开集,即不包括最后一个数字。
abc = sum([x for x in range(0, n+1) if x%3==0 or x%5==0)]
或
abc=0
for x in range(0, n+1):
if x%3==0 or x%5==0:
abc += x
return abc
else语句中,删掉pass
语句,写成x+=1
,因为更新x与条件无关。如果条件不满足时不更新 x,则条件将永远不满足,循环将继续
尝试了运行一个代码来解决存档的欧拉项目问题
If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.
Find the sum of all the multiples of 3 or 5 below 1000.
但我现在遇到了内存错误。难道我做错了什么? PL。解释。我的代码-
def euler_1(n):
x=0
abc=[]
while x<n:
if x%3==0 or x%5==0:
abc.append(x)
x+=1
else:
pass
return sum(abc)
只需使用列表理解并跳过只会减慢速度的 while 循环和追加。
sum([x for x in range(1, 1000) if x%3==0 or x%5==0]) # -> 233168
您需要确保每次迭代循环时都递增计数器。否则你会卡在非倍数上并遇到无限循环。
考虑以下情况。当x=4
:
if x%3==0 or x%5==0:
# evaluates to false
所以我们移动 else
语句并返回到循环的顶部。什么都没有改变,所以 x 仍然是 4,并且这个过程无限重复。如果您设置为使用 while 循环,则需要将 x+=1
移到 ifs 之外以在所有情况下发生:
def euler_1(n):
x=0
abc=[]
while x<n:
if x%3==0 or x%5==0:
abc.append(x)
x+=1
return sum(abc)
但是,如果我可以提出一些建议:首先,您不需要从 0 开始计数器,而是从您想要找到倍数的最小整数开始。 0、1 和 2 没有意义的迭代,因为它们永远不会计数。
其次,我建议使用 for 循环或列表理解,因为无论结果如何,它们都会在每个循环中增加计数器。确保将范围的末尾设置为 n+1
,因为 Python 范围是半开集,即不包括最后一个数字。
abc = sum([x for x in range(0, n+1) if x%3==0 or x%5==0)]
或
abc=0
for x in range(0, n+1):
if x%3==0 or x%5==0:
abc += x
return abc
else语句中,删掉pass
语句,写成x+=1
,因为更新x与条件无关。如果条件不满足时不更新 x,则条件将永远不满足,循环将继续