Python3算术运算符优先级处理:UDP单计算请求实现咨询
实现思路
1. 优先处理高优先级的乘除运算
- 循环遍历拆分后的表达式列表,从左到右定位第一个
*或/运算符 - 提取该运算符的前一个元素作为
num1、运算符本身作为op、后一个元素作为num2,调用sendRecv(num1, op, num2)获取服务器返回的计算结果 - 将原列表中的
num1、op、num2三个元素替换为返回的中间结果,生成新的表达式列表 - 重复上述流程,直到列表中不再包含
*和/运算符
示例流程(基于你的输入列表):
初始列表:['1', '-', '2.1', '+', '3.6', '*', '5', '+', '10', '/', '2']
- 找到第一个
*,调用sendRecv("3.6", "*", "5")得到18,替换后列表变为:['1', '-', '2.1', '+', '18', '+', '10', '/', '2'] - 找到第一个
/,调用sendRecv("10", "/", "2")得到5,替换后列表变为:['1', '-', '2.1', '+', '18', '+', '5']
2. 处理低优先级的加减运算
- 此时列表仅包含数字和
+、-运算符,继续从左到右遍历,每次定位第一个+或-运算符 - 同样提取
num1、op、num2调用sendRecv获取结果,用结果替换三个元素生成新列表 - 重复操作,直到列表中仅剩一个元素,该元素即为最终计算结果
接上面的示例:
- 找到第一个
-,调用sendRecv("1", "-", "2.1")得到-1.1,列表变为:['-1.1', '+', '18', '+', '5'] - 找到第一个
+,调用sendRecv("-1.1", "+", "18")得到16.9,列表变为:['16.9', '+', '5'] - 最后调用
sendRecv("16.9", "+", "5")得到21.9,列表仅剩['21.9'],即为最终结果
3. 核心细节注意
- 每次替换元素后,列表长度会减少2,遍历过程中需动态调整索引,避免越界(例如处理完一个运算符后,重新从列表头部开始遍历,而非继续当前索引)
- 确保
sendRecv支持字符串格式的数字输入,若要求数值类型,需提前将列表中的字符串元素转换为对应数值(如float、int) - 减法和除法严格遵循左到右的运算顺序,直接按列表中的顺序提取参数即可,无需额外调整
内容的提问来源于stack exchange,提问作者mutyala mahesh
相关产品推荐
相关产品推荐

