首页 > 解决方案 > 为什么我的程序打印“这是一个素数”。两次?

问题描述

我写了一个程序来判断一个数是否是素数。该程序有效,只是它两次打印出最终语句,这是我不想要的。我对 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.")

标签: python

解决方案


我强烈建议您学习基本的调试技术。请参阅这个可爱的调试博客寻求帮助。如果不出意外,删除开销代码并插入几个战略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

您现在可以看到问题:

  1. 你已经解决了一个更大的问题:找到一个数字的所有除数
  2. 你的报告——据说是一个简单的是/否决定——重复每个除数的决定,而不仅仅是一次。

例如,给定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_noteMartijn简化您的较低代码:删除for以避免多个输出,并删除您不使用的额外调用。如果您想重复该过程,您需要将整个程序包装在一个循环中,而不仅仅是获取更多输入。

if len(divisor) > 2:
    print ("This isn't a prime.")
else:
    print ("This is a prime.")

推荐阅读