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

Python for循环如何使用多个返回索引更新变量插入下划线

问题根因

你的代码运行后只有第一个大写字母前能插入下划线,是两处逻辑错误导致的:

  • uppercase_finder函数中检测到第一个大写字母就执行return i,触发return后函数会直接终止,不会继续遍历后续字符,所以永远只能拿到第一个大写字母的索引,拿不到全部位置
  • 就算拿到了所有大写字母的原始索引,如果从左到右按索引切片插入,每插入一个下划线,后面所有字符的位置都会往后偏移1位,后续的插入位置会全部错位
可行修复方法

方法1:保留索引检测逻辑,从后往前插入

先把uppercase_finder改成返回所有大写字母索引的列表,插入的时候从索引最大的位置开始往前处理,就不会出现索引错位问题:

def main():
    first_input = input("input here: ")
    uppercase_indices = uppercase_finder(first_input)
    new_case = first_input
    # 从后往前插,前面的插入操作不会影响未处理的靠后位置的索引
    for idx in reversed(uppercase_indices):
        new_case = new_case[:idx] + "_" + new_case[idx:]
    new_case = new_case.lower()
    print(new_case)

def uppercase_finder(x):
    # 收集所有符合条件的索引,不要找到第一个就返回
    indices = []
    for i in range(len(x)):
        if x[i].isupper():
            indices.append(i)
    return indices

main()

方法2:逐字符遍历拼接(更简洁,不用处理索引偏移)

不用提前收集所有索引,直接遍历原字符串每个字符,遇到大写字母就先加下划线再加当前字符,最后统一转小写就行,逻辑更简单不容易出错:

def main():
    first_input = input("input here: ")
    char_list = []
    for c in first_input:
        if c.isupper():
            char_list.append("_")
        char_list.append(c)
    new_case = "".join(char_list).lower()
    print(new_case)

main()

测试效果:输入helloWorldTest,两种方法都会输出hello_world_test,符合驼峰转下划线命名的常规需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 16:01:06