【问题标题】:Testing for primes测试素数
【发布时间】:2015-11-27 21:08:07
【问题描述】:

我正在尝试编写一个简单的 Python(3.5 版)代码来测试给定整数的素数。当我输入 97(例如)时,我得到四个 True 输出。 我做错了什么?

# Testing for primality: True or False 25.11.2015
# True means prime, False means divisible

num = int(input('Input an integer for primality test: '))

if num < 2 or num % 2 == 0:
    print('False')
else:
    for i in range(3, int(num ** (1/2)) + 1, 2):
        if num % i == 0:
            print('False')
            break
        else:
            print('True')

【问题讨论】:

  • 因为你已经为每个i 打印了它而不是除数。

标签: python-3.x primes


【解决方案1】:

只是取消缩进最后两行:

# Testing for primality: True or False 25.11.2015
# True means prime, False means divisible

num = int(input('Input an integer for primality test: '))

if num < 2 or num % 2 == 0:
    print('False')
else:
    for i in range(3, int(num ** (1/2)) + 1, 2):
        if num % i == 0:
            print('False')
            break
    else:
        print('True')

在 Python 中,for 可以有一个 else 子句,只有在 for 循环自然耗尽其迭代时才会调用该子句。因此,如果您从for 循环中使用break,它将不会打印True。它可以防止其他语言需要flag,因为它在循环之外进行测试,如另一个答案所示。

不过,您还有一个额外的错误,即 2 返回 False

【讨论】:

  • @YehudaKatz,不客气!在 SO 上,您也可以通过投票和选择答案来表示感谢。
【解决方案2】:

你不能在 else 语句中打印 True 。相反,你应该使用一个标志并将其设置为 1 测试失败,然后打破循环

flag = False
for i in range(3, int(num ** (1/2)) + 1, 2):
    if num % i == 0:
        flag = True
        break
if flag:
    print('False')
else:
    print('True')

【讨论】:

  • 如果你定义了一个函数,就不需要额外的标志。找到除数后,您可以直接返回 False
  • @Jubobs 是的,有很多方法,但这是为 OP 提供多次打印 True 的原因
猜你喜欢
  • 2011-05-31
  • 2010-10-12
  • 2017-03-05
  • 2011-05-28
  • 2015-09-06
相关资源
最近更新 更多