Считывание нескольких строк из input()
Функция input() ждёт, пока пользователь нажнёт на клавиш Enter , и затем немедленно возвратит введенную строку, также когда пользователь затем что-то писал, это или потеряется, или передается последующей команде на ввод с клавиатуры.
Значит, нельзя 1 командой input() ввести более строк — нужно это повторить, например в таком цикле:
и ещё одного нажатия на Enter получится вывод
Можно так попробовать, но надо нажать после ввода еще раз энтер и будут кавычки квадратные со скобками.
Как мне прочитать несколько строк raw_input в Python?
Я хочу создать программу на Python, которая принимает несколько строк пользовательского ввода. Например:
Как я могу взять несколько строк необработанного ввода?
7 ответов
Чтобы получить каждую строку в виде строки, вы можете сделать:
ВВОД:
* Я долго боролся с этим вопросом, потому что хотел найти способ прочитать несколько строк пользовательского ввода без необходимости прерывать его с помощью Control D (или стоп-слова). В конце концов я нашел способ в Python3, используя модуль pyperclip (который вы должны будете установить с помощью установки pip). Ниже приведен пример, который принимает список IP-адресов *
Для меня это именно то, что я искал; возьмите несколько строк ввода, выполните необходимые действия (здесь простая печать), а затем прервите цикл при обработке последней строки. Надеюсь, это может быть одинаково полезно и для вас.
Кроме того, вы можете попробовать sys.stdin.read()
Продолжайте читать строки, пока пользователь не введет пустую строку (или не изменит stopword на что-то другое)
Просто расширив этот ответ https://stackoverflow.com/a/11664652/4476612 вместо любого стоп-слова вы можете просто проверить, есть ли линия там или нет
Вы получите строки в списке, а затем присоединитесь к \ n, чтобы перейти в ваш формат.
Пользовательский ввод (input) в Python
О бычно программа работает по такой схеме: получает входные данные → обрабатывает их → выдает результат. Ввод может поступать как непосредственно от пользователя через клавиатуру, так и через внешний источник (файл, база данных).
В стандартной библиотеке Python 3 есть встроенная функция input() (в Python 2 это raw_input() ), которая отвечает за прием пользовательского ввода. Разберемся, как она работает.
Чтение ввода с клавиатуры
Функция input([prompt]) отвечает за ввод данных из потока ввода:
s = input() print(f"Привет, !") > мир # тут мы с клавиатуры ввели слово "мир" > Привет, мир!
- При вызове функции input() выполнение программы приостанавливается до тех пор, пока пользователь не введет текст на клавиатуре (приложение может ждать бесконечно долго).
- После нажатия на Enter , функция input() считывает данные и передает их приложению (символ завершения новой строки не учитывается).
- Полученные данные присваиваются переменной и используются дальше в программе.
input() всегда возвращает строку :
Также у input есть необязательный параметр prompt – это подсказка пользователю перед вводом:
name = input("Введите имя: ") print(f"Привет,
Более подробное описание функции из документации:
def input([prompt]): """ Read a string from standard input. The trailing newline is stripped. The prompt string, if given, is printed to standard output without a trailing newline before reading input. If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError. On *nix systems, readline is used if available. """ pass
Преобразование вводимые данные
Данные, введенные пользователем, попадают в программу в виде строки, поэтому и работать с ними можно так же, как и со строкой. Если требуется организовать ввод цифр, то строку можно преобразовать в нужный формат с помощью функций явного преобразования типов.
☝️ Важно : если вы решили преобразовать строку в число, но при этом ввели строку (например: test), возникнет ошибка:
ValueError: invalid literal for int() with base 10: 'test'
На практике такие ошибки нужно обрабатывать через try except . В примере ниже пользователь будет вводить данные до тех пор, пока они успешно не преобразуются в число.
def get_room_number(): while True: try: num = int(input("Введите номер комнаты: ")) return num except ValueError: print("Вы ввели не число. Повторите ввод") room_number = get_room_number() print(f"Комната
Input() → int
Для преобразования в целое число используйте функцию int() . В качестве аргумента передаются данные которые нужно преобразовать, а на выходе получаем целое число:
age_str = input("Введите ваш возраст: ") age = int(age_str) print(age) print(type(age)) > Введите ваш возраст: 21 > 21 > <class 'int'>
То же самое можно сделать в одну строку: age = int(input("Введите ваш возраст: ")) .
Input() → float
Если нужно получить число с плавающей точкой (не целое), то его можно получить с помощью функции float() .
weight = float(input("Укажите вес (кг): ")) print(weight) print(type(weight)) > Укажите вес (кг): 10.33 > 10.33 > <class 'float'>
Input() → list (список)
Если в программу вводится информация, которая разделяется пробелами, например, "1 word meow", то ее легко преобразовать в список с помощью метода split() . Он разбивает введенные строки по пробелам и создает список:
list = input().split() print(list) print(type(list)) > 1 word meow > ['1', 'word', 'meow'] > <class 'list'>
Обратите внимание, что каждый элемент списка является строкой. Для преобразования в число, можно использовать int() и цикл for. Например, так:
int_list = [] for element in input().split(): int_list.append(int(element)) print([type(num) for num in int_list]) > 1 2 3 > [<class 'int'>, <class 'int'>, <class 'int'>]
Ввод в несколько переменных
Если необходимо заполнить одним вводом с клавиатуры сразу несколько переменных, воспользуйтесь распаковкой:
В этом примере строка из input() разбивается по пробелу функцией split() . Далее применяется синтаксис распаковки – каждый элемент списка попадает в соответствующую переменную.
Все переменные после распаковки будут строкового типа. Преобразовать их (например в int) можно так:
a, b = [int(s) for s in input().split()] print(f"type a:
☝️ Важно : не забывайте обрабатывать ошибки:
- если введенных значений больше чем переменных, получите ошибку – ValueError: too many values to unpack (expected 3) ;
- если введенных значений меньше чем переменных, получите ошибку – ValueError: not enough values to unpack (expected 3, got 2) ;
- если преобразовываете в int, а вводите строку – ValueError: invalid literal for int() with base 10: 'test' .
В этом руководстве вы узнали, как принимать данные от пользователя, введенные с клавиатуры, научились преобразовывать данные из input и обрабатывать исключения.