Я не могу воспроизвести ввод, встроенный в интерфейс конкурса

Я решил конкурсную задачу, но не смог ее отправить, поскольку не могу воспроизвести входные данные, встроенные в интерфейс конкурса. Ввод определяется четырьмя строками, каждая из которых может быть пустой, но имеет в конце символ разрыва строки (я думаю, «\n»). Если не пусто, строки состоят из 3-х буквенных дней недели с 1 пробелом между:

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]

Но для того, чтобы условие останова сработало, требуется ввести ввод пятый раз, что приводит к сбою решения. Я не уверен, считает ли компилятор строки, содержащие только «\n», не пустыми. sys.stdin.readlines() требует CTRL-D после ввода, поэтому его нельзя использовать. Мне нужно ввести 4 строки с "\n" в конце (независимо от того, пусты они или полны), чтобы поместить их в список (в идеале список списков):

[['WED', 'FRI'], ['MON', 'TUE'], [], ['MON', 'WED', 'THU', 'SAT', 'FRI', 'SUN', 'TUE']]  # ideally
['WED FRI', 'MON TUE', '', 'MON WED THU SAT FRI SUN TUE']  # also okay

Кроме того, я проверил вводимые данные из системы соревнований в консоли отладки PyCharm. В любом случае, я ввел, знак «\n» не удалился из строк. Как заставить отладчик понимать знак «\n»?

MON\n
MON"\n"
MON'\n'
"MON\n"  # neither of them cleared the "\n" from the string.

Создайте внешний файл. Запустите python main.py < input.txt для четырехстрочного файла.

OneCricketeer 21.07.2024 00:50

@OneCricketeer, спасибо за совет, но система ввода конкурса, к сожалению, не позволяет применять файлы для ввода.

TiimeIrre 21.07.2024 00:52

Вероятно, именно так система уже подает входные данные. Я говорил не вводить данные явно, когда вы пытаетесь запустить их локально. Код, который у вас есть, выглядит нормально, за исключением разделения дней

OneCricketeer 21.07.2024 00:53

Если «Ввод определен как 4 строки», то вам определенно не нужен цикл while с условием выхода; используйте цикл for, который выполняется четыре раза, или просто четыре input(), каждый из которых присваивается переменной.

jasonharper 21.07.2024 00:54

@OneCricketeer, Ааа, понял твою точку зрения. Да, возможно, это может помочь, но, видите ли, я попробовал все это, чтобы воспроизвести входные данные конкурсной системы. С моим участием моя задача успешно решена.

TiimeIrre 21.07.2024 00:56

@jasonharper, спасибо, это было как-то очевидно, но все же... :D И все же - а что, если нет? Что делать, если количество строк не определено?

TiimeIrre 21.07.2024 00:57

Насколько я знаю, нет возможности войти '\n' с помощью функции input. Когда вы нажимаете клавишу ввода или вставляете символ '\n' в командную строку, функция ввода прекращает возвращать символы до этой точки, но не включая символ новой строки.

Bill 21.07.2024 01:00

Должно быть НЕКОТОРОЕ явное указание на конец ввода, иначе проблема не будет разрешима. Завершение на пустой строке работает только в том случае, если в середине ввода не может быть пустой строки. Другие параметры включают в себя первую строку ввода, которая указывает количество дальнейших строк для чтения или чтение до определенной строки, например «КОНЕЦ».

jasonharper 21.07.2024 01:02

@jasonharper, спасибо. Ведь, похоже, это не я туплю, это просто невозможно без дополнительного ввода ввода или указания количества итераций.

TiimeIrre 21.07.2024 01:10

Что на самом деле говорит вопрос конкурса о том, каким методом он подает входные данные в тестируемую программу? Это через стандартный ввод, в качестве аргумента командной строки, что-то еще...?

CrazyChucky 21.07.2024 01:10

@CrazyChucky, это не так :) Только время (1 секунда), размер памяти (256 МБ), версия компилятора (3.10.6) и описание, которое я упомянул выше.

TiimeIrre 21.07.2024 01:13

Если это не указано в самом вопросе, я надеюсь, что это стандартное правило для вопросов на любом сайте, на котором вы его нашли... Например, я видел сайты с вызовами кода, которые ожидают, что вы создадите функцию с именем solution, которая принимает вход в качестве аргумента. Если нигде в вопросе или остальной части сайта не говорится, как будет тестироваться ваш код, то я не знаю, как они ожидают, что люди решат эти задачи.

CrazyChucky 21.07.2024 01:21

@CrazyChucky, ну в этом случае обычно требуют ввод через стандартные функции.

TiimeIrre 21.07.2024 01:25
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
13
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если я правильно понял, вы хотите прочитать ввод с консоли и сохранить его в списке списков. в этом случае, поскольку всегда есть 4 строки ввода, вы могли бы сделать это вот так

text = []
for _ in range(4):
    line = [weekday for weekday in input().split()]
    text.append(line)

print(text)

так, например, если ввод в консоли

Wed Thu Fri

Sat Sun Mon Tue
Tue Sun

тогда значение печатаемого текста равно [['Wed', 'Thu', 'Fri'], [], ['Sat', 'Sun', 'Mon', 'Tue'], ['Tue', 'Sun']] И если по какой-либо причине количество строк может быть больше 4, то в этом случае необходимо будет указать количество строк, и поэтому код станет таким

text = []

num_lines = int(input())
for _ in range(num_lines):
    line = [weekday for weekday in input().split()]
    text.append(line)

print(text)

Надеюсь, это то, что вы искали.

Можно упростить до text.append(input().split()) или text = [input().split() for _ in range(4)].

OneCricketeer 21.07.2024 01:06

@OneCricketeer, я думаю, поскольку я не хотел, чтобы это был один лайнер, мне понравилось, чтобы было ясно, иначе text = [input().split() for _ in range(num_lines)] должен помочь

Rida Zouga 21.07.2024 01:19

Другие вопросы по теме