You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中range()参数能否为浮点数?完全数求解相关疑问

关于Python range()处理非整数上限的问题

首先明确一个关键:Python的range()函数只能接受整数作为起始、结束、步长参数,如果直接传入浮点数(比如28的平方根≈5.291),会直接抛出TypeError,所以你觉得“可行”,应该是代码里已经对平方根做了取整操作(比如用int()转换),只是没留意到。

当你把浮点数平方根用int()转换后,Python会直接截断小数部分(向下取整),而不是四舍五入。比如int(math.sqrt(28))会得到5,而非6。

结合你找完全数的场景,这个逻辑是合理的:

  • 对于一个数n,若i是它的约数,那么n/i也必然是它的约数
  • 当i超过n的平方根时,n/i就会小于平方根,这时候对应的约数对已经被遍历过了
  • 所以只需要遍历1到int(sqrt(n))之间的整数,就能找到所有不重复的约数对

举个具体的代码例子:

import math

def check_perfect_number(n):
    if n <= 1:
        return False
    total = 1  # 1是所有正整数的约数
    sqrt_val = math.sqrt(n)
    # 遍历2到整数平方根+1,确保覆盖到平方根本身(比如4的平方根是2)
    for i in range(2, int(sqrt_val) + 1):
        if n % i == 0:
            total += i
            pair = n // i
            if pair != i:  # 避免平方数的约数重复累加
                total += pair
    return total == n

print(check_perfect_number(28))  # 输出True

如果你想更精准地获取整数平方根(避免浮点数精度问题),可以用Python 3.8+新增的math.isqrt()函数,它直接返回n的整数平方根(向下取整),比如math.isqrt(28)直接得到5,比int(math.sqrt(n))更可靠。

内容的提问来源于stack exchange,提问作者Isah Rop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 22:03:21