使用for循环调用.upper()后字符串出现异常大写字母问题排查
问题分析与解决
问题根源
你代码里的问题出在输入字符串本身包含大写字母(比如示例里的R和U)。看这段核心逻辑:
word += letter.upper() + (letter * i) + "-"
当letter本身是大写时,letter * i会直接重复大写字母,自然就出现了整段大写的情况。而预期里重复的部分应该是小写,所以不管原字符是大写还是小写,重复的部分都要强制转成小写。
修复后的完整代码
把重复部分改成letter.lower() * i,同时优化末尾去横杠的写法:
def translate(s): i = 0 word = "" for letter in s: # 首字母保持大写,重复部分强制转小写 word += letter.upper() + (letter.lower() * i) + "-" i += 1 # 直接用切片去掉末尾的"-",简洁高效 return word[:-1]
验证结果
输入"ZpglnRxqenU"时,修复后的代码会输出符合预期的结果:Z-Pp-Ggg-Llll-Nnnnn-Rrrrrr-Xxxxxxx-Qqqqqqqq-Eeeeeeeee-Nnnnnnnnnn-Uuuuuuuuuuu
内容的提问来源于stack exchange,提问作者spiffy
相关产品推荐
相关产品推荐

