定义:大于等于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()