• Python经典练习题(三)


    🍀第一题

    输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

    本题需要我们掌握的知识点在于,判断字符串,是数字还是字母还是啥的,当然在Python内置中几乎都可以找到我们需要的
    下表我将介绍一些常用的判断函数

    判断函数描述
    isalnum()判断是否为字母或数字(字母数字组合)
    isalpha()判断是否为字母
    isdigit()判断是否为数字
    islower()判断是否为小写字母
    isupper()判断是否为大写字母
    isspace()判断是否为空白字符(空格、制表符、换行符等)
    isnumeric()判断是否为数字字符(包括各种数字字符,如Unicode数字字符)
    isdecimal()判断是否为十进制数字字符
    isidentifier()判断是否为合法的标识符(Python标识符规则,如变量名检查)
    # 输入一行字符
    input_string = input("请输入一行字符:")
    
    # 初始化统计变量
    letter_count = 0
    space_count = 0
    digit_count = 0
    other_count = 0
    
    # 遍历输入字符串中的每个字符
    for char in input_string:
        if char.isalpha():  # 判断是否为英文字母
            letter_count += 1
        elif char.isspace():  # 判断是否为空格
            space_count += 1
        elif char.isdigit():  # 判断是否为数字
            digit_count += 1
        else:
            other_count += 1
    
    # 输出统计结果
    print(f"英文字母个数:{letter_count}")
    print(f"空格个数:{space_count}")
    print(f"数字个数:{digit_count}")
    print(f"其他字符个数:{other_count}")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

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


    🍀第二题

    找出1000以内的所有完数
    完整代码如下

    def find_perfect_numbers(limit):
        perfect_numbers = []  # 存储完数的列表
    
        for num in range(2, limit + 1):
            factors = [1]  # 初始化因子列表,并包括1作为第一个因子
    
            for i in range(2, num // 2 + 1):
                if num % i == 0:
                    factors.append(i)  # 将因子添加到列表
    
            # 检查是否是完数
            if sum(factors) == num:
                perfect_numbers.append(num)
    
        return perfect_numbers
    
    # 找出1000以内的所有完数
    limit = 1000
    perfect_numbers = find_perfect_numbers(limit)
    
    # 输出结果
    print(f"1000以内的完数有以下{len(perfect_numbers)}个:")
    print(perfect_numbers)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    运行结果如下
    在这里插入图片描述
    我们可以一步一步分析上述代码

    我们首先定义了一个名为 find_perfect_numbers 的函数,该函数接受一个参数 limit,用于指定查找完数的上限。同时,我们初始化一个空列表 perfect_numbers 用于存储找到的完数。

    接下来,我们使用一个 for 循环遍历从2到 limit(包括 limit)之间的所有整数。因为1不被视为完数,所以我们从2开始。

    对于每个数字 num,我们初始化一个列表 factors,并将1添加为第一个因子。1 是每个正整数的因子,所以我们将它包含在列表中。

    然后,我们使用另一个 for 循环遍历从2到 num 的一半(包括 num 除以2得到的整数部分)之间的数字。这是因为除了1以外的因子不可能大于 num 的一半。例如,对于数字6,除了1之外的因子最大不可能大于3

    在内部循环中,我们检查 num 是否可以被 i 整除,如果可以,就将 i 添加到 factors 列表中,表示 i 是 num 的一个因子。

    最后就是判断是不是相等了,然后函数调用了


    🍀第三题

    一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

    # 初始高度
    height = 100  # 单位:米
    
    # 初始速度(向上)为0
    velocity = 0
    
    # 重力加速度
    gravity = 9.8  # 单位:m/s²
    
    # 落地和反弹的次数
    n = 10
    
    # 初始化总距离
    total_distance = 0
    
    # 计算第n次落地时的高度和总距离
    for i in range(n):
        # 落地时,更新总距离和高度
        total_distance += height
        height /= 2
    
        # 计算反弹时的速度
        velocity = (velocity + gravity)**0.5
    
        # 计算反弹的高度
        height = height + velocity**2 / (2 * gravity)
    
    # 输出结果
    print(f"第{ n }次落地时,共经过 { total_distance } 米")
    print(f"第{ n }次反弹的高度为 { height } 米")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

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

    自由落体运动的位移公式:这个公式用于计算物体在自由落体运动中的位移。对于球从初始高度h自由落下的情况,位移d可以通过以下公式计算:
    在这里插入图片描述

    其中,d是位移,g是重力加速度(9.8 m/s²),t是时间。

    对于球的反弹运动,我们在计算高度时使用了这个公式。

    速度的变化公式:在物理中,速度的变化与时间和加速度有关。我们使用以下公式来计算速度的变化:

    在这里插入图片描述

    其中,vf​是最终速度,vi​是初始速度,a是加速度(重力加速度),t是时间。

    这个公式在计算每次反弹后速度的变化时使用。

    在代码中,我们使用这些物理公式来模拟球的自由落体和反弹过程。首先,我们计算每次落地后的位移和速度,然后将其用于计算下次反弹的高度。这样,我们可以迭代地计算球的运动状态,直到第10次落地为止。


    请添加图片描述

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

  • 相关阅读:
    docker部署 seata 1.5.2
    如何成为一个Android大厂「offer收割机」, 提炼神功的秘籍在此
    Unity中神秘的Transform和transform(小写)的关系
    如何决定在创建利基(niche)站时选择中文站还是英文站
    VS中Git的简单使用与说明
    Wireshark的数据包它来啦!
    【开发问题&解决方法记录】01.dian
    JAVA:实现使用快速排序算法获取给定数组中的第 k 个最大或第 k 个最小元素算法(附完整源码)
    adhd数据集表型
    MySQL常用操作命令大全
  • 原文地址:https://blog.csdn.net/null18/article/details/133172958