gpt4 book ai didi

python - 镜像素生成器python

转载 作者:行者123 更新时间:2023-11-28 17:10:43 26 4
gpt4 key购买 nike

我目前正在参加 Python 编程类(class),上周我们有一个家庭作业问题是开发一个程序来生成所有小于或等于 n 的质数,其镜像也是质数,我看不到我在哪里出错了,请帮忙!

import math

def mirror_prime(n):
answer = True
# Test 0 and 1
if n==0 or n==1:
answer = False
# End if

# Test even numbers
if n != 2 and n%2==0:
answer= False
# End if

# Test if there is a proper odd divisor
for d in range (3, int(math.sqrt(n))+1, 2):
if n%d==0:
answer=False
# End if
# End for



#Reverse n
mirror_n = int(str(n)[::-1])
mirror_answer = True

# Test 0 and 1
if mirror_n==0 or mirror_n==1:
mirror_answer = False
# End if


def mirror_prime_generator(n):
for i in range(3, n+1):
print (mirror_prime(i))

我期望得到一个所有素数的列表,这些素数的镜像也是小于或等于 n 的素数

当我将 mirror_prime_generator(n) 放入 shell 时得到的结果,无论 n 是多少次,它都不打印,所以如果 n 是 23,它将打印 none 23 次

最佳答案

还有一些错误。 for 循环的缩进错误(它们在 if 内)并且您有时使用 n 而不是 mirror_n .

你的代码

这是一个更改最少的工作代码:

import math

def mirror_prime(n):
answer = True
# Test 0 and 1
if n==0 or n==1:
answer = False
# End if

# Test even numbers
if n != 2 and n%2==0:
answer= False
# End if

# Test if there is a proper odd divisor
for d in range (3, int(math.sqrt(n))+1, 2):
if n%d==0:
answer=False
# End if

# End for

#Reverse n
mirror_n = int(str(n)[::-1])
mirror_answer = True

# Test 0 and 1
if mirror_n==0 or mirror_n==1:
mirror_answer = False
# End if
# Test even numbers
if mirror_n != 2 and mirror_n%2==0:
mirror_answer= False
# End if

# Test if there is a proper odd divisor
for d in range (3, int(math.sqrt(mirror_n))+1, 2):
if mirror_n%d==0:
mirror_answer=False
# End if

# End for

if answer and mirror_answer==True:
return n, mirror_n



def mirror_prime_generator(n):
for i in range(3, n+1):
if mirror_prime(i):
print(i)

mirror_prime_generator(100)
# 3
# 5
# 7
# 11
# 13
# 17
# 31
# 37
# 71
# 73
# 79
# 97

简化版

您应该尽量避免使用重复代码。 nmirror_n 的测试是完全一样的,所以你可以把它放在一个函数中:

def is_prime(n):
if n == 2:
return True
if n < 2 or n % 2 == 0:
return False
for d in range(3, int(n**0.5) + 1, 2):
if n % d == 0:
return False
return True


def is_mirror_prime(n):
mirror_n = int(str(n)[::-1])
return mirror_n != n and is_prime(n) and is_prime(mirror_n)

print([n for n in range(1000) if is_mirror_prime(n)])
# [13, 17, 31, 37, 71, 73, 79, 97, 107, 113, 149, 157, 167, 179, 199, 311, 337, 347, 359, 389, 701, 709, 733, 739, 743, 751, 761, 769, 907, 937, 941, 953, 967, 971, 983, 991]

关于python - 镜像素生成器python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47721865/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com