Python 而循环没有给出期望的结果
这里是python新手,所以不确定我是否在正确的位置发布,但我想知道为什么下面的循环没有给出答案。我正在尝试将I之前的所有数字相加,(1+2+3+…+I),但我提出的循环没有完成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分配,如
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)