Python,完了?

2 投票
2 回答
1064 浏览
提问于 2025-04-17 05:05

好的,我终于开始在Python中学习数学了,结果发现其实并没有我想象中的那么难(我不懂微积分或三角函数,只会一些基础的代数)。

我正在尝试从零开始写一个程序,用来分解二次方程。到目前为止,我写的代码是这样的(如果写得不好请见谅):

def factor(arg):    
    o = arg
    n = o
    x = 2
    factors = [o]

    while abs(o) >= x:
        if (o) % x == 0:
            n = o / x
            factors.append(n)
            x += 1
        else:
            x += 1

    return factors

A = int(raw_input("What is A in your quadratic equation?   A = "))
B = int(raw_input("What is B in your quadratic equation?   B = "))
C = int(raw_input("What is C in your quadratic equation?   C = "))

Br = abs(B) + abs(A)            # Range of B
Bpf = range (-Br, Br + 1)       # Possible factors of B
ACpf = factor(A * C)            # Possible factors of (A * C)

for i in ABpf:
    ACpf.append(-i) 

cf = []                          # Common factors

for i in Bpf:
    for j in ACpf:
        if i == j:
            cf.append(i)

print cf

我在终端运行了这个脚本,它让我输入A、B和C的值,然后大约卡了三十秒。等它恢复后,下面显示了我输入的内容,并且说“被杀掉了”。

有没有人知道这是为什么呢?我很感激任何的回答或建议。

2 个回答

2

看起来问题出在这些代码行:

ACpf = factor(A * C)            # Possible factors of (A * C)

for i in ABpf:
    ACpf.append(-i) 

试试这个:

ACpf = factor(A * C)            # Possible factors of (A * C)

for i in ACpf[:]:               # Loop over a copy of ACpf
    ACpf.append(-i) 

这个 [:] 的写法是用来复制列表的。这样可以确保你在遍历列表的时候,不会改变它的内容(比如增加元素)。

另外,这里对 factor() 函数的代码做了一些简化:

def factor(arg):
    o = arg
    factors = [o]

    for x in range(2, o+1):
        if o % x == 0:
            n = o // x
            factors.append(n)

    return factors
2

把你的代码稍微改成这样:

def factor(arg):    
    o = arg
    n = o
    x = 2
    factors = [o]

    while abs(o) >= x:
    if (o) % x == 0:
        n = o / x
        factors.append(n)
        x += 1
    else:
        x += 1

    return factors

A = int(raw_input("What is A in your quadratic equation?   A = "))
B = int(raw_input("What is B in your quadratic equation?   B = "))
C = int(raw_input("What is C in your quadratic equation?   C = "))

Br = abs(B) + abs(A)            # Range of B
Bpf = range (-Br, Br + 1)       # Possible factors of B
ABpf = factor(A * C)            # Possible factors of (A * C)
ACpf = []
for i in ABpf:
    ACpf.append(i)
    ACpf.append(-1*i) 

cf = []                          # Common factors

for i in Bpf:
    for j in ACpf:
    if i == j:
        cf.append(i)

print cf

现在试着运行一下。你应该能看到结果。

撰写回答