并不熟悉while循环,但我认为这是另一种选择,所以这可能是一个基本错误。
我需要查找1000以下的自然数之和,它是3和5的倍数.E.g为10以下
multiples of 3 and 5 < 10 = 3,5,6,9
sum = 23
我的代码使用for循环工作,如下(这是我最初的解决方案):
def multiple():
lst = []
for x in range(334): #didn't know how else to use a for loop but to find the largest value of x using a calculator
if 3*x < limit:
lst.append(3*x)
if 5*x< 1000:
lst.append(5*x)
if (3*x > 1000) and (5*x > 1000): #unnecessary in a forloop with a range but this is just to maintain symmetry with while loop
break
lst2 = list(set(lst)) #remove duplicates
print(sum(lst2))
multiple()
我的代码使用while循环(这个解决方案甚至没有在te控制台中出现 - &gt;也许这就是错误所在):
def multiple():
lst = []
while True:
x = 1
if 3*x < 1000:
lst.append(3*x)
if 5*x< 1000:
lst.append(5*x)
if (3*x > 1000) and (5*x > 1000):
break
x += 1
lst2 = list(set(lst)) #remove duplicates
print(sum(lst2))
multiple()
期望的输出:
233168
除了如何纠正while循环之外,我的for循环或while循环的任何改进也是受欢迎的。感谢
答案 0 :(得分:3)
批判性调试
由于你是新手,让我们借此机会在我们解决之前分析这个bug。首先请注意,您根本没有注意到任何打印输出。因此,您的print()
语句要么没有运行,要么只打印空格。我们可以排除后者,因为sum()将返回一个整数。
因此,print()
永远不会运行。该函数被定义并正确调用,因此不是问题。现在注意while True:
;这是一个早期预警信号。如果while循环永远不会结束,print()
将永远不会运行。我们注意到有多个break
语句应该停止循环,但它们可能存在问题。
现在我们检查循环如何更新。首先,请注意i+=1
。这似乎是正确的。但是,i=1
也在while循环中。这可能不正确,因为每次迭代i
都将被重置。这将导致循环永远运行。
这种对代码的批判性分析只是通过实践构建的,但希望这个答案可以帮助您自己解决这个问题(以及我如何查看代码)。
另请注意,将print语句添加到while循环中进行测试会让您注意到i
始终为1。
工作代码
def multiple():
lst = []
x = 1 # moved from line below
while True:
# x = 1 should not go here
if 3*x < 1000:
lst.append(3*x)
if 5*x< 1000:
lst.append(5*x)
if (3*x > 1000) and (5*x > 1000):
break
x += 1
lst2 = list(set(lst)) #remove duplicates
print(sum(lst2))
multiple()
答案 1 :(得分:2)
一个相当直接的方法是迭代从1到1000的每个数字并检查它是否可以被3或5整除,然后将它们全部加起来。
total = sum(x for x in range(1, 1001) if x%3 == 0 or x%5 == 0)
total
# returns:
234168
答案 2 :(得分:2)
另一种解决方案:
使用for循环:
def multiple():
sum = 0
for _ in xrange(1, 1001):
if _ % 3 == 0 or _ % 5 == 0:
sum += _
return sum
print(multiple())
使用while循环:
def multiple():
sum = 0
cnt = 1
while cnt <= 1000:
if cnt % 3 == 0 or cnt % 5 == 0:
sum += cnt
cnt += 1
return sum
print(multiple())
<强>输出:强>
234168
答案 3 :(得分:1)
#!/usr/bin/env python
def multiple():
lst = []
x=1
while (3*x < 1000) or (5*x < 1000):
if 3*x < 1000:
lst.append(3*x)
if 5*x < 1000:
lst.append(5*x)
x += 1
lst2 = list(set(lst)) #remove duplicates
print(sum(lst2))
multiple()