编写一个程序,使用python打印出前N个emirp,每行5个

2024-10-01 22:40:36 发布

您现在位置:Python中文网/ 问答频道 /正文

Emirp是一个质数,它的反转也是一个质数。例如,17是素数,71是素数,所以17和71是埃米尔。在

下面的代码编译并接受输入。输入验证是正确的,但程序继续运行,不输出任何内容。我还想知道如何在python中找到错误。如果有缩进错误,请忽略。在

class negerror(UserWarning):
    pass


while True:

    prompt = input('Please enter a positive number: ')
    try:
        number=int(prompt)
        if number<=0:
            raise negerror
        break
    except ValueError:
        print('You did not enter an integer. Please try again. ')
    except negerror:
        print('You entered a negative number. Please make sure to enter a positive number')

def isPrime(value):
    count=0
    for i in range(1,value+1):
        if value%i==0:
            count=count+1
    if count<=2:
        return True
    else:
        return False


def reverse(value):
    val=str(value)
    val=val[::-1]
    val=int(val)
    return val


Test=2
countemirps=0
numberinoneline=0
while countemirps<number:
    if isPrime(Test) and isPrime(reverse(Test)):
        print('%6s'%Test, end = '  ')
        countemirps=countemirps+1
        Test=Test+1
        numberinoneline=numberinoneline+1
        if numberinoneline%5==0:
            print('\n')

Tags: testnumberreturnifvaluecountval质数
1条回答
网友
1楼 · 发布于 2024-10-01 22:40:36

{cd1>功能关闭。它计算value的除数,并将其存储在变量count中。但是,如果count>2,则返回True,否则返回{}。反之亦然:质数有两个除数,而复合数有两个以上的除数。所以将测试改为count <= 2。甚至更好,更像python,将函数的最后几行替换为

return count <= 2

或者也许

^{pr2}$

你明白为什么这样行吗?在

(我看到您现在已经更正了这个错误并编辑了您的问题,但程序仍然无法工作。)


另一个错误是在主循环中有测试

if isPrime(Test) and isPrime(reverse(Test)):

如果测试通过,则打印数字并更新变量,包括Test一切正常。但是,如果测试失败,则不执行任何操作,尤其是Test的值不会更改。循环重复,你做了完全相同的测试,没有任何变化。程序陷入无限循环。在

您可以通过将更新Test的行移出if测试并将其放在循环的末尾,以便在每个循环上执行它。然后你的循环变成

while countemirps<number:
    if isPrime(Test) and isPrime(reverse(Test)):
        print('%6s'%Test, end = '  ')
        countemirps=countemirps+1
        numberinoneline=numberinoneline+1
        if numberinoneline%5==0:
            print('\n')
    Test=Test+1

当我现在测试你的程序时,它似乎有效。在


可能还有其他我看不到的错误。您应该将函数isPrime与其余代码分开测试。当它运行良好时,测试函数reverse。然后测试代码的各个部分。同时运行代码会使本地化和查找错误变得困难。在


最后,您会问“如何在Python中找到错误”。这个问题对这个网站来说太宽泛了,你应该读一本关于调试的书或教程。但是简而言之,对于初学者来说有两种主要的方法。第一种方法是在代码中自由地放置print语句,显示程序执行的流程和关键变量的值。如果你把声明放在

print(Test)

在循环的开始,您会看到循环是无限重复的,Test的值没有改变。当错误消失后,您可以删除或注释掉print语句。日志可以更容易地做到这一点

另一种更好的方法是使用调试器。我大部分的Python编程都是在Spyder中完成的,这是一个包含调试器的开发环境。我用它一次执行一行程序,Spyder中的一个窗口显示了变量的值。还有一些调试器在开发环境之外工作。我鼓励您找到、学习和使用包含调试器的集成开发环境。Spyder是一个免费的,优秀的科学编程专家。我用它来做数学编程。在

相关问题 更多 >

    热门问题