Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 素因子分解代码生成具有特定数字的索引器 问题_Python_Python 3.x_Math_Prime Factoring - Fatal编程技术网

Python 素因子分解代码生成具有特定数字的索引器 问题

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,不管数字是什么)。

当输入32,并选择其他数字时,给出以下错误:

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):