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')
{cd1>功能关闭。它计算}。反之亦然:质数有两个除数,而复合数有两个以上的除数。所以将测试改为
value
的除数,并将其存储在变量count
中。但是,如果count>2
,则返回True
,否则返回{count <= 2
。甚至更好,更像python,将函数的最后几行替换为或者也许
^{pr2}$你明白为什么这样行吗?在
(我看到您现在已经更正了这个错误并编辑了您的问题,但程序仍然无法工作。)
另一个错误是在主循环中有测试
如果测试通过,则打印数字并更新变量,包括
Test
一切正常。但是,如果测试失败,则不执行任何操作,尤其是Test
的值不会更改。循环重复,你做了完全相同的测试,没有任何变化。程序陷入无限循环。在您可以通过将更新
Test
的行移出if
测试并将其放在循环的末尾,以便在每个循环上执行它。然后你的循环变成当我现在测试你的程序时,它似乎有效。在
可能还有其他我看不到的错误。您应该将函数
isPrime
与其余代码分开测试。当它运行良好时,测试函数reverse
。然后测试代码的各个部分。同时运行代码会使本地化和查找错误变得困难。在最后,您会问“如何在Python中找到错误”。这个问题对这个网站来说太宽泛了,你应该读一本关于调试的书或教程。但是简而言之,对于初学者来说有两种主要的方法。第一种方法是在代码中自由地放置
print
语句,显示程序执行的流程和关键变量的值。如果你把声明放在在循环的开始,您会看到循环是无限重复的,
Test
的值没有改变。当错误消失后,您可以删除或注释掉print
语句。日志可以更容易地做到这一点另一种更好的方法是使用调试器。我大部分的Python编程都是在
Spyder
中完成的,这是一个包含调试器的开发环境。我用它一次执行一行程序,Spyder
中的一个窗口显示了变量的值。还有一些调试器在开发环境之外工作。我鼓励您找到、学习和使用包含调试器的集成开发环境。Spyder
是一个免费的,优秀的科学编程专家。我用它来做数学编程。在相关问题 更多 >
编程相关推荐