Python 寻找最接近的素数

Python 寻找最接近的素数,python,python-3.x,Python,Python 3.x,我需要打印出与输入数字最接近的素数。 该代码适用于输入的素数,但不适用于非素数。见下文 我是一个相对较新的程序员,我是Python新手 输入为16 预期结果是最接近16的素数是17 实际结果是最接近16的素数是18 x = int(input("Enter a number: ")) y = x-1 z = x+1 counter = 0 valid = True while valid == True: for i in range (2,x): if x%i == 0

我需要打印出与输入数字最接近的素数。 该代码适用于输入的素数,但不适用于非素数。见下文 我是一个相对较新的程序员,我是Python新手

输入为16 预期结果是最接近16的素数是17 实际结果是最接近16的素数是18

x = int(input("Enter a number: "))
y = x-1
z = x+1
counter = 0
valid = True
while valid == True:
    for i in range (2,x):
        if x%i == 0:
            counter += 1
    if counter <= 1:
        print("The closest prime to ",x," is ",x)
        valid = False
    counter = 0
    for i in range (2,y):
        if y%i == 0:
            counter += 1
    if counter <= 1:
        print("The closest prime to ",x," is ",y)
        valid = False
    counter = 0
    y -= 1
    for i in range (2,z):
        if y%i == 0:
            counter += 1
    if counter <= 1:
        print("The closest prime to ",x," is ",z)
        valid = False
    counter = 0
    z += 1
x=int(输入(“输入一个数字”))
y=x-1
z=x+1
计数器=0
有效=真
当valid==True时:
对于范围(2,x)内的i:
如果x%i==0:
计数器+=1

如果计数器请尝试此操作,它将为1到100之间的数字打印最接近的素数。您可以使用随机值尝试此函数

def is_prime(n):
    if n == 1:
        return True
    if n == 2:
        return True
    for i in range(2, int(n/2) + 1):
        if n % i != 0:
            continue
        else:
            return False
    return True

def get_nearest_prime(n):
    if is_prime(n):
        return n
    for i in range(1, n*n):
        if is_prime(n+i):
            return n+i
        if is_prime(n-i):
            return n-i

if __name__ == "__main__":
    for i in range(1, 100):
        print('%s: %s' % (i, get_nearest_prime(i)))

为了节省人们的时间,您能否告诉我们实际的错误是什么,而不仅仅是“我的代码不工作”?对不起,第一篇文章。例如,它适用于数字17,并返回最接近17的素数为17。然而,当我输入数字16时,它说最接近16的素数是18。欢迎来到StackOverflow。看见在您发布MRE代码并准确说明问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中,并重现您指定的问题。包括预期的和实际的输出,以及调试尝试的跟踪。正如指导原则告诉您的,“让其他人更容易帮助您”。你的变量名没有告诉我们任何事情。您有一个仅用作布尔标志的“计数器”。由于没有解释的原因,您有三个几乎相同的循环。检查
x
是否在每个循环中都是素数——为什么?将其分为三个任务。任务1:创建一个生成器,一个接一个地生成素数。任务#2:使用新生成器,找到包含输入的两个素数
a
b
,即
a