Краткий ответ
1. Переменные — это именованные «ячейки памяти»: программа кладёт в них значение, потом читает его по имени и при необходимости заменяет новым. Пример: score = 0, затем score = score + 10 — имя то же, значение новое.
2. Условное выражение if — проверка условия и действие только при его выполнении:
- «Если на улице дождь, то беру зонт»;
- «Если горит красный свет, то стою и жду зелёного».
3. Случайные значения нужны, чтобы поведение программы было непредсказуемым: броски кубика и раздача карт в играх, поведение врагов, проверка программы на разных данных, пароли и шифрование, жеребьёвка и лотереи.
Как это устроено (принцип)
Переменная. У переменной два «слоя»: имя (метка, по которой её находят) и значение (то, что лежит в памяти). Когда пишешь score = score + 10, компьютер сначала берёт старое значение справа, прибавляет 10 и кладёт результат обратно под тем же именем. Поэтому переменная и называется переменной — её содержимое меняется по ходу программы. Без переменных пришлось бы каждый раз писать число заново и нельзя было бы, например, посчитать счёт в игре.
if. Любое условие — это вопрос, на который есть ответ «да» или «нет» (в коде — True/False). Схема: условие → если истинно, выполняется действие; если ложно — пропускается (или выполняется ветка else). В жизни ты постоянно так делаешь: смотришь на признак (дождь? красный свет?) и выбираешь действие. В учебнике пример «дверь закрыта и не открывается» как раз про это: проверяем состояние двери и решаем, что делать дальше.
Случайность. Компьютер по своей природе детерминирован: одинаковые команды дают одинаковый результат. Случайное число «ломает» эту предсказуемость — и именно она нужна в играх (иначе каждый раз одна и та же партия), в моделировании (случайные события), в тестировании (программа должна работать на любых данных, а не только на тех, что придумал автор) и в защите информации (ключи должны быть непредсказуемыми).
Проверь себя на коротком фрагменте:
lives = 3
lives = lives - 1 # стало 2 — имя одно, значение изменилось
if lives == 0:
print("Игра окончена") # не выполнится: 2 ≠ 0
Если можешь объяснить, почему print не сработал и чему равна lives, — принцип переменной и if ты понял.