python - 为什么我的程序打印“这是一个素数”。两次?
问题描述
我写了一个程序来判断一个数是否是素数。该程序有效,只是它两次打印出最终语句,这是我不想要的。我对 Python 还很陌生,所以请就让我的代码更高效提供任何建议。
def user(text = "Give me a number.\n"):
return int(input(text))
number = user()
list = range(1, number + 1)
divisor = []
for element in list:
divide = number % element
if divide == 0:
divisor.append(element)
for element in divisor:
if len(divisor) > 2:
print ("This isn't a prime.")
user("Give me another number.\n")
else:
print ("This is a prime.")
解决方案
我强烈建议您学习基本的调试技术。请参阅这个可爱的调试博客寻求帮助。如果不出意外,删除开销代码并插入几个战略print
语句来跟踪控制和数据流。例如:
number = 7 # For debugging, pick a single problem number.
divisor = []
for element in range(1, number + 1):
divide = number % element
if divide == 0:
divisor.append(element)
print(number, "has divisors", divisor)
for element in divisor:
if len(divisor) > 2:
print ("This isn't a prime.")
# user("Give me another number.\n")
else:
print ("This is a prime.", element)
输出:
7 has divisors [1, 7]
This is a prime. 1
This is a prime. 7
您现在可以看到问题:
- 你已经解决了一个更大的问题:找到一个数字的所有除数
- 你的报告——据说是一个简单的是/否决定——重复每个除数的决定,而不仅仅是一次。
例如,给定number = 12
,代码产生
12 has divisors [1, 2, 3, 4, 6, 12]
This isn't a prime.
This isn't a prime.
This isn't a prime.
This isn't a prime.
This isn't a prime.
This isn't a prime.
解决方案
按照要点blue_note
,Martijn
简化您的较低代码:删除for
以避免多个输出,并删除您不使用的额外调用。如果您想重复该过程,您需要将整个程序包装在一个循环中,而不仅仅是获取更多输入。
if len(divisor) > 2:
print ("This isn't a prime.")
else:
print ("This is a prime.")
推荐阅读
- php - PHP custom router Error 404
- mysql - Mysql default value from wordpress form query
- android - Text Recognization :: Google ML Kit does not recognizes seven segment display numbers and decimals
- java - 片段中的 Firebase 数据库 RecyclerView 导致将数据库转换为字符串时出错
- react-router - 将两个具有不同路由器的反应项目合并为一个?
- c# - 单击时 ASP.NET C# WebForms ListView 突出显示项
- java - 点击后的复选框只有::after
- javascript - 如何将 PHP 中的数据发送到 HTML 文章中
- vim - 如何在插入模式下在 Vim 中执行 Ctrl+Del?
- symfony - 未知实体命名空间别名 'AppBundle' 和“类 'App\\Entity\\Product' 不存在