我只是想通过一些基本的函数来提高我的编程技巧。
我想用fibonacci值填充一个列表,但我认为我的代码给出了所有数字的总和,并打印出来。。
numberlist = []
i = 0
for i in range(20):
numberlist.append(i)
print numberlist
fibonaccinumbers = []
for n in numberlist:
def fib(n):
a, b = 0, 1
for i in range(n):
a, b = b, a + b
return a
a = fib(n)
fibonaccinumbers.append(a)
print a
我哪里做错了?
好吧,你打印出最终值。
还有一些关于代码的评论:
您不需要在这里初始化
i
,for循环为您完成了这项工作。此外,您还可以通过执行以下操作来简化整个块:考虑到你并不需要它成为一个列表,你根本不需要构造它,但是你可以稍后运行
for n in range(20)
。然后在循环中一遍又一遍地重新定义
fib
函数。你应该在它之外定义它,然后重用它。另外,当你知道你想创建一个包含多个斐波那契数的列表时,只需存储你在其中计算出的所有数就可以了。这样你就不必一遍又一遍地做同样的事情了。您还可以使用生成器功能来简化:
然后,您也可以使用itertools中的^{}-recipe 来执行以下操作,而不是遍历一个范围并手动调用生成器上的
next
:关于发电机
生成器是一个Python函数,它生成一系列返回值。这些值是惰性生成的,这意味着当您请求时。只需使用
yield
而不是return
即可创建生成器。Ayield
将“返回”一个值并暂停生成器。下一次请求值时,生成器将继续其关闭的位置。使用生成器可以创建无休止的序列。正如您在上面的
fibGenerator
定义中看到的,有一个无尽的while循环,其中有一个yield
。当发电机停止时,尽管有那个回路,它也不会挂断。下面是一个简单的自我解释的例子:
next
函数是请求iterable下一个值的内置函数。iterable是任何可以迭代的东西(例如for x in iterable: ...
);任何生成器也是iterable。对不起,我是个白痴。我在打印“a”,这是斐波那契的最后一次迭代计算。。
我本来应该打印我的单子的。
该死的。。。
问题在最后一行。我敢肯定,这会分散你的注意力:你应该打印列表,而不是
a
。其他一些提示:
1:整个块只是重新创建由
range
返回的列表:分配
i = 0
也是没有意义的。相反,请尝试:在python 3中,调用
list(range(20))
,因为range
不会创建完整的列表。2:在循环的每个过程中重新定义
fib
函数不会产生问题,但肯定不是必需的。将定义移到外部:)相关问题 更多 >
编程相关推荐