2. python练习题2-判断一个数是否是素数

文摘   教育   2024-03-21 00:35   云南  


【目录】


  • 1. 【目标任务】

  • 2. `/求商 %取余`

  • 3. `f`格式化字符串

  • 4. 程序代码

  • 5. math.sqrt(num)求平方根

  • 6. 遍历到平方根

  • 7. 两种for循环迭代区别

  • 8. 遍历到平方根的代码

  • 9. return False语句


【正文】

1. 【目标任务】

质数( Prime Number )又称素数。
一个大于1的自然数,除了1和它本身外,不能被其他自然数整除的数叫做质数。
要求用户输入一个数字,判断并输出该数字是否为素数。

【思路解析】

  • 先判断输入的数字是否大于1,用if语句实现。

  • 从2开始,逐个尝试将该数字除以从2到该数字的平方根之间的所有自然数,用for循环range函数实现。

  • 判断是否存在能整除该数字的数,用if语句实现。
    如果存在能整除的数,则该数字不是素数。
    如果不存在能整除的数,则该数字是素数。

【为什么除到平方根】

判断质数的方法有很多种,其中一种常见的方法是通过除以平方根来判断。
这是因为在一个数的因数中,较大的因数必然与较小的因数成对出现。
如果一个数不是质数,那么它一定可以被分解为两个因数的乘积。
其中一个因数小于等于它的平方根,另一个因数大于等于它的平方根。
举个例子,如果我们要判断一个数n是否为质数,我们只需要从2开始到n的平方根范围内进行遍历。
检查是否存在能整除n的因数。
如果存在这样的因数,那么n就不是质数;否则,n就是质数。
这种方法可以有效地减少遍历的次数,提高判断质数的效率。
当然你不除到平方根,直接除到n-1也可以实现。

2. /求商 %取余

print(8/4)  # 8除以4,商为2.0
print(8%4)  # 8除4,取余,余数为0

【终端输出】

2.0
0

3. f格式化字符串

name = "安迪"
city = "云南"
school = "复旦大学"
print(f"大家好,我叫{name},来自{city},毕业于{school}!")

【终端输出】

大家好,我叫安迪,来自云南,毕业于复旦大学!

