【问题标题】:Print the first Fibonacci number which has a certain length打印第一个具有一定长度的斐波那契数
【发布时间】:2020-04-02 04:23:33
【问题描述】:

所以我基本上只是想弄清楚如何让这个程序打印出与用户输入的数字长度相同的第一个斐波那契数字。斐波那契计数部分工作正常,我只是在努力理解如何打印出正确对应的数字。具体理解为什么这行代码有问题:

print(str(result[user]))

不起作用,我需要做些什么才能使其起作用。

def fibonacci():
    previous_num, result = 0, 1
    user = input('please enter the length of the fibonacci number you would like to see')
    while True:
        previous_num, result = result, previous_num + result
        print(result)
        print(str(result[user]))


fibonacci()

【问题讨论】:

    标签: python python-3.x while-loop user-input fibonacci


    【解决方案1】:

    让我们检查一下你卡住的那条线:

    print(str(result[user]))
    

    代码在这里尝试做的是访问变量resultuser 属性,将其转换为str,然后打印它。它不起作用,因为变量 result 是一个整数,并且没有任何可以使用方括号访问的内容。

    您可能想要做的是打印result 变量的长度。这可以通过使用strresult 转换为字符串并使用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())
    

    【讨论】:

    • 很好的答案,但是在输入之后,写min_num = 10**(user-1) 然后while 条件是result &lt; min_num 该解决方案比将每个可能的结果转换为str 来获得长度要快得多
    猜你喜欢
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    • 2012-02-15
    • 2020-03-05
    • 2022-12-10
    相关资源
    最近更新 更多