【问题标题】:Python Search Algebra FunctionPython 搜索代数函数
【发布时间】:2010-11-10 02:45:49
【问题描述】:

我正在尝试创建一个搜索功能来处理代数问题。我想要 Wolfram Alpha 之类的东西,但我正在为它构建一个 python 框架。它应该能够计算出等号两边的多个变量和方程。我最近询问了该程序的验证器,因此我需要一个循环来遍历一堆数字并找出每个变量等于什么。我的问题是小数。我建议使用搜索功能。这是方程求解器:

def s_equation(a):
   left, right = a.split('=')
   return eval(left) == eval(right)

任何帮助都是有帮助的!

【问题讨论】:

  • 您可能想使用 SymPy 之类的库。
  • 这是一个非常有趣的话题,尤其是对于像你这样的年轻程序员。你真正想做的是创建一个“语法树”,它是代表数学表达式含义的对象树。您可以编写一个解析器来遍历字符串并逐个字符地“理解”它,同时构建树。然后它变得很有趣,因为你可以用树做一些很酷的事情,比如发现模式或评估表达式。你应该好好尝试一下,它会扩展你的思维!
  • 例如这些幻灯片。不要被希腊字符推迟! inf.ed.ac.uk/teaching/courses/ct/slides/Lecture5.pdf

标签: python function search algebra


【解决方案1】:

eval()s 不起作用,因为 left 和 right 是字符串,而不是表达式。此外,您必须进行大量验证才能使用户输入的内容成为有效的 Python 表达式。考虑一下您可能会得到的几个值:

# The typical person's notation for x-squared isn't valid Python
x^2 + x - 3
# 3x means 3 * x to us, but to python it means nothing
3x + 4
# Some people use % to represent division, but that's a modulo operator to Python
3 % 4x
# Python doesn't understand the distributive property
3(4 - x)
# People might use some functions in a way Python doesn't understand
cos x
# Square brackets are used synonymously with parentheses
x[(x^2 - 5)(x^3 - 5x)]

因此,简而言之,您需要某种引擎来将纯文本方程转换为有效的 Python 表达式。这不是一件容易的事,但肯定可以做到。

虽然您的项目非常雄心勃勃,但我认为这是使用 Python 的好方法!如果您想出一种将方程式作为字符串转换为有效 Python 的智能方法,您应该立即分享它,因为科学和数学社区中的很多人都可以使用它。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2019-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-27
相关资源
最近更新 更多