这试图分解,我已经以这种方式制作代码,因为我打算更改某些功能以允许更多功能,但我想知道的是为什么我的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("-----------------------------------------------")
答案 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*
的所有实例都允许输入的灵活性,因此空格不会杀死你。