1

我正在尝试编写一个程序来考虑任何形式为 ax^2+bx+c 的三项式,但我有点卡住了。我有 4 个 for 循环序列,如下所示:

print "Factoring...\n"

for i in range(low_value, high_value):
    for j in range(low_value, high_value):
        for k in range(low_value, high_value):
            for l in range(low_value, high_value):
                print "testing\n"
                if i*k==a & j*l==c & (i*l)+(j*k)==b:
                    print "Your factored Equation is: (" + i + "x + " + j + ")(" + k + "x + " + l + ")"
                else:
                    print "No solution found.\n"
print "testing...\n"

无论如何,我知道代码远非最佳,但 for 循环内没有任何内容正在执行。显示最后的“测试...”消息,但在此之前没有打印任何内容(我的意思是“测试”、“您的因式方程是:”或“未找到解决方案”)。Python中是否存在某种限制,我不能一次使用这么多for循环?我的语法有什么问题,我只是看不到吗?任何帮助将不胜感激 :)

4

3 回答 3

3

您必须使用and逻辑连接,而不是“&”符号。试试这个:

...
if (i*k==a) and (j*l==c) and ((i*l+j*k)==b):
...
于 2012-08-21T17:44:47.213 回答
2

除了所述的问题之外,代码还有一些问题::-)

  • 给定 -1000 的低值和 1000 的高值,“测试”和“未找到解决方案”将被打印约 16 万亿次。
  • 找到解决方案后,执行不会停止。
  • printas语句将代码限制为Python2,建议改用该print(stuff)函数。
  • print自动插入换行符。\n不需要。

这是一个建议的重写:

def factor(a, b, c):
    low_value = min(a, b, c)
    high_value = max(a, b, c)
    for i in range(low_value, high_value):
        for j in range(low_value, high_value):
            for k in range(low_value, high_value):
                if i*k != a:
                    # check this clause earlier to improve speed a bit
                    continue
                for l in range(low_value, high_value):
                    if j*l != c:
                        continue
                    if (i*l) + (j*k) != b:
                        continue
                    return (i, j, k, l)
    return None

print("Factoring...")
solution = factor(1, 2, 4)
if solution:
    (i, j, k, l) = solution
    print("Your factored Equation is: (" + i + "x + " + j + ")" +
          "(" + k + "x + " + l + ")")
else:
    print("No solution can be found.")
于 2012-08-21T17:55:09.730 回答
0

为了使它更pythonic:

from itertools import product

for i, j, k, l in product(range(low, high), repeat=4):
    print i, j, k, l
于 2012-08-21T17:59:03.287 回答