Ввод данных
Ввод это когда вы говорите программе сколько яблок берёт Петя, или скольки равен X, или же какой квадратик из трёх мы выберем.
В Python для этого существует одноименное слово, только на английском.
input() — команда для ввода.
Для ее запуска не нужно танцевать с бубном, что-то докачивать и устанавливать. Установленного питона и запущенной среды разработки будет достаточно.
phrase = input("Мой первый ввод будет здесь: ")
Получаем разные типы данных
Поскольку изначально, всё что бы мы не ввели будет являться строкой, то стоит знать, а как получить и другие типы данных.
Почему результатом input()
Если вкратце: программа хочет себя обезопасить от фатальных ошибок.
Так как вы может быть скажете, что хотите ввести число, а пользователь введёт букву “Н” - и вот какая это цифра❓
Поэтому ввод лучше сделать строкой, так как там можно и цифры и строки. И тогда условный ввод “Dominator777” или “Семь Над цать” не поломает нам программу.
Число (int, float)
celoeChislo = int(input("Введи число: ")) # целое число (например 10, 0, -33)
Поскольку целое число как тип данных это int(сокр. Integer), то механизм здесь в том, что мы переводим полученный ввод в числовой тип данных.
neCeloeChislo = float(input("Введи число: ")) # дробное число (например 10.3, 0.0, -33.994)
Аналогичная история с дробными числами.
Почему дробное число называется float..?
Мы в разговорном языке называем такие числа дробными, но вообще в математике они называются числа с плавающей точкой. Слово “плавающий” здесь и будет переводиться как floating → сокр. float
Список (list)
Предположим, что тебе надо ввести набор слов, но не в одну строку, а чтобы каждое слово было отдельным элементом.
В качестве решения можно воспользоваться методом строки .split().
naborSlov = input("Введи фразу: ").split() # полученную фразу раскалываем по пробелу (.split() по умолчанию разделяет по пробелам)
# То есть при таком вводе: "Питон это круто и несложно",
# Мы получим это: ['Питон', 'это', 'круто', 'и', 'несложно']
naborSlov = input("Введи фразу: ").split(", ") # полученную фразу раскалываем по запятым и убирает пробел после запятой
# То есть при таком вводе: "Кирилл, Данил, Антон",
# Мы получим это: ['Кирилл', ' Данил', ' Антон']
Булевый тип (bool)
Булевый тип имеет только одно из двух состояний:
- Правда (True)
- Ложь (False)
Сперва важно понять одну вещь при работе с булевым типом данных. Все что не пустота, то правда:
- Преобразованная пустая строка (””) будет ложью
- Остальное будет правдой, даже пробел (” “)
isEnter = input("Всё или ничего: ")
if isEnter:
print("Пользователь что-то ввёл!")
Такой код выведет "Пользователь что-то ввёл!" только если было хоть что-то введено пользователем.
На самом деле, переводить можно в любой нужный вам тип данных, но показанные выше наиболее применимые.
Ввод в несколько переменных
Что если мы хотим спросить несколько переменных сразу?
Например, чтобы не писать так:
x = input("x: ")
y = input("y: ")
z = input("z: ")
Можно написать так:
x, y, z = input("x: "), input("y: "), input("z: ")
Но можно пойти дальше, и разбить одно значение сразу на несколько:
word1, word2, word3 = input("Введи три слова: ").split() # при вводе "Питон это круто"
print(f"w1={word1}, w2={word2}, w3={word3}") # получим w1=Питон, w2=это, w3=круто
Убираем символы слева/справа строки
Представим что в ваш input() пользователь написал: “ Подкрадули “
И на выходе мы и получим такую строку, со всеми её пробелами.
Починить этот потенциальный баг нам поможет метод .strip() — убирает символы справа и слева строки.
clearedPhrase = input("Как тебя зовут, путник? > ").strip()
# Пользователь ввел: “ Подкрадули “
# Мы получим: “Подкрадули“
Да, по умолчанию убираются пробелы справа и слева.
Также мы можем убирать несколько символов сразу. Как? Указать их поштучно в кавычках.
clearedPhrase = input("Как тебя зовут, путник? > ").strip("-+! ") # p.s. не забываем перечислить и пробел!
# Пользователь ввел: “ -+Подкрадули?! “
# Мы получим: “Подкрадули?“
Также мы можем убирать с правой части при помощи .rstrip(); и с левой при помощи .lstrip().
Круто это всё, но как это применить? Как супер удобный способ получить положительное число в случае необходимости.
positive = input("Ты мне число, а я тебе модуль: ") # если ввели ----321
print(positive.lstrip("-")) # то мы выведем 321
А также для процесса валидации, но об этом позже.
Валидация
Валидация, если простым языком, это проверка данных на корректность и действия направленные на то, чтобы данные были корректными.
Банальный пример: пока значение неверное, спрашивать у игрока новое значение.
Зачем это может нам потребоваться? Например мы хотим получить число.
x = int(input("Введи число: ")) # полученную строку переводим в число при помощи команды int()
Но как можно предположить, если пользователь напишет “Семь Егоров”, то мы не сможем перевести это в число. Столкнувшись с чем-то красным и фатальным. Ошибкой…
Но мы можем эту фатальную ошибку отловить и обработать при помощи try и except.
while True: # бесконечный цикл. остановим тогда, когда получим корректное значени
try: # попытаемся выполнить следующие строки кода:
x = int(input("Введи число: "))
break # выйдем из цикла, если в строке выше не стокнулись с ошибкой
except ValueError: # Исключение класса ValueError возникает как раз в таких ситуациях, когда неверное значение подаётся для действия
print("Пожалуйста, впиши число(из цифр).") # Выполнится в том случае, если была фатальная ошибка с исключением ValueError