如何避免将项赋值给字符串?及括号计数重写公式代码求助
一、避免将项赋值给字符串的实用方法
平时写代码时确实容易不小心把非字符串的项误赋值成字符串,这里给你几个实用小技巧:
提前做类型检查:在赋值前用
isinstance()确认类型,从源头避免错误。比如你要维护一个数字列表,就先判断要添加的项是不是字符串:my_num_list = [] item = 123 if not isinstance(item, str): my_num_list.append(item) else: print("这个是字符串,不能加到数字列表里哦")用类型注解提前规避:给变量、函数加上类型提示,IDE会实时提醒你类型不匹配的问题,不用等到运行才报错:
from typing import List def calculate_total(numbers: List[int]) -> int: return sum(numbers) # 如果传入字符串列表,IDE直接标红提示 calculate_total(["1", "2"])封装赋值逻辑到函数:把容易出错的赋值操作打包成函数,集中做校验,避免重复代码:
def add_non_str_item(collection, item): if isinstance(item, str): raise ValueError("禁止添加字符串到这个集合!") collection.append(item) my_data = [] add_non_str_item(my_data, 456) # 正常执行 # add_non_str_item(my_data, "test") # 直接抛出错误提醒用异常处理兜底:万一不小心出现类型错误,用try-except捕获并处理,避免程序直接崩溃:
item = "oops" try: # 预期是数字运算,字符串会触发TypeError result = item * 2 except TypeError: print("哎呀,这个是字符串,没法做数值运算!")
二、括号统计与索引保留的解决方案
你的思路完全没问题——用变量跟踪括号层级就够了,只是代码没写完,还需要同时记录每个括号的原索引。这里给你补全并优化代码,完美实现需求:
方案1:生成带层级标记的字符串 + 保留括号索引
这个方案会把括号替换成对应的层级值,同时记录每个括号在原字符串中的索引和对应层级:
def process_parentheses(text): current_level = 0 result_chars = [] bracket_index_map = {} # 键是原字符串的括号索引,值是对应层级 for idx, char in enumerate(text): if char == "(": current_level += 1 result_chars.append(str(current_level)) bracket_index_map[idx] = current_level elif char == ")": result_chars.append(str(current_level)) bracket_index_map[idx] = current_level current_level -= 1 else: result_chars.append(char) return "".join(result_chars), bracket_index_map # 测试示例 test_formula = "(a+(b*c))" processed_str, index_map = process_parentheses(test_formula) print("处理后的公式:", processed_str) # 输出:1a+2(b*c)1 print("括号索引对应层级:", index_map) # 输出:{0: 1, 3: 2, 7: 1, 8: 0}
方案2:如果需要括号配对索引(左括号对应右括号的位置)
要是你还需要知道每个左括号对应的右括号索引,可以用栈来实现:
def match_parentheses(text): stack = [] bracket_pairs = {} # 键是括号索引,值是配对的括号索引 for idx, char in enumerate(text): if char == "(": stack.append(idx) elif char == ")": if stack: left_idx = stack.pop() bracket_pairs[left_idx] = idx bracket_pairs[idx] = left_idx return bracket_pairs # 测试 test_formula = "(a+(b*c))" pair_map = match_parentheses(test_formula) print("括号配对索引:", pair_map) # 输出:{0: 8, 8: 0, 3: 7, 7: 3}
这两个方案可以根据你的实际需求选择,第一个是统计层级+保留索引,第二个是找括号的配对关系,应该能解决你的问题啦~
内容的提问来源于stack exchange,提问作者Fred
相关产品推荐
相关产品推荐

