Строки

Многострочный пользовательский ввод в Python

Часто бывает необходимо получить от пользователя сразу несколько значений и сохранить их, например, в список. В этой статье мы рассмотрим два варианта чтения многострочного ввода: до введения пользователем стоп-слова или до прерывания ввода при помощи сочетания клавиш.

Друзья, подписывайтесь на наш телеграм канал Pythonist. Там еще больше туториалов, задач и книг по Python.

Ввод пользователем нескольких строк

Чтобы получить многострочный пользовательский ввод:

  1. Используйте цикл while для итерации до тех пор, пока пользователь вводит значения.
  2. На каждой итерации добавляйте введенные пользователем значения и символ новой строки в список.
  3. Если пользователь нажимает Enter, не введя значения, выходите из цикла.
lines = []

while True:
    user_input = input()

    # 👇️ Если пользователь нажал Enter без ввода значения, прервать цикл
    if user_input == '':
        break
    else:
        lines.append(user_input + '\n')


# 👇️ prints list of strings
print(lines)

# 👇️ join list into a string
print(''.join(lines))

Мы использовали цикл while, работающий до тех пор, пока пользователь вводит значения.

На каждой итерации мы проверяем, не нажал ли пользователь Enter, не введя значения, чтобы выйти из цикла while True.

Условие выхода из цикла может быть любым. Например, вы можете использовать стоп-слово, такое как done или quit.

Оператор break прерывает цикл for или while.

Если пользователь вводит значение, мы используем метод list.append(), чтобы добавить это значение и символ новой строки в список.

Метод list.append() добавляет элемент в конец списка.

Чтение пользовательского ввода до EOF в Python

В качестве альтернативы можно использовать метод sys.stdin.readlines() для чтения пользовательского ввода до EOF.

EOF (аббревиатура англ. end of file — конец файла) в компьютерной терминологии является индикатором операционной системы, означающим, что данные в источнике закончились. Источниками данных обычно являются файлы и потоки.
Для указания терминалу в UNIX и Linux «EOF» следует воспользоваться комбинацией клавиш Ctrl+D. В Windows — Ctrl+Z.

Википедия

Метод readlines() вернет список, содержащий строки.

Пользователь может нажать CTRL + D (Unix) или CTRL + Z (Windows) для выхода.

import sys

# 👇️ Для выхода пользователь должен нажать Ctrl + D (Unix) или Ctrl + Z (Windows)

print('Press CTRL + D (Unix) or CTRL + Z (Windows) to exit')

user_input = sys.stdin.readlines()

# 👇️ Получить список строк
print(user_input)

# 👇️ Объединить элементы списка в строку
print(''.join(user_input))

stdin используется для интерактивного пользовательского ввода.

Метод readlines() возвращает список, введенный пользователем.

Вы можете использовать метод str.join(), если вам нужно объединить список строк в одну строку.

# a
# b
# c
print(''.join(['a\n', 'b\n', 'c\n']))

Если вам нужна только строка, содержащая строки, используйте метод sys.stdin.read().

import sys


user_input = sys.stdin.read()

print(user_input)

Метод sys.stdin.read() возвращает строку, содержащую строки, введенные пользователем.

В качестве альтернативы можно использовать оператор try/except.

Чтение пользовательского ввода до EOF с использованием try/except

Этот процесс состоит из трех шагов:

  1. Используйте цикл while для итерации до EOF.
  2. На каждой итерации добавляйте вводимые пользователем данные в список.
  3. Перехватите исключение EOFError в блоке except и выйдите из цикла.
lines = []


while True:
    try:
        lines.append(input())
    except EOFError:
        lines_str = '\n'.join(lines)
        print(lines_str)

        break

print(lines)

Мы использовали цикл while для итерации до EOF.

Если пользователь нажмет CTRL + D (Unix) или CTRL + Z (Windows), возникнет исключение EOFError, которое будет обработано в блоке except.

Заключение

В этой статье мы рассмотрели, как принимать многострочный пользовательский ввод. Это делается в цикле, который либо прерывается пользователем при помощи сочетания клавиш, либо имеет определенное условие выхода (ввод какого-нибудь слова или ввод пустой строки).

Перевод статьи «Multiple lines user Input in Python».

Марина

Recent Posts

10 удалённых Python-вакансий

Если вы ищете работу на Python, на Talanto.work сейчас есть варианты для junior, middle, senior…

6 месяцев ago

Где искать Python-вакансии в 2026 году: зачем на Talanto.work появился отдельный сценарий поиска

Рынок Python-вакансий большой, но удобным его назвать сложно. Формально вакансий много, однако в реальном поиске…

6 месяцев ago

Срезы в Python со всеми подробностями

Срезы в Python — это больше, чем a[2:7]. В статье — быстрый разбор полезных приёмов:…

8 месяцев ago

Возведение в степень в Python: полное руководство

В этой статье мы рассмотрим возведение в степень в Python с помощью различных методов, от…

9 месяцев ago

Как удалить дубликаты из списка Python?

Дубликаты в списке Python — частая проблема. В статье показано, как быстро убрать повторы, в…

9 месяцев ago

Виртуальный (shared) хостинг от SpaceWeb: технический обзор

Услуга виртуального хостинга на SpaceWeb позволяет арендовать часть сервера (shared-сервера) и разместить на нём свой…

11 месяцев ago