Часто бывает необходимо получить от пользователя сразу несколько значений и сохранить их, например, в список. В этой статье мы рассмотрим два варианта чтения многострочного ввода: до введения пользователем стоп-слова или до прерывания ввода при помощи сочетания клавиш.
Чтобы получить многострочный пользовательский ввод:
while
для итерации до тех пор, пока пользователь вводит значения.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()
добавляет элемент в конец списка.
В качестве альтернативы можно использовать метод sys.stdin.readlines()
для чтения пользовательского ввода до EOF.
Метод 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.
Этот процесс состоит из трех шагов:
while
для итерации до EOF.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».
При анализе данных часто требуется быстро найти абсолютное значение набора чисел. Для выполнения этой задачи…
Pydantic - это мощная библиотека проверки данных и управления настройками для Python, созданная для повышения…
Python предлагает набор библиотек, удовлетворяющих различные потребности в визуализации, будь то академические исследования, бизнес-аналитика или…
В Python для представления данных в двоичной форме можно использовать байты. Из этой статьи вы…
В этой статье рассказывается о том, что такое Werkzeug и как Flask использует его для…
При работе с датами часто возникает необходимость прибавлять к дате или вычитать из нее различные…