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
。我还可以添加其他任何内容来提高效率吗?
假设
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]