Python,完了?
好的,我终于开始在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
现在试着运行一下。你应该能看到结果。