Python 而循环没有给出期望的结果

Python 而循环没有给出期望的结果,python,while-loop,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,但循环不会输出任何内容。注意while语句中的行, i-1,不为i赋值(=运算符)。我永远停留在17岁,所以你看不到输出,因为程序卡在你的while循环中。尝试修复i分配,如

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

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

print(j)

我期望j=153,但循环不会输出任何内容。

注意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)

祝你好运:)

问题在于
i
——你没有正确地将其减少1,因此这是一个无限循环。试试这个:

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

print(j)
  • 如前所述,
    i-1
    未分配回
    i
  • 下面是一种
    pythonic
    方法,通过
    列表理解实现循环
代码:
j=0
i=17
j=总和([j+x表示范围(i,0,-1)])
印刷品(j)
>>> 153
作为一项功能:
def步骤之和(开始:int,停止:int,步骤:int)->int:
返回和([x代表范围内的x(开始、停止、步进)])
j=步数(17,0,-1)之和
印刷品(j)
>>> 153
  • 函数,
    步骤之和
    使用或函数注释

如上所述,您没有在循环中重新分配给您的
i
。但我还要指出,在迭代循环中修改迭代器通常是个坏主意。使用
range
表达式,您可以以一种更具python风格的方式实现预期的结果,并将其封装在函数中:)

但更好的是,没有循环

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

有几种方法可以做你想做的事情。我建议您这样做的方式如下所示

total = 0
i = 18
for j in range(i):
  total += j
print(total)

范围(i)取一个最大值i,并允许您迭代从0到i-1的每个数字(例如,i=5将添加数字0,1,2,3,4),因此,如果要包含最大值,请始终使i比您需要的多1。

您有一个无限循环。i-1不减少i。
def foo(max_num):
    return sum(range(max_num+1))
total = 0
i = 18
for j in range(i):
  total += j
print(total)