camelCase转snake_case程序遇多大写字母时重复输出问题求助
CamelCase转Snake_Case程序的重复输出问题原因及修复
问题原因
你的代码中,print语句被放在了make_snake函数的for循环内部的if判断块里。每遍历到一个大写字母,程序就会执行一次字符串替换操作,然后立刻打印当前的处理结果。
以preferredFirstName为例:
- 第一次遇到大写字母
F,替换后字符串变为preferred_FirstName,转小写后打印第一行结果preferred_firstname; - 循环继续,遇到第二个大写字母
N,替换后字符串变为preferred_First_Name,转小写后打印第二行结果preferred_first_name; - 因此会输出两行内容,而你需要的是所有大写字母处理完成后的最终结果。
修复方案
把print语句移到for循环外面,等所有大写字母都处理完毕后,再统一打印最终结果。同时可以优化字符串处理逻辑,避免多次修改原字符串带来的性能问题。
修复后的代码(优化版)
def main(): string = input("Camelcase: ") make_snake(string) def make_snake(string): snake_parts = [] for char in string: if char.isupper(): snake_parts.append('_') snake_parts.append(char.lower()) else: snake_parts.append(char) final_result = ''.join(snake_parts) print(f"snake_case: {final_result}") main()
基于原逻辑的简化修复
如果想保留原有的字符串替换方式,只需调整print的位置:
def main(): string = input("Camelcase: ") make_snake(string) def make_snake(string): for char in string: if char.isupper(): string = string.replace(char, "_" + char) string_new = string.lower() print(f"snake_case: {string_new}") main()
内容的提问来源于stack exchange,提问作者MWEsser
相关产品推荐
相关产品推荐

