我正在尝试收集一个数字的所有因数,但 isinstance 有问题

问题描述 投票:0回答:1
def factor(n):
    list_of_factors = []
    for number in range(1, n+1, 1):
        fraction = n / number
        if isinstance(fraction, int):
            list_of_factors.append(n)
            list_of_factors.append(-n)
    return list_of_factors

在这段代码中,我尝试收集并返回一个列表,其中包含特定输入的所有因素(正面和负面)。但是,我有一个问题,即使表达式

isinstance
是整数,
n / number
函数也不会返回 true。
isinstance
有什么我遗漏的吗?

我知道您可以采取更优化的路线。我目前正在添加到函数中,仅循环

n
的一半,如果
n / number
是整数,则返回
n
n / number
。我还可以添加其他任何内容来提高效率吗?

python math
1个回答
0
投票

假设

n
int
:

除法始终返回

float
。您可以将浮点数视为有理数,并且整数除以整数(根据定义)是有理数 (ℤ/ℤ ∈ ℝ),尽管浮点数不是任意精确的

要检查浮点数是否代表整数,可以使用

float.is_integer()
。然而,对于大数字,舍入是一个问题。

检查一个数字是否可被另一个数字整除的更好方法是使用 modulus:

if n % number == 0:

最后,您有一个拼写错误:您在要附加到列表的位置写了

n
而不是
number

所以:

def factor(n):
    list_of_factors = []
    for number in range(1, n+1, 1):
        if n % number == 0:
            list_of_factors.append(number)
            list_of_factors.append(-number)
    return list_of_factors

示例:

>>> factor(15)
[1, -1, 3, -3, 5, -5, 15, -15]
© www.soinside.com 2019 - 2024. All rights reserved.