Обычно программа работает по такой схеме: получает входные данные → обрабатывает их → выдает результат. Ввод может поступать как непосредственно от пользователя через клавиатуру, так и через внешний источник (файл, база данных).
В стандартной библиотеке Python 3 есть встроенная функция input() (в Python 2 это raw_input() ), которая отвечает за прием пользовательского ввода. Разберемся, как она работает.
Чтение ввода с клавиатуры
Функция input([prompt]) отвечает за ввод данных из потока ввода:
s = input() print(f»Привет, !») > мир # тут мы с клавиатуры ввели слово «мир» > Привет, мир!
- При вызове функции input() выполнение программы приостанавливается до тех пор, пока пользователь не введет текст на клавиатуре (приложение может ждать бесконечно долго).
- После нажатия на Enter , функция input() считывает данные и передает их приложению (символ завершения новой строки не учитывается).
- Полученные данные присваиваются переменной и используются дальше в программе.
input() всегда возвращает строку :
Python с нуля. Урок 1 | Первая программа. Переменные
s = input() print(type(s)) > 2 >
Также у 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»Комната успешно забронирована!») > Введите номер комнаты: test > Вы ввели не число. Повторите ввод > Введите номер комнаты: 13 > Комната 13 успешно забронирована!
Input() → int
Для преобразования в целое число используйте функцию int() . В качестве аргумента передаются данные которые нужно преобразовать, а на выходе получаем целое число:
НАПИШИ СВОЙ BLACKJACK НА ПИТОНЕ ЗА 30 СЕКУНД / ПРОГРАММИРУЙ НА PYTHON
age_str = input(«Введите ваш возраст: «) age = int(age_str) print(age) print(type(age)) > Введите ваш возраст: 21 > 21 >
То же самое можно сделать в одну строку: age = int(input(«Введите ваш возраст: «)) .
Input() → float
Если нужно получить число с плавающей точкой (не целое), то его можно получить с помощью функции float() .
weight = float(input(«Укажите вес (кг): «)) print(weight) print(type(weight)) > Укажите вес (кг): 10.33 > 10.33 >
Input() → list (список)
Если в программу вводится информация, которая разделяется пробелами, например, «1 word meow», то ее легко преобразовать в список с помощью метода split() . Он разбивает введенные строки по пробелам и создает список:
list = input().split() print(list) print(type(list)) > 1 word meow > [‘1’, ‘word’, ‘meow’] >
Обратите внимание, что каждый элемент списка является строкой. Для преобразования в число, можно использовать 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 > [, , ]
Ввод в несколько переменных
Если необходимо заполнить одним вводом с клавиатуры сразу несколько переменных, воспользуйтесь распаковкой:
В этом примере строка из input() разбивается по пробелу функцией split() . Далее применяется синтаксис распаковки – каждый элемент списка попадает в соответствующую переменную.
Все переменные после распаковки будут строкового типа. Преобразовать их (например в int) можно так:
a, b = [int(s) for s in input().split()] print(f»type a: , type b: «) > 13 100 > type a: , type b:
☝️ Важно : не забывайте обрабатывать ошибки:
- если введенных значений больше чем переменных, получите ошибку – 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 и обрабатывать исключения.
Источник: pythonchik.ru
Блог
Как создать приложение для книги контактов на Python с использованием Rich, Typer и TinyDB
- Запись опубликована: 19 июня, 2023
- Рубрика записи: Python
- Комментарии к записи: 0 комментариев
В этом руководстве по Python мы узнаем, как создать терминальное приложение (CLI app) для управления нашей контактной книгой.
Cписок в строку на Python
Напишем программу на языке Python для преобразования списка в строку. Существуют различные ситуации, когда нам дается список, и нам нужно преобразовать его в строку. Например, преобразование в строку из списка строк и/или списка целых чисел.
Input: [‘Geeks’, ‘for’, ‘Geeks’] Output: Geeks for Geeks Input: [‘I’, ‘want’, 4, ‘apples’, ‘and’, 18, ‘bananas’] Output: I want 4 apples and 18 bananas
Давайте рассмотрим различные способы преобразования списка в строку.
Метод №1: Итерация по списку и продолжение добавления элемента для каждого индекса в итоговую строковую переменную.
def listToString(s): # создаем пустую строку result = «» # итерируемся по списку for elem in s: result += elem # возвращаем результат return result s = [‘Geeks’, ‘for’, ‘Geeks’] print(listToString(s))
GeeksforGeeks
Метод №2: Использование метода .join()
def listToString(s): # задаем переменную, которая будет служить разделителем # между объединенными элементами массива separator = » » result = separator.join(s) return result s = [‘Geeks’, ‘for’, ‘Geeks’] print(listToString(s))
Geeks for Geeks
Но что если список содержит в качестве элементов и строки, и целые числа. В этих случаях приведенный выше код выдаст ошибку TypeError. Чтобы ее избежать, нам нужно преобразовать все элементы массива в строку во время добавления к строке.
Метод №3: Использование list comprehension
s = [‘I’, ‘want’, 4, ‘apples’, ‘and’, 18, ‘bananas’] # это и есть list comprehension converted_list = [str(elem) for elem in s] # дальше методом join() соединяем элементы массива listToStr = ‘ ‘.join(converted_list) print(listToStr)
I want 4 apples and 18 bananas
Метод №4: Использование map().
Используйте метод map() для применения функции преобразования в строку для каждого елемента массива, который мы потом объединим при помощи .join()
s = [‘I’, ‘want’, 4, ‘apples’, ‘and’, 18, ‘bananas’] # Функция map() применит функцию str() к каждому элементу массива s # и вернет нам список в котором все элементы будут преобразованы к строкам. listToStr = ‘ ‘.join(map(str, s)) print(listToStr)
I want 4 apples and 18 bananas
Метод №5: Использование функции enumerate. Этот способ отлично подходит для итерируемых объектов как например результат вызова range(5).
s = [‘I’, ‘want’, 4, ‘apples’, ‘and’, 18, ‘bananas’] # i — индекс элемента и elem — сам элемент, но нам индекс не нужен, # поэтому он не используется и можно заменить на _ listToStr = ‘ ‘.join([str(elem) for i, elem in enumerate(s)]) print(listToStr)
I want 4 apples and 18 bananas
Метод №6: Использование оператора in
s = [‘Geeks’, ‘for’, ‘Geeks’] for i in s: print(i, end=» «)
Geeks for Geeks
Метод №7: Использование метода functools.reduce
from functools import reduce s = [‘I’, ‘want’, 4, ‘apples’, ‘and’, 18, ‘bananas’] listToStr = reduce(lambda a, b : a+ » » +str(b), s) print(listToStr)
I want 4 apples and 18 bananas
Метод №8: Использование метода str.format.
Один из дополнительных подходов к преобразованию списка в строку в Python заключается в использовании метода str.format. Этот метод позволяет задать шаблон строки, а затем заполнить значения заполнителей элементами списка.
lst = [‘Geeks’, ‘for’, ‘Geeks’] result = «<> <> <>».format(*lst) print(result)
Geeks for Geeks
Преимущество этого подхода заключается в том, что можно точно указать, как должны быть отформатированы элементы списка, задав формат в шаблоне строки. Например, можно указать количество десятичных знаков для чисел с плавающей запятой или ширину и выравнивание выходной строки.
lst = [1.2345, ‘good’ , 3.4567] # :.2f — формат итогового представления данных result = » <> «.format(*lst) print(result)
1.23 good 3.46
Метод №9: Использование рекурсии.
def list_string(start, l, word): # базовый случай if start == len(l): return word # добавляем элемент в итоговую строку и пробел в качестве разделителя word += str(l[start]) + ‘ ‘ # продолжаем рекурсию до базового случая return list_string(start+1, l, word) l=[‘Geeks’,’for’,’Geeks’] print(list_string(0,l,»))
1.23 good 3.46
Сложность вышеупомянутых методов.
Временная сложность вышеуказанных подходов будет зависеть от длины списка. Например, в методе 1 мы итерируем список и добавляем каждый элемент в строку, поэтому временная сложность будет O(n), где n – длина списка.
Аналогично, временная сложность других методов также будет равна O(n).
Пространственная сложность всех вышеперечисленных методов также будет O(n), поскольку мы создаем новую строку размера n для хранения элементов списка.
Следовательно выбирать стоит то, что проще будет понять когда вы, либо кто-то другой откроет ваш код. Либо нужны специфические вещи типа форматирования или преобразования в строку интернируемого объекта, тогда вам стоит рассмотреть 8 и 5 методы.
Источник: pythonturbo.ru