首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python Prime_Numbers TypeError()

Python Prime_Numbers TypeError()
EN

Code Review用户
提问于 2017-08-09 16:07:29
回答 1查看 67关注 0票数 -1

TypeError: range()所期望的整数结束参数,得到浮动。

如果我使用Integer,它将不包括3作为素数.我不想添加与1相同的3.

代码-->

代码语言:javascript
复制
import  math
def is_prime(n):

    if n==1:
        return False

    if n == 2:
        return True
    if n > 2  and  n%2 == 0:
        return  False

    max_divisor =math.floor(math.sqrt(n))
    for d  in range(3,1 + max_divisor , 2 ) :
        if  n  %  d  == 0  :
            return False
        return  True



for n in range(1,21):
    print (n,is_prime(n))
EN

回答 1

Code Review用户

回答已采纳

发布于 2017-08-09 16:24:10

  1. 而不是使用math.floor(),只需将平方根转换为int,即:max_divisor = int(math.sqrt(n))
  2. return True应该在for循环之外。
  3. 您还可能希望添加一些东西来捕获奇怪的输入,例如if type(n) is not int or n <= 0 -> return None。如果您有此功能,也可以消除if n > 2 and n%2 == 0:的第一部分。

下列措施应能发挥作用:

代码语言:javascript
复制
import math
def is_prime(n):
    if type(n) is not int or n <= 0:
        return None

    if n==1:
        return False

    if n == 2:
        return True

    if n%2 == 0:
        return  False

    max_divisor = int(math.sqrt(n))
    for d in range(3, 1 + max_divisor, 2):
        if n % d == 0  :
            return False
    return True

for n in range(1,21):
    print (n,is_prime(n))

输出:

代码语言:javascript
复制
$ python review.py
(1, False)
(2, True)
(3, True)
(4, False)
(5, True)
(6, False)
(7, True)
(8, False)
(9, False)
(10, False)
(11, True)
(12, False)
(13, True)
(14, False)
(15, False)
(16, False)
(17, True)
(18, False)
(19, True)
(20, False)

如果最后的范围只是为了演示您的函数是否工作,那么这是很好的。但是,如果您特别需要间隔上的素数,请尝试实现筛,筛

票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/172473

复制
相关文章

相似问题

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