While循环未提供理想的结果

时间:2019-09-12 23:11:32

标签: python while-loop

这里是python的新手,所以不确定我是否在正确的位置发布消息,但我想知道为什么以下循环无法给出答案。我试图将i之前的所有数字相加(1 + 2 + 3 + ... + i),但是我想到的循环没有完成。

j = 0
i = 17
while i > 0:
    j = j + i
    i - 1

print(j)

我期望j = 153,但是循环什么也没放。

5 个答案:

答案 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

答案 3 :(得分:0)

如上所述,您没有在循环内重新分配给i。但是我还要指出,在迭代循环中修改迭代器通常是一个错误的主意。您可以使用range表达式以更Python的方式获得预期的结果,并将其也包装在一个函数中:)

def foo(max_num):
    j = 0
    for i in range(max_num+1):
        j += i
    return j

enter image description here

但更好的是,没有循环

def foo(max_num):
    return sum(range(max_num+1))

enter image description here

答案 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),因此始终如果要包括最大数量,则使我比您需要的多一个。