当前位置 博文首页 > 李江辰:Python-打印指定范围内的全部回文素数(高教社,《Pytho

    李江辰:Python-打印指定范围内的全部回文素数(高教社,《Pytho

    作者:[db:作者] 时间:2021-08-23 22:20

    前言

    PTA程序设计类教学平台—Python作业

    题目:

    回文素数是指一个数既是素数又是回文数,例如131既是素数又是回文数。请实现下述两个函数,帮助测试程序完成如下功能:从键盘输入正整数N, 打印从1 ~ N(包含N)的全部回文素数,一行一个。

    函数接口定义:

    def isPrime(num):
    def reverseNumber(num):

    isPrime()用于判断整数num是否是素数,是返回True, 否则返回False. reverseNumber()用于返回整数num的反向数,321的反向数为123, 32的反向数为23。

    裁判测试程序样例:

    N = int(input())
    for n in range(1,N+1):
    if isPrime(n) and reverseNumber(n) == n:
    print(n)

    输入样例:

    在这里给出一组输入。例如:

    400

    输出样例:

    2
    3
    5
    7
    11
    101
    131
    151
    181
    191
    313
    353
    373
    383

    首先了解什么是素数

    质数(Prime number),又称素数,指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也可定义为只有1与该数本身两个因数的数)。

    • 举个例子:7这个数,从2开始一直到6,都不能被它整除,只有1和它本身(7)才能被整除,所以7就是一个质数。

    回文数

    • 正序和倒序都是一样的就叫回文数

    完整代码:

    N = int(input())
    def isPrime(n):
        if n > 1 :
            for i in range(2, n):
                if n % i == 0:
                    break
            else:
                return n
    
    
    def reverseNumber(n):
        num = str(n)
        m = num[::-1]
        if num == m:
            return n
    
    
    for n in range(1, N + 1):
        if isPrime(n) and reverseNumber(n) == n:
            print(n)
    exit(0)
    

    详细解析:

    按照题目要求先把题目提供的代码放进去并分析一下

    N = int(input())
    
    
    def isPrime(n):
        pass
    
    
    def reverseNumber(n):
        pass
    
    
    for n in range(1,N+1):
        if isPrime(n) and reverseNumber(n) == n:
            print(n)
    

    可以看出一开始定义了一个N用于接收输入,再用for循环遍历一遍1-N
    这句if isPrime(n) and reverseNumber(n) ==n: 用来判断调用两个函数返回的值是不是相等的如果相等就输出当下的n。

    is :是比较两个引用是否指向了同一个对象(引用比较)。
    == :对于数值类型的数据是比较两个对象是否相等。但是对于非数值型的数据,比如字符串,类创建的对象python默认去比较两个对象的地址。

    了解了整个框架后就只需要编写判断素数和判断回文数的函数了

    1. 判断一个数是不是素数
    def isPrime(n):   #一个命名为isPrime的函数
        if n > 1 :		#素数必须大于一所以用一个if判断n是不是大于1的
            for i in range(2, n): #range(start,end,step=)-----range(开始值,结束值,步长)没写默认为1
                if n % i == 0:	#如果是n除i等于0说明不是素数直接(break)结束for循环
                    break
            else:
                return n #返回n的值给函数调用处
    
    2. 判断回文数
    def reverseNumber(n):  #一个命名为reverseNumber的函数
        num = str(n)
        m = num[::-1] #倒序num给m
        if num == m: #判断m和num 是不是相等的如果是说明是回文数
            return n
    
    最后结合代码
    N = int(input())
    def isPrime(n):
        if n > 1 :
            for i in range(2, n):
                if n % i == 0:
                    break
            else:
                return n
    
    
    def reverseNumber(n):
        num = str(n)
        m = num[::-1]
        if num == m:
            return n
    
    
    for n in range(1, N + 1):
        if isPrime(n) and reverseNumber(n) == n:
            print(n)
    exit(0)
    

    到这后就完美解决了~
    实现的方法有很多,本篇博客只是给新手提供一种思路。
    如有帮助记得点赞~

    cs