我是python的初学者,我正在尝试制作一个脚本,将根据给定的数字将斐波那契序列打印为列表或序列中的指定数字。这可能听起来令人困惑,所以让我向你们展示代码,然后解释一下。
number = 1
last = 0
before_last = 0
def Fibonacci(number, last, before_last):
Question = raw_input('Would you like a List or the Number: ')
X = raw_input('Give a number: ')
print number
if Question == "List":
for counter in range(0, int(X) - 1):
before_last = last
last = number
number = before_last + last
print number
if Question == "Number":
for counter in range (int(X) - 2, int(X) - 1):
before_last = last
last = number
number = before_last + last
print number
Fibonacci(number, last, before_last)
基本上,您选择列表或编号,然后为代码提供您的编号。采用该数字,并在该范围内使用。但是,使用单数,它只会打印第一。为什么这样,以及如何修复它,以便如果我将代码10作为输入,它将在Fibonacci序列中打印第10个数字?解释以及如何解决这个问题会非常有帮助,如果你们中的任何一个人能给出有用的建议,那就太棒了。
答案 0 :(得分:2)
当Question == "Number"
时,您的for
循环遍历序列range (int(X) - 2, int(X) - 1)
。当您为10
输入X
时,评估为range(8, 9)
,长度为1。结果,循环仅执行一次。由于两个循环在其他方面都是相同的,并且count
从未在循环体内使用,因此得到的结果与使用X = 1
运行另一个循环时的结果相同。
在这两种情况下,您希望循环遍历range(0, x-1)
,在每次迭代时累积序列中下一个数字的值。唯一的区别是您是否打印最终结果或打印中间值。
保持代码的现有结构不变,这很简单:
if Question == "Number":
for counter in range (0, int(X) - 1): # Loop over the same range
before_last = last
last = number
number = before_last + last
print number # But print the number outside the loop
您可能需要注意,您的代码可能与经验丰富的程序员编写代码的方式不同。没关系。你刚刚开始,还有很多东西需要学习。我不想用细节淹没你。但是,首先,我认为您应该考虑将number
,last
和before_last
变量移动到Fibonacci
函数中(即,将它们作为函数的局部变量) ,删除函数参数和全局变量)。您可以进行其他改进(其中一些可能会在其他答案中提及),但从那里开始。
答案 1 :(得分:1)
此解决方案可能会解决您的问题并帮助解决问题。
Question = raw_input("Enter Type: ")
num = raw_input("Terms: ")
def fibonacci(n):
if n <= 1:
return n
else:
print(fibonacci(n-1) + fibonacci(n-2))
# take input from the user
if Question == "List":
for counter in range(0, int(num)):
print fibonacci(counter)
#find specific number in list and print it out
if Question == "Number":
if(num < 2):
return num:
else:
for n in range(num):
print(fibonacci(n)[num])
抱歉,我没有使用Python 2年,我发现这个问题很有意思
来源 - &gt; Link
答案 2 :(得分:0)
您可以尝试使用这样的递归函数:
def fib(x):
if x<2:
return x
return fib(x-2) + fib(x-1)
然后,您可以将if语句更改为这些语句。
if Question == "List":
for counter in range(0, int(X)):
print fib(counter)
if Question == "Number":
print fib(X)
然后,您可以根据需要的数字或列表计算斐波纳契系列的每个值。
答案 3 :(得分:0)
您的代码只打印一个数字,因为范围始终等于1.例如range(int(X) - 2,int(X) - 1)将始终等于1.
答案 4 :(得分:0)
关于你如何做纤维序列的答案,但你的实际错误是在这一行:
for counter in range (int(X) - 2, int(X) - 1):
它实际应该是什么来自
range(0, int(X) - 1):
因为您想要计算到该数字,然后显示它。目前,您只计算序列的第一个数字并显示该序列。您可能还希望将print语句移出for循环。
答案 5 :(得分:0)
您可以使用列表跟踪序列中的所有数字,然后打印您想要的任何数字。试试这个:
number = 1
last = 0
before_last = 0
def Fibonacci(number, last, before_last):
Question = raw_input('Would you like a List or the Number: ')
l=[1]
X = raw_input('Give a number: ')
if Question == "List":
print number
for counter in range(0, int(X) - 1):
before_last = last
last = number
number = before_last + last
print number
if Question == "Number":
for counter in range (0, int(X)):
before_last = last
last = number
number = before_last + last
l.append(number)
print l[int(X)-1]
Fibonacci(number, last, before_last)
输出:
#Would you like a List or the Number: List
#Give a number: 6
#1
#1
#2
#3
#5
#8
#Would you like a List or the Number: Number
#Give a number: 6
#8