Итоги
В этом уроке вы узнали, что:
if condition then … endвыполняет свой блок, только если условие истинно. Что относится к блоку, определяютthenиend; отступ в 4 пробела показывает это людям.elseдобавляет ветку на случай, когда условие ложно, аelseif(одно слово) добавляет ещё ветки со своими условиями. Выполняется только первая истинная ветка, поэтому порядок важен. Всю инструкцию закрывает одинend; дляelse ifпонадобился бы ещё один.- Операторы сравнения сравнивают два значения:
==,~=(а не!=),<,>,<=и>=.=присваивает, а==сравнивает. Строки равны, только если совпадают точно. Число никогда не равно строке, а сравнение их с помощью<или>— ошибка. - Переменная, созданная с
localвнутри блока, существует только до конца блока. Создавайте её доif, а в ветках меняйте. and,orиnotобъединяют условия. Каждая часть должна быть полным сравнением, аnotотносится только к значению сразу после него. Скобки группируют условия.- Ложью считаются только
falseиnil.0и""считаются истиной.if x thenспрашивает, есть ли уxзначение (неnilли оно). x or defaultдаёт значение по умолчанию вместоnil.condition and a or bвыбирает одно из двух значений, если толькоaнеfalseи неnil.- Один
ifможно вложить в другойif; каждыйendзакрывает ближайший открытыйif. - Для диапазона нужны два сравнения:
t >= 10 and t <= 25.10 <= t <= 25— ошибка. В цепочкеelseifкаждая ветка может рассчитывать на то, что условия выше неё были ложными.
Дальше вас ждёт небольшой проект, в котором вы самостоятельно примените всё из первых трёх уроков. А потом, в уроке о циклах, вы научитесь заставлять программу повторять код: например, чтобы перебрать все дни сезона.
Задание
- 1
Практика: торговец Гуго платит 10 монет за тыкву легче 4 кг, 20 монет за тыкву от 4 до 8 кг и 35 монет за более тяжёлую. Вместо комментария напишите инструкцию
ifсelseifиelse, которая задаётprice. При 9 кг программа выведет:Тыква: 9 кг Цена в монетах: 35 - 2
Неспелая тыква стоит только половину. Под вашей инструкцией
ifдобавьте ещё одну, которая уменьшает цену вдвое с помощьюprice // 2, когда тыква не спелая (используйтеnot). Потом прибавьте к ценеbonusот Гуго. Значениеbonusможет бытьnil, поэтому с помощьюorсчитайте отсутствующую добавку равной0и возьмите эту часть в скобки:(bonus or 0). Программа по-прежнему выводитЦена в монетах: 35. - 3
Попробуйте другую тыкву: замените
weightна8,isRipeнаfalse, аbonusна3. Программа выведет:Тыква: 8 кг Цена в монетах: 13Если цена получилась другой, проверьте границы: тыква в 8 кг всё ещё средняя.