让我们检查一下你卡住的那条线:
print(str(result[user]))
代码在这里尝试做的是访问变量result 的user 属性,将其转换为str,然后打印它。它不起作用,因为变量 result 是一个整数,并且没有任何可以使用方括号访问的内容。
您可能想要做的是打印result 变量的长度。这可以通过使用str 将result 转换为字符串并使用len 查找其长度来完成。
print(len(str(result)))
结合上一行print(result),将打印出斐波那契数,以及数字的长度。
例如:
1
1
2
1
3
1
5
1
8
1
13
2
...
这不是我们想要的——我们希望我们的函数返回第一个斐波那契数,其中包含用户输入的位数。为此,我们需要将while 条件编辑为以下内容:
while len(str(result)) < user:
所以我们检查result 的长度是否小于用户要求的长度,如果不是,我们计算下一个斐波那契数。如果是,我们跳出while循环,我们可以返回result。现在我们也可以删除打印语句了。
剩下要做的最后一件事是用int包装我们的input函数,将用户输入的数字转换为整数,以便我们可以将其与result的长度进行比较。
那么我们的最终程序如下:
代码:
def fibonacci():
previous_num, result = 0, 1
user = int(input('please enter the length of the fibonacci number you would like to see: '))
while len(str(result)) < user:
previous_num, result = result, previous_num + result
return result
print(fibonacci())
输出:
please enter the length of the fibonacci number you would like to see: 10
1134903170
或者: @Sadap in cmets
def fibonacci():
previous_num, result = 0, 1
user = int(input('please enter the length of the fibonacci number you would like to see: '))
min_num = 10**(user-1)
while result < min_num:
previous_num, result = result, previous_num + result
return result
print(fibonacci())