Часто бывает необходимо получить от пользователя сразу несколько значений и сохранить их, например, в список. В этой статье мы рассмотрим два варианта чтения многострочного ввода: до введения пользователем стоп-слова или до прерывания ввода при помощи сочетания клавиш.
Друзья, подписывайтесь на наш телеграм канал Pythonist. Там еще больше туториалов, задач и книг по Python.
Чтобы получить многострочный пользовательский ввод:
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.
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.
Этот процесс состоит из трех шагов:
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».
Если вы ищете работу на Python, на Talanto.work сейчас есть варианты для junior, middle, senior…
Рынок Python-вакансий большой, но удобным его назвать сложно. Формально вакансий много, однако в реальном поиске…
Срезы в Python — это больше, чем a[2:7]. В статье — быстрый разбор полезных приёмов:…
В этой статье мы рассмотрим возведение в степень в Python с помощью различных методов, от…
Дубликаты в списке Python — частая проблема. В статье показано, как быстро убрать повторы, в…
Услуга виртуального хостинга на SpaceWeb позволяет арендовать часть сервера (shared-сервера) и разместить на нём свой…