Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.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
从Java代码转换的Python错误_Java_Python_Algorithm_Recursion_Time Complexity - Fatal编程技术网

从Java代码转换的Python错误

从Java代码转换的Python错误,java,python,algorithm,recursion,time-complexity,Java,Python,Algorithm,Recursion,Time Complexity,我正在努力学习python。因此,我有一个下面的Java代码来打印输入的数字的因子列表。我试图在python中实现相同的逻辑。但是有一些错误。java代码如下所示: public final class PrintFactors { private PrintFactors() {} public static void printFactors(int number) { if (number <= 0) throw new IllegalArgumentException(

我正在努力学习python。因此,我有一个下面的Java代码来打印输入的数字的因子列表。我试图在python中实现相同的逻辑。但是有一些错误。java代码如下所示:

public final class PrintFactors {

private PrintFactors() {}

public static void printFactors(int number) {
    if (number <= 0) throw new IllegalArgumentException("The number should be greater than 0.");
    printFactorsList(number, number + "*" + 1 + "\n", number);
}

private static void printFactorsList(int dividend, String factorString, int prevDivisor) {

    for (int divisor = dividend - 1; divisor >= 2; divisor--) {

        if (dividend % divisor != 0)
            continue;

        if (divisor > prevDivisor)
            continue;

        int quotient = dividend / divisor;


        if (quotient <= divisor) {
            if (quotient <= prevDivisor) {
                System.out.println(factorString + divisor + "*" + quotient);
            }
        }
        printFactorsList(quotient, factorString + divisor + "*", divisor);
    }
}

public static void main(String[] args) {
    printFactors(12);
    System.out.println();
    printFactors(32);
}
 $ java -cp . PrintFactors 32
def print_factors_list(dividend, factorstring, predivisor):

divisor = dividend - 1
for i in range(int(divisor), 2, -1 ):
    if dividend % i != 0:
        continue

    if divisor > predivisor:
        continue

    quotient = dividend / divisor


    if quotient <= divisor:
        if quotient <= predivisor:
            print factorstring + str(divisor) + "*" + str(quotient)


print_factors_list(quotient, str(factorstring) + str(divisor) + "*", divisor)


def print_factors(x):
if (x < 0):
    print "Enter a positive interger"
else:
    print_factors_list(x, str(x) + "*" + str(1) + "\n", x )

num = int(input("Enter a number: "))
print_factors(num)
32*1

16*2

8*4

8*2*2

4*4*2

4*2*2*2

2*2*2*2*2

我的python代码如下所示:

public final class PrintFactors {

private PrintFactors() {}

public static void printFactors(int number) {
    if (number <= 0) throw new IllegalArgumentException("The number should be greater than 0.");
    printFactorsList(number, number + "*" + 1 + "\n", number);
}

private static void printFactorsList(int dividend, String factorString, int prevDivisor) {

    for (int divisor = dividend - 1; divisor >= 2; divisor--) {

        if (dividend % divisor != 0)
            continue;

        if (divisor > prevDivisor)
            continue;

        int quotient = dividend / divisor;


        if (quotient <= divisor) {
            if (quotient <= prevDivisor) {
                System.out.println(factorString + divisor + "*" + quotient);
            }
        }
        printFactorsList(quotient, factorString + divisor + "*", divisor);
    }
}

public static void main(String[] args) {
    printFactors(12);
    System.out.println();
    printFactors(32);
}
 $ java -cp . PrintFactors 32
def print_factors_list(dividend, factorstring, predivisor):

divisor = dividend - 1
for i in range(int(divisor), 2, -1 ):
    if dividend % i != 0:
        continue

    if divisor > predivisor:
        continue

    quotient = dividend / divisor


    if quotient <= divisor:
        if quotient <= predivisor:
            print factorstring + str(divisor) + "*" + str(quotient)


print_factors_list(quotient, str(factorstring) + str(divisor) + "*", divisor)


def print_factors(x):
if (x < 0):
    print "Enter a positive interger"
else:
    print_factors_list(x, str(x) + "*" + str(1) + "\n", x )

num = int(input("Enter a number: "))
print_factors(num)

请有人帮我解决这个问题,我哪里做错了。当我将这些步骤作为Java代码实现时,是否存在逻辑错误?谢谢

Python对缩进敏感。您的
print\u factors\u list
递归调用位于最外层缩进级别,因此它不在
for
循环的范围内。这与Java代码的行为不同。

请修复您的错误indentation@MattDMo仍然没有给出期望的输出?有什么建议吗有什么改变的建议吗?我试着把它放在循环中。它没有给我想要的输出