【问题标题】:Fibonacci numbers python, what should i learn to be a better programmer (self taught ) [closed]斐波那契数 python,我应该学习什么才能成为一个更好的程序员(自学)[关闭]
【发布时间】:2020-03-26 16:01:20
【问题描述】:
n1 = 0
n2 = 1
fiblist = []
while True:     
     newNum = n1 + n2
     fiblist.append(newNum)
     n1 = n2
     n2 = newNum
     if newNum >= 10000:
          print(flist)
          break

初学者程序员:有没有更简单的方法来写这个或其他更有效的方法

【问题讨论】:

  • 在python中,变量和函数是名称lowercase_with_underscores而不是camelCase
  • Many code examples for Fibonacci 在 Python 和其他编程语言中。
  • 我可以推荐codereview.stackexchange.com 来解答关于代码质量的开放式问题,比如这个? Stack Overflow 更适合具体问题。

标签: python fibonacci


【解决方案1】:

您的代码可以简化为以下内容。

fiblist = [0, 1]                # initialize with first two numbers
while fiblist[-1] < 10000:      # while last number <= threshold
  fiblist.append(fiblist[-1] + fiblist[-2])  # next is sum of last 2 numbers

print(fiblist)

说明(在您要求学习成为更好的编码员时提供)

根据来自两个参考的原则将您的代码简化为上述代码

  1. 风格指南:Python Style Guide
  2. 蟒蛇咒:Zen of Python

使用参考 1

PEP 8 指南:“函数名称应为小写,单词之间用下划线分隔,以提高可读性”。这是特定于 Python 的。其他语言(即 C++、Java、Clojure、JavaScript 等)有自己喜欢的风格。所以对于 Python:new_num 而不是 newNum(即变量和函数名不是驼峰式)。

使用参考 2

Python 之禅:“简单胜于复杂”。

您的 while 循环过于复杂,因为它专注于两个目标,即:(1) 生成斐波那契数,以及 (2) 打印斐波那契数)。通过Single Repository Principle,我们知道少比多好(即目标)。

通过创建具有单个而不是多个目标的代码块来简化。

while True:                # objective 1--generating fib numbers
     newNum = n1 + n2
     fiblist.append(newNum)
     n1 = n2
     n2 = newNum
     if newNum >= 10000:
          break

print(fiblist)             # objective 2--printing fib numbers

接下来,我们通过改进robustness 进行简化。 鲁棒性 — “简单的对象让您可以单独关注每个任务的特殊性,并减少您在任何给定时间需要考虑的输入/输出变量的数量”。 fiblist 是一个简单的对象,我们可以用来替换 n1、n2 和 new_num,如下所示:

fiblist[-2] is n1
fiblist[-1] is n2
fiblist[-1] is new_num (after append)

使用健壮性,代码变成:

while fiblist[-1] < 10000:
    fiblist.append(fiblist[-1] + fiblist[-2])

为了让它工作,我们需要在while循环之前初始化fiblist:

fiblist = [0, 1]

因此通过这一系列的简化,我们得到了建议的代码。

更多参考资料让你成为更好的程序员

  1. Fibonacci Code Examples

  2. What Python tutorials should I read

【讨论】:

    【解决方案2】:
    1. 在 python 中使用生成器或迭代器来生成序列而不是创建列表。
    2. python 将交换变量简化为a, b = b , a
    def fibanocci(n1, n2, size):
        for i in range(size):
            yield n1
            n1, n2 = n2, n1 + n2
    

    现在使用这个系列,

    >>> for i in fibanocci(1, 1, 5):
    ...     print(i)
    ... 
    1
    1
    2
    3
    5
    >>> 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-21
      • 1970-01-01
      • 2012-12-29
      • 1970-01-01
      • 1970-01-01
      • 2019-03-23
      • 2022-12-11
      相关资源
      最近更新 更多