• Python经典练习题(四)


    🍀第一题

    题目:打印出如下图案(菱形):
    在这里插入图片描述
    我们首先分析一下,本题实现的步骤主要有两个,分别是前四行和后三行

    • 前四行:第一行三空格+一*,第二行两空格+三*,第三行一空格+五*,第四行五空格+七*
    • 后三行:第一行一空格五*,第二行两空格+三*,第三行三空格+一*

    这里我们就可以找到规律了,如果以行为函数的参数,我们不妨将其设定为外循环的参数

    代码如下

    def f1(rowup): # 前四行
        for i in range(rowup):
            for j in range(rowup - i):
                print(' ',end='')
            for k in range(2 * i +1):
                print("*",end='')
            print()
    
    def f2(rowdown): # 后三行
        for i in range(rowdown):
            for j in range(i + 2):
                print(" ",end='')
            for k in range(5- 2 * i):
                print("*",end='')
            print()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    运行结果
    在这里插入图片描述


    🍀第二题

    有一分数序列:2/1,3/2,5/3,8/5, 13/8,21/13…求出这个数列的前20项之和。

    def generate_fibonacci(n):
        fib = [0, 1]  # 初始化斐波那契数列的前两项
        while len(fib) < n:
            next_fib = fib[-1] + fib[-2]  # 计算下一项
            fib.append(next_fib)  # 将下一项添加到列表中
        return fib
    
    # 生成斐波那契数列的前n项
    n = 23  # 你可以替换成任何你想要的项数
    fibonacci_sequence = generate_fibonacci(n)
    sum_numbers= []
    
    for i in range(20):
        result = float(fibonacci_sequence[3:][i] / fibonacci_sequence[2:][i])
        sum_numbers.append(result)
    print(sum(sum_numbers))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    本题我的思路采用列表切片,看起来有点傻,但是能做出来就是好滴
    运行结果如下
    在这里插入图片描述


    🍀第三题

    题目:求1+2!+3!+…+20!的和。

    本题采用三种方法进行求解
    方法一:使用循环计算阶乘和求和

    def factorial(n):
        result = 1
        for i in range(1, n + 1):
            result *= i
        return result
    
    n = 20
    total = sum(factorial(i) for i in range(1, n + 1))
    print("方法一的结果:", total)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    方法一:使用循环计算阶乘和求和

    这个方法使用了一个for循环来计算每个数字的阶乘,然后将它们相加以得到最终的和。具体思路如下:

    • 创建一个函数factorial(n),它接受一个整数n作为输入,并返回n的阶乘。
    • 在主程序中,通过一个for循环遍历从1到20的所有数字,分别调用factorial()函数来计算它们的阶乘。
    • 将每个阶乘值加到一个累加器变量中,最终得到总和。

    方法二:使用递归计算阶乘和求和

    def factorial(n):
        if n == 0:
            return 1
        else:
            return n * factorial(n - 1)
    
    n = 20
    total = sum(factorial(i) for i in range(1, n + 1))
    print("方法二的结果:", total)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    方法二:使用递归计算阶乘和求和

    这个方法使用了递归来计算每个数字的阶乘,然后将它们相加以得到最终的和。具体思路如下:

    • 创建一个函数factorial(n),它接受一个整数n作为输入,并返回n的阶乘。
    • 在factorial()函数内部,使用递归来计算阶乘。基本情况是当n为0时,阶乘为1;否则,递归调用factorial(n-1)并将结果与n相乘。
    • 在主程序中,通过一个for循环遍历从1到20的所有数字,分别调用factorial()函数来计算它们的阶乘。
    • 将每个阶乘值加到一个累加器变量中,最终得到总和。

    方法三:使用预先计算好的阶乘值求和

    def precompute_factorials(n):
        factorials = [1]
        for i in range(1, n + 1):
            factorials.append(factorials[-1] * i)
        return factorials
    
    n = 20
    factorials = precompute_factorials(n)
    total = sum(factorials[i] for i in range(1, n + 1))
    print("方法三的结果:", total)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    方法三:使用预先计算好的阶乘值求和

    这个方法首先预先计算了1到20的所有数字的阶乘值,然后直接使用这些值来求和。具体思路如下:

    • 创建一个函数precompute_factorials(n),它接受一个整数n作为输入,并返回一个包含1到n的所有数字的阶乘值的列表。
    • 在precompute_factorials()函数内部,使用一个for循环来计算1到n的所有数字的阶乘,并将它们存储在列表中。
    • 在主程序中,调用precompute_factorials(20)来获取1到20的所有数字的阶乘值列表。
    • 使用一个for循环遍历从1到20的所有数字,直接从阶乘值列表中取出对应的阶乘值,并将它们相加以得到总和。

    请添加图片描述

    挑战与创造都是很痛苦的,但是很充实。

  • 相关阅读:
    HTML5 用File对象获取文件信息
    ssh/scp断点续传rsync
    【ES6】js中的__proto__和prototype
    干货 | 外贸业务员必备的实用网站
    git刷新hosts
    OFDM PLCP
    python 2 环境创建及pip install + scipy bug解决
    Lyapunov optimization 李雅普诺夫优化
    Overloud Mark Studio 2 for Mac 模拟数字音频效果器
    Java Swing游戏开发学习24
  • 原文地址:https://blog.csdn.net/null18/article/details/133361672