试图分解

时间:2013-09-14 21:27:40

标签: python python-3.x

这试图分解,我已经以这种方式制作代码,因为我打算更改某些功能以允许更多功能,但我想知道的是为什么我的xneg和xpos的结果都是0。

import math
sqrt = math.sqrt
equation = input("Enter the equation in the form x^2 + 5x + 6 :  ")
x2coe = 0
xcoe = 0
ecoe = 0
counter = -1
rint = ''

for each in range(len(equation)+1):
    if equation[each] == 'x':
        break
    x2coe = int(equation[each])
    counter = counter + 1

for each in range(len(equation)):
    if equation[each] == 'x':
        break
    xcoe = int(equation[counter + 5:counter + 6])

ecoe = int(equation[len(equation) - 1])

if x2coe == 0:
        x2coe = 1
if xcoe == 0:
        xcoe = 1

xpos = (-xcoe+sqrt((xcoe**2)-4*(x2coe*ecoe)))/(2*x2coe)
xneg = (-xcoe-sqrt((xcoe**2)-4*(x2coe*ecoe)))/(2*x2coe)

print("Possible Solutions")
print("-----------------------------------------------")
print("X = {0}".format(xpos))
print("X = {0}".format(xneg))
print("-----------------------------------------------")

2 个答案:

答案 0 :(得分:3)

这是因为当你到达xpos和xneg的计算时,你的x2coe和xcoe变量都是0。除了看起来像另一个问题之外,你会得到零除。 xpos& xneg表达式看起来像二次方程式,但是你除以2然后乘以x2coe。乘法和除法具有相同的优先级和从左到右的组,因此您需要使用以下之一:

xpos = (-xcoe+sqrt((xcoe**2)-4*(x2coe*ecoe)))/(2*x2coe) # one way to fix
xneg = (-xcoe-sqrt((xcoe**2)-4*(x2coe*ecoe)))/2/x2coe # another, slower way

我建议您首先调试程序的“业务”逻辑,然后将三个系数输入为元组或列表。

x2coe, xcoe, ecoe = eval(input("Enter coefficients of ax^2+bx+c as a,b,c: "))

当您的保理代码给出您想要的结果时,请返回并输入一个花哨的输入处理程序。

提示:import re。正则表达式是这种简单解析的好工具。 (如果你想在某天处理括号/括号/括号,你需要更高级的东西。)首先看一下http://docs.python.org/3.3/howto/regex.html的操作方法文档,并在{{3 }}

答案 1 :(得分:2)

问题可能是您认为每个系数应该是多长时间的硬编码:1位数。您应该使用另一个使其更灵活的功能。任何系数都可以为空白,在这种情况下,A或B应假定为1,C应假定为0.

希望这会有所帮助:

p = re.compile('\s*(\d*)\s*x\^2\s*\+\s*(\d*)\s*x\s*\+\s*(\d*)\s*')
A, B, C = p.match(equation).group(1, 2, 3)
print(A, B, C)

\s*的所有实例都允许输入的灵活性,因此空格不会杀死你。