python - 编写一个程序,使用 python 打印出前 N 个 emirps,每行五个
问题描述
Emirp 是一个素数,其反转也是一个素数。例如,17 是素数,71 是素数,所以 17 和 71 是 emirps。
以下代码编译并接受输入。输入验证是正确的,但程序继续运行并且不输出任何内容。我还想知道如何在 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')
解决方案
您的isPrime
功能已关闭。它计算除数的数量value
并将其存储在变量中count
。但是,True
如果count>2
和False
其他情况,您会返回。应该反过来:素数有两个除数,合数有两个以上。因此将测试更改为count <= 2
. 更好,更 Pythonic,将该函数的最后几行替换为
return count <= 2
也许
return count == 2
你明白为什么会这样吗?
(我看到您现在已更正此错误并编辑了您的问题,但程序仍然无法运行。)
另一个错误是在你的主循环中你有测试
if isPrime(Test) and isPrime(reverse(Test)):
如果该测试通过,您打印数字并更新您的变量,包括Test
--all 都很好。但是,如果测试失败,您什么也不做,特别是 的值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
是一个免费的,优秀的,专门从事科学编程的。我将它用于我的数学编程。
推荐阅读
- javascript - 当浏览器界面关闭时,iOS Safari 上的 JS/CSS 锁定滚动不起作用?
- c# - 如何使用 C# 生成二维码?扫描生成的二维码时如何显示 PDF 文件
- python - 为什么这个数独求解器返回相同的板而不解决任何问题?
- sql - 根据两列删除记录
- css-selectors - 指向包含嵌套列表的目标列表项的 CSS 选择器
- python-3.x - Python BS4 - NameError:名称'tagID'未定义
- google-sheets - 查询公式替换过滤器
- swiftui - 在 ObservedObject 中操作 EnvironmentObject 而不更新整个视图
- flutter - 集团状态未更新
- r - 无法在 R 中执行 t.test()