python 3中的平方因子分解?

时间:2017-01-29 20:58:39

标签: python python-3.x

注意 - 如果您想要更新的代码,请转到编辑内容,如果您想查看原始问题,请查看此处。但是,我已对代码进行了编辑,因此此代码块中的错误可能已过时。

作为一名自学成才的Python 3程序员,我一直致力于简化激进表达的方法。然而,程序的一部分不起作用的是平方因子分解。我有一个检测平方数的函数,工作正常。不起作用的功能如下 -

    def sqfactorslist(num):
        factors = []
        counter = num // 2 + 1

        while counter > 0:

            if counter == 1:
                factors.append(num) #if no square ints other than 1 square into num, append and finish.

            while is_square(counter) == True and counter != 1: #If counter is a valid square integer, append it's square and subtract it from num. 

                if (counter ** 2) >= num:
                    factors.append(counter ** 2)
                    num -= counter ** 2

                else: #Else, continue with a program. 
                    break

            if counter > 0:
                counter -= 1 #If counter more than 0, subtract 1 from it

            else:
                break #If number is equal to or less than 0, break

        return factors #If the input is 32, this should return 16 and 2.

除了无限循环之外,它不会返回任何内容。谁知道什么是错的?

编辑1 - 我已经更改了程序以便它运行,但现在我有一个陌生人问题:如果我输入一个正方形数字作为num,例如16,我得到的数字大于输入,e.x。 81,在退货清单中。我没有得到非方数的返回元素。 为了使它运行,我在第二个while循环结束后缩进了第一个if语句。

编辑2 - 我再次更改了程序,但我想出了另一个与上面类似的问题。在消除了另一个错误之后,我在第二个while循环中找到了已经显示为正方形的数字,程序现在有一个新问题 - 如果我使用非方形整数,它会返回一个空列表,如果我使用了方形整数,如16,它给了我一个无限循环。目前的代码如下所示 -

def findsqfactors(num):
    factors = []
    counter = num // 2 + 1

    while counter > 0:

        if counter == 1:
            factors.append(num) #If no square ints other than 1 square into num, append then finish. 

        while is_square(counter) == True and counter != 1: #

            if counter >= num:
                factors.append(counter) 
                num -= counter


            else:
                break


            if counter > 0:
                counter -= 1
        else:
            break

    return factors

0 个答案:

没有答案