Python stdin/stdout输出异常:函数括号换行问题排查
问题分析与修复
核心问题是输入行末尾的换行符未被处理,导致生成的结果中包含换行,使得()被打印到下一行。
具体原因
当通过sys.stdin读取每行输入时,行末尾会自带换行符\n。例如测试输入的第一行C;M;mouse pad实际读取后是C;M;mouse pad\n:
line[4:]得到的内容是mouse pad\n- 调用
combine函数时,line.split(" ")会分割出['mouse', 'pad\n'] - 处理第二个元素时,得到
Pad\n - 最后追加
(),拼接后的结果为mousePad\n(),输出时\n会让括号跳到下一行
修复方案
在读取每行输入后,先移除末尾的换行符。修改读取循环部分的代码:
res = [] for line in sys.stdin: line = line.rstrip('\n') # 移除行末的换行符 action = line[0] inputType = line[2] if action == 'S': word = split(line[4:], inputType) res.append(word) else: word = combine(line[4:], inputType) res.append(word) # 输出时每个结果后添加换行,确保多行输入对应多行输出 for i in res: sys.stdout.write(i + '\n')
另外,原输出部分使用writelines不会自动添加换行,若需要每行结果单独占一行,建议改用write并追加\n,避免多个结果连在一起。
内容的提问来源于stack exchange,提问作者user3003304
相关产品推荐
相关产品推荐

