为什么这个“ for”循环太长了?

时间:2019-11-15 19:52:29

标签: python python-3.x

下面是一个小的代码片段,该代码片段实际上尝试使用for循环来查找a = 3的所有小于1000的倍数并将它们加在一起。由于某种原因,mult的最终值为2997,不在range(max)内。因此,我对为什么mult的最终值不是999以及为什么for循环甚至在mult 确实达到一个值后执行仍然感到困惑的999。

a = 3             
max = 999   
sum = 0     #cumulative sum of 'a' multiples
mult = 0    #current multiple of 'a'
k = 1       #counter variable

# --- Find all multiples of 'a' that are below 1000 ---
for mult in range(max):
    mult = a*k
    print(mult)
    sum = sum + mult
    k+=1

此外,似乎更改a的值会直接影响循环完成前mult的数值。更确切地说,我发现mult的最终值等于a*max,我想不出为什么会这样。

编辑:没关系,我意识到我打算使用while循环,但是犯了实现for循环的错误。为此事道歉。感谢所有花时间回答我的人。

4 个答案:

答案 0 :(得分:1)

与其他编程语言不同,Python中的for循环严格迭代给定的值。

I。例如,使用for mult in range(max):range()定义在每次循环运行时应将哪些值分配给mult。不受您以后分配给mult的任何值的影响。

这个概念称为迭代。 range(max)返回一个对象,该对象在每次循环运行时给出下一个值。在Python 2中,这只是一个包含这些值的列表,在Python 3中,它是一个“按需”计算值的对象。

答案 1 :(得分:0)

实际上不是。它运行了999次。但是,最后一个输出是2997,但是正如您在输出中看到的那样,它总是增加3。这是由于您将mult重新分配给a*k

答案 2 :(得分:0)

由于mult被定义为a(等于3的常数)和k的乘积,最初等于1,因此每循环通过一次,即998乘以1,即最后是999,总共3 * 999 = 2997

答案 3 :(得分:0)

如果我是对的,那么您要打印0到max之间的所有值并将它们求和正确吗? 那么以下代码将为您提供帮助。

for mult in range(max+1):
    if mult % a == 0:
        print mult
        sum = sum + mult
print sum