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

