我目前正在尝试做二次方程求解器。我在网上搜索了人们如何使用他们的版本,但所有这些都暗示用户输入了系数,尽管这是最简单的方法,但我真的讨厌它。
我希望用户引入整个等式,让程序知道哪些是系数,并计算解。我发现了正则表达式的概念,并自动发现了re模块。
我理解如何实现二次公式来解决问题,但问题是我不知道应该使用哪个函数,以及如何从输入中获取系数。
我希望正则表达式如下:
\d(\sx\s\(\^)\s2/x\^2)(\s\+\s)\dbx(\s\+\s)\d = 0
要查找此系数:
ax^2 + bx + c = 0
我知道正则表达式很糟糕,因为我昨天才开始理解它,所以你也可以告诉我如何改进它。
让我们澄清一下我到底想要什么。
答案 0 :(得分:4)
假设:系数是数字,变量是x
:
(-?\d+)x\^2 ([+-]\d+)x ([+-]\d+)
现在,对于-3x^2 +7x -44
,您的第一个小组匹配将为-3
,第二个小组将为+7
,第三个小组将为-44
。
()
)定义一个组?
表示所遵循的内容可以匹配一次或零次[+-]
定义了一次匹配+
或-
的字符集<小时/> 编辑:开始结束解决方案(请原谅我生锈的python技巧,但我希望你知道如何使用正则表达式):
import re
quadratic_equation_matcher = re.compile(r'(-?\d+)x\^2 ([+-]\d+)x ([+-]\d+)')
quadratic_equation = '-3x^2 +7x -44'
matches = quadratic_equation_matcher.match(quadratic_equation)
a = int(matches.group(1))
b = int(matches.group(2))
c = int(matches.group(3))
d = b**2 - 4*a*b
x1 = (-b + d**0.5)/(2*a)
x2 = (-b - d**0.5)/(2*a)
x1 # => -0.75542709911179939
x2 # => 3.0887604324451328
<小时/> 请注意,您可以使正则表达式更宽松,如下所示:
(-? ?\d+) ?x\^2 ([+-] ?\d+) ?x ([+-] ?\d+)
答案 1 :(得分:0)
我建议首先清理输入a。摆脱所有的空白区域,或至少空间。检查是否有相同的符号,看一边是否有0或另一边。如果有,你可以删除它。如果不是,你必须决定你想要多么聪明。
让它接近你想要处理的格式,换句话说。然后你可以检查他们是否输入了有效的re。
您还需要决定是否可以处理随机条款和x以外字母的顺序。无论你是想要^还是**还是只想要x2。
您可能希望单独获取每个术语(+或 - 之间的所有术语)并确定它是什么类型的术语。
换句话说,在表达之前还有很多事要做。
你顺便见过SymPy