如何使用python从json返回算术表达式的结果?

如何使用python从json返回算术表达式的结果?,python,json,Python,Json,我只想写一个Python程序,它可以接受JSON格式的算术表达式,解析和计算答案 我使用VS代码来编写Python代码,最后我导入了JSON文件,不知道该如何启动任务 我所期望的是Python可以返回对编码表达式求值的整数。有人能告诉我怎么做吗?如果json格式保持不变: def operation(d): if isinstance(d,dict): s = 0 addition = d.get('root').get('plus')

我只想写一个Python程序,它可以接受JSON格式的算术表达式,解析和计算答案

我使用VS代码来编写Python代码,最后我导入了JSON文件,不知道该如何启动任务


我所期望的是Python可以返回对编码表达式求值的整数。有人能告诉我怎么做吗?

如果json格式保持不变:

def operation(d):
    if isinstance(d,dict):
        s = 0
        addition = d.get('root').get('plus')

        #implement other operation ... substraction = d.get('root').get('minus')

        for i in addition:
            s+=int(i["int"])
        return s


result = operation(z)
基本上你的字典z是这样的:

{'root': {'description': 'This expression evaluates to 18. It shows how plus should take 2 or more arguments', 'plus': [{'int': 4}, {'int': 5}, {'int': 4}, {'int': 5}]}}
然后,您只需摆弄它,即可获得所需的键或值:

z.keys()
#dict_keys(['root'])
 z.values()
#dict_values([{'description': 'This expression evaluates to 18. It shows how plus should take 2 or more arguments', 'plus': [{'int': 4}, {'int': 5}, {'int': 4}, {'int': 5}]}]

强烈建议查看字典类型的文档,在这里您可以找到所有方法和循环技术:

这就是我们如何实现一个函数,该函数在JSON格式的算术运算(加号、减号和时间)后返回结果

  • 类型可以是任何类型-int、float、long等
  • 支持的操作有
  • 减号
    时间
    应该正好有2个值,否则会引发
    值错误
    异常
  • 减号将返回两个数字之间的绝对差值
def操作():
val=0
将open(“expression1.json”)作为复杂的_数据:
数据=复杂数据。读取()
z=json.loads(数据)
数据=z['root']
对于op in数据:
如果op=='description':
通过
elif op=='plus':
返回和(数据中元素[k]的元素[op]中元素k的元素)
elif op==‘减’或op==‘次’:
如果len(数据[op])!=2:
raise VALUERROR('如果操作为负或倍,则需要2个元素')
nums=[element[k]表示数据中的元素[op]表示元素中的k]
如果op==‘减’:
返回abs(nums[0]-nums[1])
其他:
返回nums[0]*nums[1]
其他:
raise VALUERROR('无效操作')

希望这有帮助

您应该首先查找需要处理的根/第一个运算符。是否要计算任何类似格式的任意数学表达式?如果是这样,我建议你谷歌“评估反向波兰符号”。这是一些计算器中使用的数学表达式格式。您的示例表达式将写成
52*83-+
。如果你学会了如何计算这样的表达式,那么在JSON中计算表达式就很简单了。如果我有一个根,它是加号,那么我有两个子,一个是乘以2 int,另一个是分钟乘以2 int,怎么样?我如何实现它?我是否设置了times=d.get('child').get('times')?我在else中得到了错误:return nums[0]*nums[1],表示意外的标记else和return上意外的缩进。哦,我想我明白了,因为在else之前有空格谢谢,我想知道,如果我有一个根,它是加号,那么我有两个孩子,一个是乘以2 int,另一个孩子是分钟乘以2 int?我仍然使用相同的东西来实现吗?不确定,我完全理解了,你能取样JSON格式吗?我更新了上面的问题,如果你需要另一个JSON格式的例子,你必须更新上面的函数来重复数据[根],并递归地考虑所有的运算(加、减和倍)!