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

竞赛题输入复现问题: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调试控制台识别换行符的方法

  1. 直接输入时:无需手动输入\n,按Enter键就代表换行;输入空行直接按Enter即可。
  2. 开启终端模拟:
    • 打开PyCharm的运行/调试配置
    • 在“执行”选项卡中,勾选**“模拟终端输出”**(部分版本名为Emulate terminal in output console)
    • 重启调试后,按Enter会被正确识别为\n
  3. 硬编码测试输入:如果是在代码里模拟测试,直接用多行字符串即可:
# 模拟测试输入
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 14:05:02