我在学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代码的行为不同。你知道吗相关问题 更多 >
编程相关推荐