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

