2
a = 0
b = 1
print a
print b
for i in range (102):
    c = a + b
    a = b
    b = c
    print c

print "The 103rd number is", c

我不明白 for 语句是如何工作的。除了程序如何持续到第 103 个元素之外,我了解所有内容,并且了解它必须将最后两个数字相加才能获得下一个数字。我知道a等于b,b等于c。

是不是因为在添加 c 之后,它改变了 a 和 b 的值,然后又回到了 for 语句?这就是我感到困惑的地方。程序下一步做什么?

它是否回到 for 语句来检查这是哪个(术语)/元素以确保它小于 102。

另外,当我将范围指定为 102 时,它会执行一次操作,然后再执行 102 次,基本上列出了 103 次)还是执行 102 次)?

我基本上要问的是我是否需要找到第 103 个元素为什么我指定范围 = 102,而不是范围 = 103

4

7 回答 7

4

让我们展开 for 循环,看看会发生什么:

a = 0    
b = 1     # this is the first fibonacci number

# First iteration of for loop
c = a + b # c is now 1, the second fibonacci number
a = b     # a is now 1
b = c     # b is now 1

# Second iteration
c = a + b # c is now 2, the third fibonacci number
a = b     # a is now 1
b = c     # b is now 2

# Third iteration
c = a + b # c is now 3, the fourth fibonacci number
a = b     # a is now 2
b = c     # b is now 3

# Fourth iteration
c = a + b # c is now 5, the fifth fibonacci number
a = b     # a is now 3
b = c     # b is now 5

# Remaining 98 iteration omitted

您会看到,经过 4 次迭代后,我们得到了c第 5 个斐波那契数。102 次迭代c后将保持 103:d 斐波那契数。这就是为什么你使用range(102)而不是range(103). 如果您希望您的斐波那契数列以 0 开头(有时会这样),即0, 1, 1, 3, 5,您需要使用range(101).

python for 循环迭代一个序列,直到序列用完,或者 for 循环与break语句一起过早退出。range(5)创建一个包含 5 个元素的列表:[0, 1, 2, 3, 4],当与 for 循环一起使用时,会导致它重复 5 次。因此,以下示例中的循环体被评估了 5 次:

sum = 0

for i in range(5):
  sum = sum + i

print sum

我们刚刚计算了第五个三角形数:10

更多关于 python for 循环的信息: https ://wiki.python.org/moin/ForLoop

于 2013-09-27T01:29:24.057 回答
2

F0=0, F1=1, F2=1, F3=2, F4=3 ...

for i in range (102):
    c = a + b
    a = b
    b = c
    print c

请注意,在您的第一个循环中,c=a+b=0+1=F0+F1=F2,因此您打印的结果是 F2 而不是 F1,因此 F103 在第 102 个循环中打印。

于 2013-09-27T01:42:59.137 回答
1

检查:

for f in [1, 2, "foo"]:
    print f

然后回想一下,创建range(102)一个列表[1, 2, 3,...。101, 102]

于 2013-10-01T04:10:00.077 回答
1

该语句有无限的用途for,因为在您的情况下,它只是在其中执行 102 次。因此,在您的具体情况下,该for声明确实...

c = a + b
a = b
b = c
print c

c = a + b
a = b
b = c
print c

c = a + b
a = b
b = c
print c

# ... (99 more times)

完成后,程序以 结束print "The 103rd number is", c,您知道发生了什么。

于 2013-09-27T01:23:27.480 回答
1

range是一个返回整数列表的函数。如果您指定一个参数n,您将获得从 0 到 的所有整数n-1

形式的语句for x in y: <do something>,其中y是可迭代的,迭代 中的每个元素y。对于每个这样的元素z,它将变量绑定xz,然后执行一次循环体。

因此,该行for i in range(102)针对 0 到 101 之间的每个整数执行循环内的所有内容。注意:您实际上并没有引用i循环内的变量,因此您也可以编写for _ in range(102).

关于循环内的块,大致是这样的:

  • 设置c等于和的a总和b
  • 设置ab
  • 设置bc

因此,每次迭代时,您都会找到下一个数字,将其存储在 中c,然后更新您的状态变量ab. ab保留最后两个斐波那契数。

如果你真的想要第 103 个斐波那契数,你的程序中有一个错误 - 你看到了吗?

于 2013-09-27T01:24:24.797 回答
0

斐波那契公式是:</p>

f(n) = f(n-1) + f(n-2); (n > 1, n is integer)
f(0) = 0
f(1) = 1

并且范围(102)= [0, 1, 2, ..., 101]

所以 for i in range (102):意味着 for 循环运行 102 次

c = a + b
a = b
b = c

表示 b 代表 f(n-1),a 代表 f(n-2),所以 c 代表 f(n)。for 循环运行 102 次以获得第 103 个元素,因为循环从第 2 个元素开始。

于 2013-09-27T01:57:08.880 回答
0

此行将重复其下方缩进 102 次的任何内容。

for i in range(102):
于 2013-09-27T01:25:35.697 回答