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')
答案 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
是一个自由,优秀的专门从事科学编程的人。我把它用于我的数学编程。