这是我的挑战:
编写一个程序来找出一个数字的质因数。示例:56 的质因数 - 2, 2, 2, 7
这是我的代码:
num = 64
def factors (n):
while n % 2 == 0:
print(2)
n = n/2
for i in range (3,n):
if n % i == 0:
print(i)
n = n/i
if n > 2:
print(n)
factors (num)
与其使用,不如使用
\
。是浮点除法或简称
division
\
是整数除法或称为floor division
。 参考
3 / 2 = 1.5
3 // 2 = 1
因此,您的代码如下所示:
num = 64
def factors (n):
while n % 2 == 0:
print(2)
n = n//2
for i in range (3,n):
if n % i == 0:
print(i)
n = n/i
if n > 2:
print(n)
factors (num)
你得到了这个错误,因为范围对象将整数作为参数,使用n = n/2
会将 n 转换为浮点数,所以正如 Thierry Lathuille 所说,将n = n/2
替换为n = n//2
正如其他人所提到的,整数除法很重要,但最重要的是您的算法无法正确检测 2>多个因子。
def factors (n):
for i in range (2, n):
while (n % i == 0):
print(i)
n //= i
尝试以下操作(即,将"/"替换为"//"以获得整数而不是浮点数)
num = 64
def factors(n):
while n % 2 == 0:
print(2)
n = n // 2 # -------> Do the integer Division.
for i in range(3, n):
if n % i == 0:
print(i)
n = n / i
if n > 2:
print(n)
factors(num)