为什么在处理数字时该函数不能正常工作?

2024-10-01 07:41:16 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我想得到一个给定数字的结果。问题是,代码打印错误的消息,而且它也不能处理所有的数字。为什么呢

这是获取因素的部分:

thefactors = []
            d = 2
            while d*d <= number:
                while (number % d) == 0:
                    factors.append(d) 
                    number //= d
                d += 1
                break

            if number > 1:
                factors.append(number)
                print('The factors of {} are:'.format(number), thefactors)

发生了什么事,我该怎么解决


Tags: ofthe代码消息numberif错误数字
2条回答

我看到的问题是,你们都在检查d的平方是否小于nd*d <= nd**2 <= n),并且在发现因子时重新分配nn //= d)。这不包括不必要的break语句

以下是我所做的:

>>> def factorization(n):
        factors = []
        d = 2
        while d <= n:
            if n % d == 0:
                factors.append(d)
                n //= d
                d = 2
            else:
                d += 1
        return factors

>>> factorization(104)
[2, 2, 2, 13]
>>> factorization(9)
[3, 3]
>>> 

此方法隐式检查d**2是否小于或等于n,因为要满足while条件,n // d必须小于或等于d,因此d**2必须小于或等于n

要打印素因子分解,请执行以下操作:

>>> num = 104
>>> factors = factorization(num)
>>> print(f"The prime factors of {num} are {factors}")
The prime factors of 104 are [2, 2, 2, 13]
>>> print(f"The prime factors of {num} are {', '.join(factors)}")
The prime factors of 104 are 2, 2, 2, 13

存在多个问题:

  1. 修改原始编号(num)并打印修改后的值
  2. 在尝试除2以外的任何其他除数之前break
  3. 如果num > 1,则只需print返回结果

以下是一个工作实现:

# Back up original number for future use:
original_number = num
factors = []
d = 2
while d*d <= num:
    while (num % d) == 0:
        factors.append(d)
        num //= d
    d += 1
    # There shouldn't be a break here

if num > 1:
    factors.append(num)
    
# Fixed the indentation of the following line so that
# it is always printed, and print original_number
# instead of num as the latter has been modified.
print('The factors of {} are:'.format(original_number), factors)

相关问题 更多 >