首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >素数测试

素数测试
EN

Stack Overflow用户
提问于 2015-11-28 05:08:07
回答 2查看 48关注 0票数 1

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

代码语言:javascript
复制
# 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')
EN

回答 2

Stack Overflow用户

发布于 2015-11-28 05:43:52

只需取消最后两行的缩进:

代码语言:javascript
复制
# 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

票数 1
EN

Stack Overflow用户

发布于 2015-11-28 05:12:13

您不能在else语句中打印True .Instead您应该使用一个标志,并在测试失败时将其设置为1,然后中断循环

代码语言:javascript
复制
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')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33964807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档