Python 素因子分解代码生成具有特定数字的索引器 问题
当输入32,并选择其他数字时,给出以下错误:Python 素因子分解代码生成具有特定数字的索引器 问题,python,python-3.x,math,prime-factoring,Python,Python 3.x,Math,Prime Factoring,当输入32,并选择其他数字时,给出以下错误: Traceback (most recent call last): File "python", line 43, in <module> IndexError: list assignment index out of range 代码解释 定义了两个函数。一个检查一个数字是否为素数,另一个生成一个数字的因子列表。首先,程序接收用户输入的号码。然后,它测试它是否为素数,然后打印素数分解(1,不管数字是什么)。
Traceback (most recent call last):
File "python", line 43, in <module>
IndexError: list assignment index out of range
代码解释
定义了两个函数。一个检查一个数字是否为素数,另一个生成一个数字的因子列表。首先,程序接收用户输入的号码。然后,它测试它是否为素数,然后打印素数分解(1,不管数字是什么)。若不是,它基本上会找到所有的素数,它们都是数的因子,也是素数。然后程序将它们相乘,如果它们小于输入的原始数字,它会找到差异的(素数)因子,并将它们附加到素数列表中,该列表在最后打印
我理解这个程序可能效率低下,但我理解它是如何编写的。给出错误的行用该数字的因子列表替换一个数字。使用递归函数更容易解决此问题。递归函数调用它们自己。所以,基本上,一旦我们找到一个因子,我们检查这个数字是否可以进一步分解,如果可以,我们将它附加到列表中并继续分解,如果不能分解,那么我们只需追加并返回
def factor(numberToFactor, arr=list()):
for i in range(2, numberToFactor // 2 + 1):
if numberToFactor % i == 0:
return factor(numberToFactor/i,arr + [i])
return list(set(arr + [numberToFactor]))
print(factor(32))
使用递归函数更容易解决此问题。递归函数调用它们自己。所以,基本上,一旦我们找到一个因子,我们检查这个数字是否可以进一步分解,如果可以,我们将它附加到列表中并继续分解,如果不能分解,那么我们只需追加并返回
def factor(numberToFactor, arr=list()):
for i in range(2, numberToFactor // 2 + 1):
if numberToFactor % i == 0:
return factor(numberToFactor/i,arr + [i])
return list(set(arr + [numberToFactor]))
print(factor(32))
我不打算检查你的代码。这比需要的复杂得多 这是一个简单的整数分解函数。这不是对整数进行因子运算的最佳方法,但只要n不是太大,比如小于12位,它就简单且相当有效
def factors(n):
f, fs = 2, []
while f * f <= n:
if n % f == 0:
fs.append(f)
n = n / f
else:
f = f + 1
fs.append(n)
return fs
def系数(n):
f、 fs=2,[]
虽然f*f我不打算检查你的代码。这比需要的复杂得多
这是一个简单的整数分解函数。这不是对整数进行因子运算的最佳方法,但只要n不是太大,比如小于12位,它就简单且相当有效
def factors(n):
f, fs = 2, []
while f * f <= n:
if n % f == 0:
fs.append(f)
n = n / f
else:
f = f + 1
fs.append(n)
return fs
def系数(n):
f、 fs=2,[]
当调用factorCheck(1)
时会出现问题,因为range(1,1)
为空,因此它永远不会返回(因此默认为None
),extrafactors中i的循环也有问题。循环中的一些代码的作用类似于i
应该是列表元素,而代码的其他部分的作用类似于i
应该是列表索引。您对factorCheck
的缩进似乎不正确,您在第一次迭代中返回。您还在extrafactors中迭代i的,同时从中删除不好的内容。添加print
语句以检查发生了什么。如何处理因子多次出现的情况,如50=5*5*2?注意如果isPrime(n)=True:
可以简化为如果isPrime(n):
。调用因子检查(1)
时会出现问题,因为范围(1,1)
为空,因此它永远不会返回(因此默认为None
),extrafactors中i的循环也有问题。循环中的一些代码的作用类似于i
应该是列表元素,而代码的其他部分的作用类似于i
应该是列表索引。您对factorCheck
的缩进似乎不正确,您在第一次迭代中返回。您还在extrafactors中迭代i的,同时从中删除不好的内容。添加print
语句以检查发生了什么。您如何处理因子多次出现的情况,如50=5*5*2?注意如果isPrime(n)=True:
可以简化为如果isPrime(n):
。