Строки

Многострочный пользовательский ввод в 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

Абсолютное значение числа в Python

При анализе данных часто требуется быстро найти абсолютное значение набора чисел. Для выполнения этой задачи…

23 часа ago

Библиотека Pydantic: валидация данных на Python

Pydantic - это мощная библиотека проверки данных и управления настройками для Python, созданная для повышения…

1 неделя ago

7 наилучших библиотек визуализации Python на 2024 год

Python предлагает набор библиотек, удовлетворяющих различные потребности в визуализации, будь то академические исследования, бизнес-аналитика или…

2 недели ago

Как преобразовать строку в байты в Python

В Python для представления данных в двоичной форме можно использовать байты. Из этой статьи вы…

3 недели ago

Что такое Werkzeug?

В этой статье рассказывается о том, что такое Werkzeug и как Flask использует его для…

4 недели ago

Как прибавить дни, месяцы и годы к дате в Python

При работе с датами часто возникает необходимость прибавлять к дате или вычитать из нее различные…

1 месяц ago