计算器BODMAS逻辑开发:括号配对字典键值格式异常求助
问题原因与修复方案
你代码里的核心错误是用了集合字面量而非字典字面量:
- 你写的
{"ob_"+str(ob),index}是创建集合(元素间用逗号分隔),集合是无序的元素集合,所以会出现{0, 'ob_1'}这种键值顺序混乱的结果。 - 而你需要的键值对结构是字典,必须用冒号
:分隔键和值,比如{"ob_"+str(ob): index}。
另外注意初始的ob和cb要从1开始,才能匹配你预期的ob_1、cb_1命名格式。
修正后的代码
b_pairs = [] ob = 1 cb = 1 index = 0 expression_list = ['(', '1', '+', '(', '1', '+', '1', ')', ')'] for term in expression_list: if term == '(': b_pairs.append({"ob_"+str(ob): index}) ob += 1 elif term == ')': b_pairs.append({"cb_"+str(cb): index}) cb += 1 index += 1 print(b_pairs) # 输出结果完全符合预期: [{'ob_1': 0}, {'ob_2': 3}, {'cb_1': 7}, {'cb_2': 8}]
补充说明
Python 3.7及以上版本的字典会保留插入顺序,所以修正后不仅键值关系正确,顺序也会和你预期的一致。
内容的提问来源于stack exchange,提问作者Euryd Africa
相关产品推荐
相关产品推荐

