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
相关产品推荐
相关产品推荐

