• Python经典练习题(二)


    🍀题目一

    古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

    本题一出或许大家回想到鸡兔同笼问题,但是这题和那个没啥关联,这题的核心思想在于斐波那契数列
    下面进行代码演示

    rabbits = [1, 1]
    
    # 计算兔子总数的月数
    months = 24  # 假设计算24个月的兔子总数,你可以根据需要调整月数
    
    # 计算每个月的兔子总数
    for i in range(2, months):
        new_rabbits = rabbits[i - 1] + rabbits[i - 2]  # 新生的兔子数等于前两个月的兔子总数之和
        rabbits.append(new_rabbits)
    
    # 输出每个月的兔子总数
    for i, total in enumerate(rabbits, start=1):
        print(f"第{i}个月的兔子总数为:{total}")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    运行结果如下

    在这里插入图片描述

    这里我再进行说明一下,第一个月第二个月小兔子成长,第三个月小兔子长大了,可以下崽了,所以第三个月有两对,第四个月那个大兔子依旧可以下,所以是三对,第五个月大兔子依旧在下崽,但是它们第一批生的小兔子也可以下崽了,所+2变成了五队,接下来写在纸上,就会奇迹般的发现这好像和斐波那契数列这么像呢!


    🍀第二题

    判断101-200之间有多少个素数,并输出所有素数。

    本题也是较为常见的经典题目,接下来我们采用两种解法

    解法一:使用嵌套循环

    这个方法使用两个嵌套循环来检查每个数字是否为素数。对于每个数字,它会检查从2到该数字本身之间是否有除了1和它自身以外的因子。如果没有其他因子,那么它就是素数。

    # 方法一:使用嵌套循环判断素数
    prime_numbers = []  # 存储素数的列表
    
    for num in range(101, 201):  # 遍历101到200之间的所有数字
        is_prime = True  # 假设当前数字是素数
    
        # 判断是否为素数
        for i in range(2, int(num**0.5) + 1):
            if num % i == 0:  # 如果有除1和自身以外的因子
                is_prime = False
                break
    
        if is_prime:
            prime_numbers.append(num)
    
    # 输出所有素数
    print("101到200之间的素数有以下", len(prime_numbers), "个:")
    print(prime_numbers)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    运行结果如下

    在这里插入图片描述

    解法二:使用函数封装判断素数的逻辑

    这个方法将判断素数的逻辑封装为一个函数,然后通过循环调用这个函数来检查每个数字是否为素数。

    这个方法其实和上个大差不差

    # 方法二:使用函数封装判断素数的逻辑
    def is_prime(num):
        if num < 2:
            return False
        for i in range(2, int(num**0.5) + 1):
            if num % i == 0:
                return False
        return True
    
    prime_numbers = []  # 存储素数的列表
    
    for num in range(101, 201):  # 遍历101到200之间的所有数字
        if is_prime(num):
            prime_numbers.append(num)
    
    # 输出所有素数
    print("101到200之间的素数有以下", len(prime_numbers), "个:")
    print(prime_numbers)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

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


    🍀第三题

    打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。
    例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。

    本题较为简单

    for num in range(100, 1000):  # 遍历所有的三位数
        # 获取百位、十位和个位上的数字
        hundreds = num // 100
        tens = (num % 100) // 10
        ones = num % 10
    
        # 计算立方和
        sum_of_cubes = hundreds ** 3 + tens ** 3 + ones ** 3
    
        # 判断是否为水仙花数
        if sum_of_cubes == num:
            print(num)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

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


    🍀第四题

    题目:将一个正整数分解质因数。例如:输入90,打印出90=233*5。

    本题主要是通过反复整除,循环找到质因数,其中外循环必须大于1,因为任何数都可以被1除

    def prime_factors(n):
        factors = []  # 存储质因数的列表
        divisor = 2  # 初始除数为2
    
        while n > 1:
            while n % divisor == 0:
                factors.append(divisor)  # 将当前除数加入质因数列表
                n //= divisor  # 更新n的值,除以当前除数
    
            divisor += 1  # 尝试下一个除数
    
        return factors
    
    # 输入正整数
    number = int(input("请输入一个正整数:"))
    
    # 计算质因数
    factors = prime_factors(number)
    
    # 输出结果
    if len(factors) == 0:
        print(f"{number}没有质因数,它本身就是一个质数。")
    else:
        print(f"{number}的质因数分解为:{' * '.join(map(str, factors))}")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

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

    🍀第五题

    编写一个判断学生成绩的Python代码

    本题主要是使用选择语句,但是注意input这里,输入的成绩可以是float,毕竟有99.5这种分数,所以要强制转换成float类型

    def calculate_grade(score):
        if 90 <= score <= 100:
            return 'A'
        elif 80 <= score < 90:
            return 'B'
        elif 70 <= score < 80:
            return 'C'
        elif 60 <= score < 70:
            return 'D'
        elif 0 <= score < 60:
            return 'F'
        else:
            return '无效分数'
    
    # 输入学生分数
    score = float(input("请输入学生的分数:"))
    
    # 计算并输出等级
    grade = calculate_grade(score)
    print(f"学生的等级为:{grade}")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

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

    请添加图片描述

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

  • 相关阅读:
    『Element Plus の 百科大全』
    华为OD机试 - 最长连续子序列 - 双指针(Java 2023 B卷 100分)
    SpringMVC之全局异常拦截器
    IDEA 设置主题、背景图片、背景颜色
    OAuth2:搭建授权服务器
    在VS Code中使用VIM
    SQL数据分析极简入门——SQL简介与基础知识
    一面数据: Hadoop 迁移云上架构设计与实践
    PHP 脚本,其中包含一个函数,该函数会从给定的字符串列表中随机选择一个字符串并返回
    双轮云台小车实现追踪彩色目标功能
  • 原文地址:https://blog.csdn.net/null18/article/details/133171301