В любом языке программирования есть такая штука, как переменные. Это как в школьной алгебре: вот переменная a = 1, вот переменная b = 2. То есть это такие абстрактные штуки, внутри них лежит значение, которое может меняться — например, когда ты пишешь после переменной знак равно и какое‑то новое значение.
a = 2
a = a + 2
print(a)
Ну, то, что print(a) — это команда, которая печатает на экране текущее значение переменной, ты уже понял. Ты написал после знака равно снова саму переменную + 2, то есть сначала в переменной было значение 2, потом к этому значению прибавили еще 2. На экране гордо красуется 4. Поздравляю, два и два сложили!
А если изначально неизвестно, какие числа надо складывать? Тогда пришлось бы сперва попросить юзера ввести их в консоли и нажать Enter. Давай так и сделаем:
a = input('Введи, сколько у тебя литров пива: ')
b = input('Сколько пива принес друг: ')
c = int(a) + int(b)
print('На двоих у вас: ' + str(c) + ' литров пива')
Внутри скобочек у input ты пишешь пояснение для юзера, что конкретно его просят ввести. Но вот беда, по умолчанию все, что вводится через input, считается не числом, а строкой, поэтому, прежде чем складывать количество литров пива, нужно сначала преобразовать введенные строки в числа с помощью функции int().
Слово «функция» должно быть знакомо тебе из математики. В скобках мы пишем то, что она принимает (аргумент), а на выходе будет результат. Python сначала подменит переменную на ее текущее значение (int(a) на, скажем, int("5"), а потом функцию — на результат ее выполнения, то есть 5. Бывает, что функция ничего не возвращает, только что‑то делает. Например, print() только печатает аргумент.
Окей, преобразовал строки в числа, положил их в переменную c, а дальше‑то что за треш внутри скобок у print? Тут складываются строки (строки всегда пишутся внутри кавычек), поясняющие, что именно выводится на экран, а результат сложения передается в функцию print().
Чтобы строки безболезненно сложились с переменной c, в которой лежит число, надо преобразовать его в строку функцией str() — так же как мы превращали строки в числа, только наоборот.
Вообще, типов переменных много, но суть ты уловил — чтобы производить с переменными какие‑то действия, нужно их сначала привести к одному типу — к строковому, или к числовому, или еще к какому‑нибудь. Если с этим не заморачиваться, Python сложит не числа, а строки и введенные 2 и 3 литра пива в сумме дадут не 5, а целых 23. Хорошо бы так было в реальности!
Вот еще примерчик, рассчитывающий, сколько тебе еще пить пиво, исходя из средней продолжительности жизни в России:
a = input('Введи, сколько тебе лет: ')
b = 73 - int(a)
print('Осталось примерно: ' + str(b) + " лет")
Здесь мы вызываем функцию input(), чтобы получить значение, вычитаем его из 73 (средняя продолжительность жизни россиянина), не забыв превратить строку в число, а потом печатаем результат, превратив число обратно в строку и сложив с другими строками.
Итак, ты узнал, что такое целочисленные и строковые переменные, что эти типы можно преобразовывать друг в друга командами int() и str(). К тому же теперь ты умеешь получать переменные от пользователя с помощью функции input('Введите что-то') и печатать результаты с помощью функции print().
УСЛОВИЯ
В основе любой программы лежат условия. В зависимости от того, выполняются они или не выполняются, программа может пойти по одному или другому пути. Представь, ты едешь на машине и смотришь на часы: если уже есть десять вечера, то поворачиваешь домой, если нет, то можно заехать в гости. Точно так же работает и программа: проверяет какое‑то значение и сворачивает туда или сюда и выполняет соответствующий кусочек кода.
beer = input('Введите Yes, если пиво есть, и No, если пива нет: ')
if beer.lower() == 'yes':
result = 'Ты взломаешь Пентагон'
else:
result = 'Ты сломаешь свой мозг'
print(result)
На английском if значит «если», а else — «иначе» или «в противном случае». В строчке после if идет условие, которое мы проверяем. Если оно верно, выполняется первый блок кода (он отделен четырьмя пробелами вначале). Если неверно, то тот, что после else:.
Блоки кода в Python отделаются отступами. Отступ на самом деле может быть любым, например некоторые предпочитают использовать вместо четырех пробелов клавишу Tab. Главное — не смешивать в одной программе отступы разного типа. Если уж начал использовать четыре пробела, то используй по всей программе, а то Python будет на тебя ругаться и унижать.
Еще один важный момент здесь — это знак равенства в условии. Он пишется как двойное «равно» (==) и этим отличается от присвоения — одинарного «равно».
Функция lower(), прежде чем сравнивать условие, делает все буквы в строке маленькими, потому что глупый юзер может ввести слово YES с горящим Caps Lock, и это надо предусмотреть заранее.
На самом деле lower() — не просто функция, а метод класса string (строка). Именно поэтому он вызывается через точку после переменной, которая содержит строку. О классах и методах мы поговорим как‑нибудь в другой раз, а пока просто запомни, что некоторые функции вызываются таким образом.
Давай попробуем сделать условие для проверки логина и пароля, используя оператор И, который пишется как and. Он нужен для того, чтобы проверить одновременно выполнение первого и второго условия.
myname = input('Введите логин: ')
mypass = input('Введите пароль: ')
if myname == 'xakep' and mypass == 'superpassword123':
result = 'Добро пожаловать, о великий хакер!'
else:
result = 'Ты кто такой, давай до свидания...'
print(result)
Оператор в Python — это символ, который выполняет операцию над одной или несколькими переменными или значениями: арифметические («плюс», «минус», «равно» и так далее), сравнения (двойное «равно», «больше», «меньше» и прочее), присваивания (равно и несколько других), логические операторы (and, or, not), операторы членства (in, not in) и операторы тождественности (is, is not). Еще есть побитовые операторы для сравнения двоичных чисел.
Давай создадим еще более сложное условие, использовав оператор or, который переводится как ИЛИ.
myname = input('Введите логин: ')
mypass = input('Введите пароль: ')
if(myname == 'ivan' and mypass == 'superpassword123') or (myname == 'marina' and mypass == 'marinka93'):
result = 'Привет, ' + myname + '. Добро пожаловать!'
else:
result = 'Ты кто такой, давай до свидания...'
print(result)
Здесь используются скобки — Python не требует скобок для простых условий, но для сложных они применяются, чтобы явно определить порядок действий. Программа приветствует только двух пользователей, ivan или marina. То есть сначала проверяется, не совпали ли логин и пароль с логином и паролем Ивана, а потом после оператора or проверяется то же для Марины.
Когда нужно проверить не одно, а сразу два или три условия, ты можешь заключить каждое из них в скобки, а между ними ставить операторы or или and. В случае or общее условие выполняется, если выполняется хотя бы одно из входящих в него условий. В случае с and, чтобы общее условие выполнилось, должны выполниться оба входящих в него условия.
Вот еще пример, в нем используется elif, который означает что‑то вроде ИНАЧЕ‑ЕСЛИ. Это применяется для задания нескольких блоков команд: в случае, если одно условие не выполняется, с помощью ELIF проверяется следующее и так далее.
v = int(input('Введи, сколько тебе лет: '))
if v < 18:
print('Привет, юный хацкер')
elif v < 30:
print('Превед, олдскул')
elif v < 65:
print('Решил пересесть с ассемблера на Python?')
elif v < 100:
print('На пенсии — самое время покодить')
elif v < 100000:
print('Клан бессмертных приветствует тебя!')
В качестве условий могут выступать различные операторы сравнения:
- a == 9 (a равно 9)
- a != 7 (a не равно 7)
- a > 5 (a больше 5)
- a < 5 (a меньше 5)
- a >= 3 (a больше или равно 3)
- a <= 8 (a меньше или равно 8)
Ты также можешь инвертировать истинность условия (true) на ложность (false) и обратно с помощью слова not.
beer = input('Введи Yes, если пиво есть, и No, если пива нет: ')
if beer.lower() == 'yes':
print('Пива нет!')
if not beer.lower() == 'yes':
print('Ура, пиво еще есть!')
Например, нужно, чтобы человек ввел число не (NOT) меньше 5.
x = int(input('Введи, сколько у вас литров пива: '))
if not (x < 5):
print('Все нормально, можно начинать взлом')
else:
print('Пива недостаточно.')