Часто бывает необходимо получить от пользователя сразу несколько значений и сохранить их, например, в список. В этой статье мы рассмотрим два варианта чтения многострочного ввода: до введения пользователем стоп-слова или до прерывания ввода при помощи сочетания клавиш.
Друзья, подписывайтесь на наш телеграм канал Pythonist. Там еще больше туториалов, задач и книг по Python.
Ввод пользователем нескольких строк
Чтобы получить многострочный пользовательский ввод:
- Используйте цикл
while
для итерации до тех пор, пока пользователь вводит значения. - На каждой итерации добавляйте введенные пользователем значения и символ новой строки в список.
- Если пользователь нажимает 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.
Метод 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
Этот процесс состоит из трех шагов:
- Используйте цикл
while
для итерации до EOF. - На каждой итерации добавляйте вводимые пользователем данные в список.
- Перехватите исключение 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».