这里是python的新手,所以不确定我是否在正确的位置发布消息,但我想知道为什么以下循环无法给出答案。我试图将i之前的所有数字相加(1 + 2 + 3 + ... + i),但是我想到的循环没有完成。
j = 0
i = 17
while i > 0:
j = j + i
i - 1
print(j)
我期望j = 153,但是循环什么也没放。
答案 0 :(得分:0)
请注意您在while语句中的行, i-1,不会为i分配(=运算符)值。我永远保持17岁,因此您看不到任何输出,因为该程序陷入了while循环中。尝试解决您的i分配,如下所示:
j = 0
i = 17
while i > 0:
j = j + i
i = i - 1 # <= i = i - 1
print(j)
将来调试循环的一种方法是在中间放置一条print语句,如下面的代码所示。多余的print语句会使您的程序变慢一点,但是您可以轻松地看到循环的运行超出了您的期望!
j = 0
i = 17
while i > 0:
j = j + i
i = i - 1
print(j)
print(i) # so that we can see that i is going down :P
print(j)
祝你好运:)
答案 1 :(得分:0)
问题出在i
上–您没有正确将其减小1,所以这是一个无限循环。试试这个:
j = 0
i = 17
while i > 0:
j = j + i
i -= 1
print(j)
答案 2 :(得分:0)
i - 1
没有分配回i
pythonic
实现循环的list comprehension
方法j = 0
i = 17
j = sum([j + x for x in range(i, 0, -1)])
print(j)
>>> 153
def sum_of_steps(start: int, stop: int, step: int) -> int:
return sum([x for x in range(start, stop, step)])
j = sum_of_steps(17, 0, -1)
print(j)
>>> 153
sum_of_steps
函数使用type hints
或函数注释。答案 3 :(得分:0)
如上所述,您没有在循环内重新分配给i
。但是我还要指出,在迭代循环中修改迭代器通常是一个错误的主意。您可以使用range
表达式以更Python的方式获得预期的结果,并将其也包装在一个函数中:)
def foo(max_num):
j = 0
for i in range(max_num+1):
j += i
return j
但更好的是,没有循环:
def foo(max_num):
return sum(range(max_num+1))
答案 4 :(得分:0)
有两种方法可以做您想做的事。我建议您这样做的方式如下所示。
total = 0
i = 18
for j in range(i):
total += j
print(total)
range(i)的最大值为i,并且允许您迭代从0到i-1的每个数字(例如i = 5将添加数字0、1、2、3、4),因此始终如果要包括最大数量,则使我比您需要的多一个。