竞赛题输入复现问题:4行带换行输入读取与PyCharm调试疑惑
问题描述
我完成了一道竞赛题,但因无法复现竞赛界面中的输入而无法提交。输入规则如下:
- 共4个字符串,每个末尾都带换行符(推测为
\n) - 字符串可为空;非空时由空格分隔的3字母星期组成
示例输入:
MON\n MON WED\n \n FRI THU SUN\n
我尝试了这段代码:
text = [] while True: line = input() if line: text.append(line) else: break text = [line.rstrip() for line in text]
但这段代码需要输入第5次才会触发终止条件,导致提交失败。我不确定编译器是否把仅含\n的字符串视为非空。另外sys.stdin.readlines()需要按CTRL-D,没法用。我需要把这4个带末尾换行符的输入存入列表,理想格式是列表的列表:
[['WED', 'FRI'], ['MON', 'TUE'], [], ['MON', 'WED', 'THU', 'SAT', 'FRI', 'SUN', 'TUE']] # 理想格式 ['WED FRI', 'MON TUE', '', 'MON WED THU SAT FRI SUN TUE'] # 也可以接受
另外,在PyCharm调试控制台测试输入时,不管输入MON\n还是MON"\n",字符串里的\n都没法被识别清除,请问怎么让调试器正确识别\n换行符?
解决方案
一、正确读取4行输入的代码
竞赛题输入是固定4行,无需用无限循环判断空行终止,直接读取4行即可:
方案1:基于sys.stdin读取
import sys # 读取前4行,若需保留原始换行符可去掉.rstrip('\n') lines = [line.rstrip('\n') for line in sys.stdin.readlines()[:4]] # 转换为列表的列表格式 result = [line.split() if line else [] for line in lines]
方案2:循环读取4次
如果不能使用sys.stdin.readlines(),直接循环4次读取每行输入:
text = [] for _ in range(4): line = input() text.append(line) # 转换为目标格式 result = [line.split() if line else [] for line in text]
以上代码会严格读取4行输入,无论每行是否为空,完全匹配竞赛题输入要求,不会出现需第5次输入才终止的问题。
二、PyCharm调试控制台识别换行符的方法
- 直接输入时:无需手动输入
\n,按Enter键就代表换行;输入空行直接按Enter即可。 - 开启终端模拟:
- 打开PyCharm的运行/调试配置
- 在“执行”选项卡中,勾选**“模拟终端输出”**(部分版本名为
Emulate terminal in output console) - 重启调试后,按Enter会被正确识别为
\n
- 硬编码测试输入:如果是在代码里模拟测试,直接用多行字符串即可:
# 模拟测试输入 test_input = """MON MON WED FRI THU SUN """ # 按换行分割成4行 lines = test_input.splitlines() result = [line.split() if line else [] for line in lines]
内容的提问来源于stack exchange,提问作者TiimeIrre
相关产品推荐
相关产品推荐

