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

时间:2018-05-19 20:25:48

标签: 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')

1 个答案:

答案 0 :(得分:0)

您的isPrime功能已关闭。它计算value的除数的数量,并将其存储在变量count中。但是,如果True则返回count>2,否则返回False。它应该是另一种方式:素数有两个除数,复合数有两个除数。因此,将测试更改为count <= 2。更好,更pythonic,用

替换该函数的最后几行
return count <= 2

或者

return count == 2

你知道为什么会这样吗?

(我看到你现在已经纠正了这个错误并编辑了你的问题,但该程序仍无效。)

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

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

如果该测试通过,您打印该数字并更新您的变量,包括Test - 一切都很好。但是,如果测试失败,则执行 nothing ,特别是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。然后测试代码的各个部分。一次运行代码会使本地化和查找错误变得困难。

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

print(Test)

在你的循环开始时,你会看到循环无限重复,Test的值没有变化。当错误似乎消失时,您可以删除或注释掉print语句。记录可以更容易地做到这一点

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