【编写思路】


  1. 我们要输出的内容是:大家好,我叫安迪,来自云南,毕业于复旦大学!

    1. 把要格式化的内容用英文大括号加变量名{变量名}替换:
      安迪替换为大括号加变量名{name}
      云南替换为大括号加变量名{city}
      复旦大学替换为大括号加变量名{school}
      格式化模板为:"大家好,我叫{name},来自{city},毕业于{school}!"

    1. 添加格式化符号f

    4. 程序代码

    【温馨提示】

    老规矩,但凡要求从终端输入的,初学者都先给变量赋具体的值,代码检验没有错误后再将变量替换成从终端输入。

    【代码示例】

    # def 语句自定义一个函数
    # 函数名:is_prime
    # 参数:num
    # def语句以冒号结尾,冒号后的代码有4个空格的缩进
    def is_prime(num):
        # 首先用if语句判断输入的数是否小于等于1    
        # if 语句以冒号结尾,冒号后的代码有4个空格的缩进
        # 如果num小于等于1
        if num <= 1:
            # return False 的作用是结束函数执行,下面的代码不会被执行
            return False
        # range函数含前不含后,(2, num)取到的值是2到num-1
        # 遍历从2到num-1的整数
        # 变量i会依次取2、3、4、…、num-1的值
        # for 语句以冒号结尾,冒号后的代码有4个空格的缩进
        for i in range(2, num):
            # 如果num*i 余数等于0
            # %的作用是取余,余数为0,表示能整数
            if num % i == 0:
                # 程序结束
                return False
        # num*i 余数不等于0,条件满足,返回True
        return True

    # 先给变量num赋一个具体的值
    # 不断的更改num的值,检测代码的正确性
    num = 7

    # 判断并输出结果
    # 调用函数语法:函数名(参数)
    # 将参数num的值传递个上面的自定义函数
    # 如果调用is_prim函数返回的是True
    if is_prime(num):
        # 输出num是质数
        print(f"{num} 是质数。")
    # 如果用is_prim函数返回的是False,输出num是不是质数
    else:
        print(f"{num} 不是质数。")

    【终端输出】

    7 是质数。

    大家要依次给num=1,2,3,4,5,6,7,8,9赋值,检测代码的准确性。

    代码没有问题时将num=1替换成input语句,代码如下:

    【最终代码】

    # def 语句自定义一个函数
    # 函数名:is_prime
    # 参数:num
    # def语句以冒号结尾,冒号后的代码有4个空格的缩进
    def is_prime(num):
        # 首先用if语句判断输入的数是否小于等于1     
        # if 语句以冒号结尾,冒号后的代码有4个空格的缩进
        # 如果num小于等于1
        if num <= 1:
            # return False 的作用是结束函数执行,下面的代码不会被执行
            return False
        # range函数含前不含后,(2, num)取到的值是2到num-1
        # 遍历从2到num-1的整数
        # 变量i会依次取2、3、4、…、num-1的值
        # for 语句以冒号结尾,冒号后的代码有4个空格的缩进
        for i in range(2, num):
            # 如果num*i 余数等于0
            # %的作用是取余,余数为0,表示能整数
            if num % i == 0:
                # 程序结束
                return False
        # num*i 余数不等于0,条件满足,返回True
        return True

    # 获取用户输入的数字
    # input接收到的数据类型为字符串类型
    # 用int函数将其转换为整数
    num = int(input("请输入一个数字:"))

    # 判断并输出结果
    # 调用函数语法:函数名(参数)
    # 将参数num的值传递个上面的自定义函数
    # 如果调用is_prim函数返回的是True
    if is_prime(num):
        # 输出num是质数
        print(f"{num} 是质数。")
    # 如果用is_prim函数返回的是False,输出num是不是质数
    else:
        print(f"{num} 不是质数。")

    【终端输出】

    5 是质数。

    5. math.sqrt(num)求平方根

    math是Python的内置库,不需要额外安装。

    【语法】

    math.sqrt(num)

    【参数】

    num是需要计算平方根的数值,可以是整数或浮点数。

    【返回值】

    返回num的平方根值。

    【代码示例】

    import math
    math.sqrt(9)

    【终端输出】

    3.0

    6. 遍历到平方根

    若要除到平方根只需要将上述代码中的

    for i in range(2, num):

    替换成

    for i in range(2, int(math.sqrt(num)) + 1):

    【语法解析】

    首先是用for语句创建一个循环。

    循环的范围是2到int(math.sqrt(num)) + 1

    math.sqrt(num)函数来计算num的平方根,并使用int()函数将结果转换为整数。

    range函数含前不含后,因此要在math.sqrt(num)的数值上+1

    注意要先import math导入math模块。

    7. 两种for循环迭代区别

    【代码示例】

    num = 9
    for i in range(2, num):
        print(i)

    【终端输出】

    2
    3
    4
    5
    6
    7
    8

    【代码示例】

    import math 
    num = 9
    for i in range(2, int(math.sqrt(num)) + 1):
        print(i)

    【终端输出】

    2
    3

    观察上面的输出结果,大家可以感受到使用平安根可以提高程序运行的效率。

    8. 遍历到平方根的代码

    【代码示例】

    # def 语句自定义一个函数
    # 函数名:is_prime
    # 参数:num
    # def语句以冒号结尾,冒号后的代码有4个空格的缩进
    def is_prime(num):
        # 首先用if语句判断输入的数是否小于等于1     
        # if 语句以冒号结尾,冒号后的代码有4个空格的缩进
        # 如果num小于等于1
        if num <= 1:
            # return False 的作用是结束函数执行,下面的代码不会被执行
            return False
        
        for i in range(2, int(math.sqrt(num)) + 1):
            # 如果num*i 余数等于0
            # %的作用是取余,余数为0,表示能整数
            if num % i == 0:
                # 程序结束
                return False
        # num*i 余数不等于0,条件满足,返回True
        return True

    # 获取用户输入的数字
    # input接收到的数据类型为字符串类型
    # 用int函数将其转换为整数
    num = int(input("请输入一个数字:"))

    # 判断并输出结果
    # 调用函数语法:函数名(参数)
    # 将参数num的值传递个上面的自定义函数
    # 如果调用is_prim函数返回的是True
    if is_prime(num):
        # 输出num是质数
        print(f"{num} 是质数。")
    # 如果用is_prim函数返回的是False,输出num是不是质数
    else:
        print(f"{num} 不是质数。")

    【终端输出】

    11 是质数。

    9. return False语句

    return False表示某个条件或操作的结果为假。

    当函数执行到return False时,它会立即返回False,并结束函数的执行。

    return True表示某个条件或操作的结果为真。

    当函数执行到return True时,它会立即返回True。


    安迪python学习笔记
    python学习笔记,适合初学者。
     最新文章