使用运算符和整数列表创建一个简单的函数

时间:2016-05-24 13:04:40

标签: python list operators

编辑:当我说标题中的功能时,我指的是数学函数而不是编程功能。很抱歉造成任何混乱。

我试图从随机生成的整数和运算符创建函数。我目前采取的方法如下:

步骤1:生成运算符和整数的随机列表作为列表。

步骤2:将一组规则应用于列表,这样我总是得到一个整数,运算符,整数,运算符......等列表。

步骤3:将操作应用于整数后,使用修改后的列表创建单个答案。

例如:

第1步结果:[1,2,+, - ,2,/,3,8,*]

第2步结果:[1,+,2, - ,2,/,3,*,8] - 请注意,我使用operator命令在列表中生成运算符。

步骤3结果:输出是从左到右读取功能而不是应用BODMAS,因此在这种情况下我希望输出为8/3(输出不具备是一个整数)。

所以我的问题是:有什么功能(以及在什么模块中)可以帮助我组合上面定义的列表。或者我应该以不同的方式组合列表以允许我使用特定的函数吗?

我正在考虑改变我首先生成列表的方式,以便我即时进行排序,但我认为我最终会处于相同的情况,我不知道如何在完成排序过程后组合整数和运算符。

我觉得这里有一个简单的解决方案,我不必要地把自己绑在一起!

非常感谢任何帮助,

的Dom

3 个答案:

答案 0 :(得分:0)

为什么不为整数创建一个列表,为运算符创建一个列表,并逐步从每个列表中追加它们?

编辑:你可以先将你的整数转换为字符串,然后使用string =''创建一个字符串。之后你可以只用eval(字符串)

edit2:您还可以看一下Sympy模块,它允许您在python中使用符号数学

答案 1 :(得分:0)

我不知道它是否更容易,但优雅的方法是使用二叉树,其中树叶是操作数,其他节点是运算符。你可以通过做这样的事情直接生成它(没有列表)(快速和肮脏,可能是错误的,但你明白了):

def generate(root, end_depth, depth):
    root = random_operator()
    right_child = random_operand()
    if depth == end_depth:
        left_child = random_operand()
    else:
        generate(left_child, end_depth, depth + 1)

你的例子是这样的:

         *
       /  \ 
     div   8
     / \
    -   3
   / \
  +   2
 / \
1   2

它是“向后”的,因为当你评估时,你需要从底部开始,知道2个操作数。

答案 2 :(得分:0)

所以,对于那些感兴趣的人。我通过使用eval()函数实现了我的目标。虽然不是最强大的,但在我写的特定循环中,输入是受到严密控制的,所以我现在对这种方法很满意。