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

camelCase转snake_case程序遇多大写字母时重复输出问题求助

CamelCase转Snake_Case程序的重复输出问题原因及修复

问题原因

你的代码中,print语句被放在了make_snake函数的for循环内部的if判断块里。每遍历到一个大写字母,程序就会执行一次字符串替换操作,然后立刻打印当前的处理结果。

以preferredFirstName为例:

  1. 第一次遇到大写字母F,替换后字符串变为preferred_FirstName,转小写后打印第一行结果preferred_firstname;
  2. 循环继续,遇到第二个大写字母N,替换后字符串变为preferred_First_Name,转小写后打印第二行结果preferred_first_name;
  3. 因此会输出两行内容,而你需要的是所有大写字母处理完成后的最终结果。

修复方案

把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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 04:28:51