尝试分解

2024-06-02 04:25:42 发布

您现在位置:Python中文网/ 问答频道 /正文

这试图分解,我已经这样做了代码,因为我打算改变一些功能,以允许更多的功能,但我想知道的是,为什么我的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("-----------------------------------------------")

Tags: in功能lenifcountersqrtinteach
2条回答

这是因为当计算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的how-to文档,还可以在http://docs.python.org/3.3/library/re.html的re-module文档中添加书签

问题可能是你在硬编码你认为每个系数应该是: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*的所有实例都是为了允许输入的灵活性,所以空间不会扼杀您。你知道吗

相关问题 更多 >