Python:以正常的方式返回列表中的每个元素以进行整数分解函数[重复]

问题描述 投票:0回答:1

我是一名大学生,在开学前练习一些编码,我制作了一个 python 函数,该函数应该给出一个数字(不包括 1)的质因数分解。它引用了我用来检查数字是否为质数的函数,因此我也包含了该函数,尽管它对问题来说并不重要。

#Prime number checker

import math 
def is_prime(n):
    assert n >= 2
    sqrt_n = math.ceil(math.sqrt(n))
    last_digit = n % 10
    #First, incorporate special cases
    if last_digit == 0 or last_digit == 2 or last_digit == 4 or last_digit == 6 or last_digit == 8:
        return False
    #if the number is divisible by any of the prime numbers in this range, then it is not prime
    if n > 5 and last_digit == 5:
        return False
    appropriate_list = [i for i in range(2, sqrt_n + 1)]
    if any(n % i == 0 for i in appropriate_list):
        return False
    return True
    
#The integer factorization function
def integer_factorization(n):
    factors_list = []
    if is_prime(n) == True:
        output_list = []
        if factors_list: 
            output_list = [x for i in factors_list for x in i]
            return output_list, n
        else:
            return n
    else:
        divisors_list = [2, 3, 5, 7]
        for i in divisors_list:
            if n % i == 0:
                factors_list.append(i)
                return integer_factorization(n // i), factors_list

我的问题: 我希望输出看起来正常,例如让integer_factorization(20) 的输出以任意顺序为5、2、2。相反,输出看起来像列表中的一系列列表。例如。 integer_factorization(20) 的结果是:((5, [2]), [2])

我正在 Jupyter 笔记本上运行这些程序。

有人可以帮忙吗?

python return
1个回答
1
投票

您的问题:

return output_list, n
这会返回一个元组、一个列表和一个整数,例如([2,3], 2)

这里有同样的事情

return integer_factorization(n // i), factors_list
这会返回两个列表的元组。

试试这个:

#Prime number checker

import math
def is_prime(n):
    assert n >= 2
    sqrt_n = math.ceil(math.sqrt(n))
    last_digit = n % 10
    #First, incorporate special cases
    if last_digit == 0 or last_digit == 2 or last_digit == 4 or last_digit == 6 or last_digit == 8:
        return False
    #if the number is divisible by any of the prime numbers in this range, then it is not prime
    if n > 5 and last_digit == 5:
        return False
    appropriate_list = [i for i in range(2, sqrt_n + 1)]
    if any(n % i == 0 for i in appropriate_list):
        return False
    return True

#The integer factorization function
def integer_factorization(n):
    factors_list = []
    if is_prime(n) == True:
        output_list = []
        if factors_list:
            output_list = [x for i in factors_list for x in i]
            output_list.append(n)
            return output_list
        else:
            return [n]
    else:
        divisors_list = [2, 3, 5, 7]
        for i in divisors_list:
            if n % i == 0:
                factors_list.append(i)
                new_factors = integer_factorization(n // i)
                new_factors.extend(factors_list)
                return new_factors
© www.soinside.com 2019 - 2024. All rights reserved.