首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数is_prime -误差

函数is_prime -误差
EN

Stack Overflow用户
提问于 2013-12-22 10:10:22
回答 3查看 3.8K关注 0票数 11

这是来自codeacademy.com的一个问题,我在那里学习Python。所以我想要的是定义一个函数来检查一个数字是否是素数。如果是的话,还真。如果不是,则返回False。

这是我的代码:

代码语言:javascript
复制
def is_prime(x):
    lst = []       # empty list to put strings 'False' and 'True'

    for i in range(2,x): # starting at 2 and not including x (number 1 is a divisor of all numbers

        if x <= 2:           # [1] see bellow the explanation
            lst.append('False')
            break

        elif x % i == 0: # if x is divisible by i(number between 2 and not including x)
            lst.append('False')
            break        # break, because we already know x is not prime

        elif x % i > 0:
            lst.append('True') # x is not divisible by i

    if 'False' in lst:
        return False     #  x is not prime - return False

    else:
        return True  # 'True' is in lst, so x is prime - return True

print is_prime(-2) # [2] I get an error here. See below

我创造了这个条件,因为代码学院里写着:“提示记住:小于2的所有数都不是素数!”

2-例如,当我运行'print is_prime(11)‘或'is_prime(6)’时,它工作正常。所以我提交了答案,但代码学院不接受。它说:“您的函数在is_prime(-2)上失败。当它返回False时,它返回True。”

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-12-22 10:13:14

让我们看看当您进入-2时会发生什么

  • range(2,-2)是空的,所以for循环永远不会运行。
  • 因此,lst在循环之后仍然是[]
  • 因此,'False' in lstFalse
  • 因此,执行return True
票数 11
EN

Stack Overflow用户

发布于 2013-12-22 10:13:29

x-2时,range(2, x)将生成一个空列表。

代码语言:javascript
复制
print range(2, -2) # will print []

因此,循环和循环中的if条件将不会被执行。最后一个if条件将被选中,并且在'False'中没有lst。因此,它返回True

你可以像这样写同样的程序

代码语言:javascript
复制
def is_prime(x):
    if x < 2:
        return False
    prime_flag = True
    for i in range(2,x):
        if x % i == 0:
            prime_flag = False
            break
    return prime_flag

print is_prime(-2)
票数 4
EN

Stack Overflow用户

发布于 2015-05-22 18:58:45

代码语言:javascript
复制
def is_prime(x):  
    if x < 2:  
        return False  
    for n in range(2, (x)-1):  
        if x % n == 0:  
            return False  
    return True
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20728274

复制
相关文章

相似问题

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