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

Python技术问题:指定字符后有数字时添加*的代码调试与优化

如何在指定字符后存在数字时,在该字符后方添加'*'?

我想要实现一个功能:在字符串中,当指定的char后面存在数字符号时,在该char后方添加'*'。我尝试了以下代码,但无法正常运行:

def timesAdd(string, char):
    nString = None;
    if char in string:
        for i in range(len(string)):
            if string[i] == char:
                if string[i-1].isdigit():
                    nString += '*' + char;         
                else:
                    nString += char;
            else:
                nString += string[i];
    return nString;

我的思路是:

  • 遍历字符串的每个字符,判断是否等于指定char
  • 若当前字符是char,查看前一个字符是否为数字
  • 若是数字,在char前添加'*'后存入缓冲区;否则直接存入char
  • 完成遍历后返回缓冲区

请问这段代码为何无法运行,该如何改进?

补充:我还有一个未尝试的思路:创建一个array of chars(示例:"1234567890"),判断string[i]是否属于该数组。


代码无法运行的原因及改进方案

问题1:初始化错误

nString初始化为None,而None不能和字符串执行+=拼接操作,直接会抛出TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str'。必须把初始值改成空字符串""。

问题2:逻辑完全和需求不符

你的需求是指定char后存在数字时,在char后方加'*',但代码里判断的是string[i-1].isdigit()——也就是检查char的前一个字符是否是数字,完全搞反了判断方向。而且当char在字符串第一个位置时(i=0),i-1=-1,会取到字符串最后一个字符,逻辑彻底错误。

问题3:索引越界风险

就算修正判断方向去看i+1,如果char在字符串最后一位,i+1会超出字符串长度,引发IndexError,必须做边界判断。

改进后的代码

def timesAdd(string, char):
    nString = ""
    for i in range(len(string)):
        current_char = string[i]
        nString += current_char
        # 如果当前字符是指定char,且不是最后一个字符,且下一个字符是数字
        if current_char == char and i != len(string)-1 and string[i+1].isdigit():
            nString += '*'
    return nString

关于你补充的思路

用字符数组(比如digits = "0123456789")来判断字符是否是数字是可行的,效果和isdigit()类似,甚至可以自定义数字范围(比如只包含部分数字)。比如把判断条件改成string[i+1] in digits即可,代码调整如下:

def timesAdd(string, char):
    nString = ""
    digits = "0123456789"
    for i in range(len(string)):
        current_char = string[i]
        nString += current_char
        if current_char == char and i != len(string)-1 and string[i+1] in digits:
            nString += '*'
    return nString

内容的提问来源于stack exchange,提问作者user20375569

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 04:22:40