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

Python自定义函数拼接字符串时\n换行符失效问题求解

问题排查:驼峰命名转换函数输出换行失效问题

问题复现

测试输入

test = '''S;M;plasticCup()
C;V;mobile phone
C;C;coffee machine
'''

核心代码

def feeder(user_input):
    split_total = user_input.splitlines()
    output = ''
    for element in split_total:
        output += f"{camelCase(element)} \n"
        # camelCase()是自定义处理函数,实现驼峰转换规则
    return output

def camelCase(user_input):
    split_ls = user_input.split(';')
    if (split_ls[0] == 'S'): # 拆分逻辑
        index_of_upr, split_of_upr = [], []
        split_ls[2] = split_ls[2].replace('()', '') # 移除方法后缀的()
        for index, character in enumerate(split_ls[2]):
            if (character.isupper()):
                split_ls[2] = split_ls[2].replace(character, ' ' + character.lower())
        split_ls[2] = split_ls[2].strip()
        return split_ls[2]
    else: # 合并逻辑
        split_ls[2] = split_ls[2].split(' ')
        for i in range(len(split_ls[2])):
            split_ls[2][i] = split_ls[2][i].title()
        if (split_ls[1] == 'C'): # 类名处理
            return ''.join(split_ls[2])
        else: # 方法、变量名处理
            split_ls[2][0] = split_ls[2][0].lower()
            if (split_ls[1] == 'V'): # 变量名处理
                return ''.join(split_ls[2])
            else: # 方法名处理
                return ''.join(split_ls[2]) + '()'

异常表现

调用feeder(test)后返回的结果显示为:

'plastic cup \nmobilePhone \nCoffeeMachine'

但单独测试字符串拼接换行的逻辑时,换行可以正常生效:

chr_list = ['a', 'b', 'c']
output = ''
for element in chr_list:
    output += f"{element}\n"
print(output)

输出为:

a
b
c

问题原因

  • 你看到的\n没有生效是因为直接查看了字符串对象的原生表示,此时Python会把转义字符原样显示,不会实际执行换行。
  • 之前的测试代码换行正常生效,是因为调用了print()函数,print()会自动解析字符串中的转义字符,将\n渲染为实际的换行。
  • 额外问题:当前拼接逻辑f"{camelCase(element)} \n"中,结果和\n之间多了多余空格,会导致每行末尾多出无用空格。

解决方法

拿到feeder(test)的返回结果后,用print()输出即可看到正常换行的效果:

res = feeder(test)
print(res)

输出结果:

plastic cup 
mobilePhone 
CoffeeMachine

如果需要完全符合HackerRank的输出要求(无多余空格、末尾无多余空行),可以将拼接逻辑调整为列表存储+join拼接:

def feeder(user_input):
    split_total = user_input.splitlines()
    output = []
    for element in split_total:
        output.append(camelCase(element))
    return '\n'.join(output)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:24:06