只要我得到相同的结果,编写一些有点棘手的代码是否有效(python 中的斐波那契数列)

Is it valid to write some code that a bit tricky as long as I get same result (fibonacci in python)

在 Pycharm Edu 中我遇到过以下代码:

def fib(n):
    """This is documentation string for function. It'll be available by fib.__doc__()
Return a list containing the Fibonacci series up to n."""
result = []
a = 1
b = 1
while a < n:
    result.append(a)
    tmp_var = b
    b = a+b
    a = tmp_var
return result

因为我还在学习,所以我尝试用列表做一些类似的事情,但问题是要得到一个合适的斐波那契数列,我用 [-1,1] 开始计算,但结果是一样的。这是我的代码:

x = [-1,1]

y = []

for i in range(10):
    c = x[0] + x[1]
    y.append(c)
    x[0] = x[1]
    x[1] = c

print(y)

问题是,我能逃脱惩罚吗?

这个问题对于本网站来说可能过于主观,但请考虑到您的代码不仅需要 运行,还需要可读。否则,你写的是完全有效的。

考虑一下:

addends = [-1,1]

fibonacci_sequence = []

for value in range(10):
    next_fibonacci = addends[0] + addends[1]
    fibonacci_sequence.append(next_fibonacci)
    addends[0] = addends[1]
    addends[1] = next_fibonacci

print(fibonacci_sequence)

正如我所说,这可能看起来像是个人意见,但请务必牢记开头的 PEP 20:

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts...

最后一点,您的代码不是函数,但原始代码片段是函数。这是您的函数代码:

def fibonacci():
    addends = [-1,1]

    fibonacci_sequence = []

    for value in range(10):
        next_fibonacci = addends[0] + addends[1]
        fibonacci_sequence.append(next_fibonacci)
        addends[0] = addends[1]
        addends[1] = next_fibonacci

    return fibonacci_sequence

print(fibonacci())