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

Python字符串奇偶位大小写转换函数末尾索引处理失效问题

问题现象

实现奇偶位置字符大小写转换的Python函数myfunc,规则为奇数位字符转小写、偶数位字符转大写,初始实现代码如下:

def myfunc(word):
    new_word = ''
    for let in word:
        if (word.index(let) + 1) % 2 == 0:
            new_word += let.upper()
        elif (word.index(let) + 1) % 2 == 1:
            new_word += let.lower()
            
    return new_word

函数运行时前半段字符处理正常,但最后4-5个索引位置的字符转换结果异常:传入参数'Anthropomorphism'调用时,实际输出为aNtHrOpOmOrpHIsm,与预期输出aNtHrOpOmOrPhIsM不符。

根因定位

问题出在索引获取逻辑:str.index(char)方法的返回值是传入字符在字符串中第一次出现的索引,并非当前遍历到的字符的真实位置索引。
当字符串中存在重复字符时(例如测试用例Anthropomorphism中多次出现o/m/p/h等重复字符),遍历到后半段的重复字符时,word.index(let)拿到的是该字符首次出现位置的索引,和当前遍历位置的真实索引不一致,直接导致奇偶位置判断错误,最终输出不符合预期。
对应测试用例的典型错误点:

  • 后半段的h首次出现在索引3(对应第4位,偶数位需转大写),但它的真实遍历位置是索引12(对应第13位,奇数位需转小写),错误的索引取值导致该字符被错误转为大写H
  • 末尾的m首次出现在索引8(对应第9位,奇数位需转小写),但它的真实遍历位置是索引15(对应第16位,偶数位需转大写),错误的索引取值导致该字符被错误转为小写m
修复方法

遍历字符串时直接同步获取每个字符的真实索引即可,推荐用enumerate()实现,代码简洁可读性强:

def myfunc(word):
    new_word = ''
    # 遍历同时获取字符的真实索引(从0开始计数)和字符本身
    for idx, let in enumerate(word):
        if (idx + 1) % 2 == 0:
            new_word += let.upper()
        else:
            new_word += let.lower()
    return new_word

修复后传入'Anthropomorphism'测试,返回结果为aNtHrOpOmOrPhIsM,完全符合预期。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 06:27:25