关于python的疑问!!!

定义:大于等于2个数位、数位不全相同、且逆序排列后仍是素数的素数被称为“回文素数”。

要求输出10×10的回文素数方阵。即:从13,17,...至第10个回文素数后换行回到最左侧输出第11个回文素数。

我的代码如下,运行并不成功,求教原因:


def judge_Prime(n):
    i = 2
    while i <= n:
        if n % i == 0:
            return False
        else:
            i += 1
            continue
    return True


def reverse_Num(n1):
    n1 = str(n1)
    n2 = str()
    length = len(n1)
    i = length
    while i >= 1:
        n2 += n1[i-1]
        i -= 1
    return int(n1),int(n2)


def find_Emirp():
    r = 10
    count = 0
    emirps = list()
    while count < 100:
        n1,n2 = reverse_Num(r)
        if n1 == n2:
            r += 1
            continue
        elif judge_Prime(n1) and judge_Prime(n2):
            emirps.append(n1)
            r += 1
            count += 1
        else:
            r += 1
    return(emirps)


def display_Numbers():
    c = 0
    p = 1
    while p <= 10:
        q = 1
        while q <= 10:
            print(emirps[c],end=" ")
            q += 1
            c += 1
        p += 1
    print()

find_Emirp()
display_Numbers()

先确认你的程序能否正确判断回文数, 和素数。  看:https://blog.csdn.net/song91425/article/details/82793311

你的代码有几处错误:

1.判断素数函数,judge_Prime(n)中的判断条件,while i <= n,每个数循环到自身时该条件都满足,全部返回为False,应改为while i < n。

2.在显示函数display_Numbers(),变量emirps没有定义,应该在此句语句前加上对find_Emirp()的函数调用,emirps = find_Emirp()。

3.在显示函数中,在每行十个素数输出后,加上print('\n')换行操作。

另外,对数字进行反转,代码可以更加简洁,用n1[::-1],还有其他代码都需要优化。

修改后代码运行结果正确:

def judge_Prime(n):
    i = 2
    while i < n:
        if n % i == 0:
            return False
        else:
            i += 1
            continue
    return True


def reverse_Num(n1):
    n1 = str(n1)
    n2=n1[::-1]
    return int(n1),int(n2)

def find_Emirp():
    r = 10
    count = 0
    emirps = list()
    while count < 100:
        n1,n2 = reverse_Num(r)
        if n1 == n2:
            r += 1
            continue
        elif judge_Prime(n1) and judge_Prime(n2):
            emirps.append(n1)
            r += 1
            count += 1
        else:
            r += 1
    return(emirps)
def display_Numbers():
    emirps = find_Emirp()
    for i,x in enumerate(emirps):
        if i%10==0:
            print('\n')
        print(emirps[i],end=" ")      
    
    print()

#find_Emirp()
display_Numbers()