【问题标题】:Python: the for loop inside the fib function doesn't make sense to me [duplicate]Python:fib函数中的for循环对我来说没有意义[重复]
【发布时间】:2020-10-12 17:10:09
【问题描述】:

在我的 Python 课程中,我有一个关于斐波那契数的练习。 下面是第 4.1.5.7 章的全文。

我的问题是关于函数本身。特别是我对循环内部发生的事情感到困惑:

for i in range(3, n + 1):
    sum = elem1 + elem2
    elem1, elem2 = elem2, sum
return sum

在第三行中,您看到 elem1 逗号 elem2 等于 elem2 逗号和。什么意思?

有人可以逐步解释我如何解释这个循环的内容吗?


  • 第 4.1.5.7 章全文:

一些简单的函数:斐波那契数 您熟悉斐波那契数列吗?

它们是使用非常简单的规则构建的整数序列:

序列的第一个元素等于一(Fib1 = 1) 第二个也等于一 (Fib2 = 1) 随后的每个数字都是前面两个数字的总和(Fibi = Fibi-1 + Fibi-2) 以下是一些第一个斐波那契数字:

fib1 = 1
fib2 = 1
fib3 = 1 + 1 = 2
fib4 = 1 + 2 = 3
fib5 = 2 + 3 = 5
fib6 = 3 + 5 = 8
fib7 = 5 + 8 = 13

你如何看待将它作为一个函数来实现?

让我们创建我们的 fib 函数并对其进行测试。这里是:

def fib(n):
    if n < 1:
         return None
    if n < 3:
        return 1

    elem1 = elem2 = 1
    sum = 0
    for i in range(3, n + 1):
        sum = elem1 + elem2
        elem1, elem2 = elem2, sum
    return sum

for n in range(1, 10): # testing
    print(n, "->", fib(n))

仔细分析 for 循环体,并找出我们如何通过随后的斐波那契数移动 elem1 和 elem2 变量。

代码的测试部分产生以下输出:

1 -> 1
2 -> 1
3 -> 2
4 -> 3
5 -> 5
6 -> 8
7 -> 13
8 -> 21
9 -> 34

Cisco Networking Academy 上提供的资源 - 课程名称:PCAP - Programming Essentials in Python - 模块 4,第 4.1.5.7 章,标题为“创建函数 | 斐波那契数”。

【问题讨论】:

  • 你应该阅读关于在 python 中解包的内容。
  • "elem1 comma elem2 is equal to elem2 comma sum" 更准确地说,= 应该被表述为“已分配”。这将帮助您避免编程中=== 之间的混淆。

标签: python function loops


【解决方案1】:

在 python 中,a, b = c, d 表示“设置a=cb=d

【讨论】:

    【解决方案2】:
    elem1, elem2 = elem2, sum
    

    这句话和说的差不多

    elem1 = elem2
    elem2 =  sum
    

    唯一的区别是它们“同时”发生。这可能很重要。例如,如果我写:

    x, y = y, x
    

    它交换元素,而

    x = y
    y = x 
    

    没有。

    【讨论】:

      【解决方案3】:

      对于您的代码 elem1,elem2 = elem2,sum 表示:elem1=elem2 和 elem2=sum,或者您可以将其解释为 i,j =1,10 其中 i=1 和 j=10

      【讨论】:

        【解决方案4】:

        希望这能帮助您理解:

        elem1 = elem2 = 1 # Set the first two numbers of the fib sequence to 1
        sum = 0
        for i in range(3, n + 1): # if n is 3, we get -- for i in range(3,4), where i will only be 3 -- if n is 4, i will be 3, then 4 etc. 
            sum = elem1 + elem2 # First find the third number of the sequence, and during other iteration, the third will be shifted to the fourth, fifth, etc.
            elem1, elem2 = elem2, sum # Now shift the variables so the first number is the second, and the second is the sum(third) During each loop, we shift them again
        return sum
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-02-09
          • 1970-01-01
          • 2015-02-14
          • 1970-01-01
          • 1970-01-01
          • 2014-07-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多