You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免将项赋值给字符串?及括号计数重写公式代码求助

一、避免将项赋值给字符串的实用方法

平时写代码时确实容易不小心把非字符串的项误赋值成字符串,这里给你几个实用小技巧:

  • 提前做类型检查:在赋值前用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:34:44