下面是一个小的代码片段,该代码片段实际上尝试使用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
循环的错误。为此事道歉。感谢所有花时间回答我的人。
答案 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