java - 从 Java 代码转换而来的 Python 错误

标签 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("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

32 * 1

16 * 2

8 * 4

8 * 2 * 2

4 * 4 * 2

4 * 2 * 2 * 2

2 * 2 * 2 * 2 * 2

我的python代码如下:

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)

我收到以下错误:

undefined: Error: local variable 'quotient' referenced before assignment

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

最佳答案

Python 对缩进敏感。您在最外层的缩进级别进行了 print_factors_list 递归调用,因此它在 for 循环之外。这是与您的 Java 代码不同的行为。

关于java - 从 Java 代码转换而来的 Python 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24644383/

相关文章:

algorithm - 没有给定模式的可能板数

用元素填充容器的算法,知道它们的垂直位置

java - 将 Hibernate 查询结果映射到对象

python - 使用多分支管道 Jenkinsfile 时构建环境中的 SSH key

python - Pandas 具有多索引的行式聚合

python - Python 作用域规则是否符合词法作用域的定义?

algorithm - maxheap 和在头部存储最大值的链表有什么区别?

java - 如何在 Apache 中禁用来自 mod_jk 代理应用程序服务器的某些响应 header 的压缩

java - 绕过 java.awt.Container.createHierarchyEvents 中的 IndexOutOfBoundsException

java - 单击按钮时如何使用 Action 监听器和其他东西来获取两个文本字段的值