Подсчёт
Второй шаблон — подсчёт: сколько дней, грядок или яиц удовлетворяют условию? Он похож на суммирование, но вместо значения вы прибавляете 1, и только тогда, когда так решает if.
Торговец Гуго приезжает на ферму каждый 5-й день. Сколько раз он приедет за 30 дней?
local visits = 0
for day = 1, 30 do
if day % 5 == 0 then
visits = visits + 1
end
end
print("Визитов Гуго: " .. visits)Визитов Гуго: 6Счётчик visits начинается с 0, до цикла. Цикл проходит по каждому дню, а if решает, считать ли его. Оператор % вы знаете из урока «Переменные и типы»: он даёт остаток от деления. Условие day % 5 == 0 истинно, когда день делится на 5 без остатка, то есть каждый 5-й день: 5, 10, 15, 20, 25 и 30. С % 7 вы получили бы каждый 7-й день, а с % 2 — каждый второй день (чётные). Результат, как и раньше, выводится после цикла.
Обратите внимание на два end: первый закрывает if, второй — цикл. Когда с каждым уровнем отступ растёт на 4 пробела, видно, какой end к чему относится. Если visits = visits + 1 окажется вне if (но всё ещё в цикле), программа посчитает каждый день и выведет Визитов Гуго: 30.
Один цикл может считать сразу несколько вещей, каждую в своём счётчике. С if и else каждый день считается ровно один раз, в одном счётчике или в другом:
local visits = 0
local quiet = 0
for day = 1, 30 do
if day % 5 == 0 then
visits = visits + 1
else
quiet = quiet + 1
end
end
print("Дней с Гуго: " .. visits)
print("Дней без Гуго: " .. quiet)Дней с Гуго: 6
Дней без Гуго: 246 + 24 будет 30, по одному на каждый день. Сложить счётчики так — быстрый способ проверить, что вы посчитали правильно.
Задание
- 1
В этом сезоне дождь идёт каждый 3-й день: в дни 3, 6, 9 и так далее. Посчитайте дождливые дни: создайте локальную переменную
rainyсо значением0, пройдите по дням от 1 доdaysцикломforи для каждого дня, который делится на 3, увеличивайтеrainyна 1. После цикла выведите:Дождливых дней: 13 - 2
Во все остальные дни Эмме приходится поливать. Посчитайте их в том же цикле: до цикла создайте локальную переменную
dryсо значением0и увеличивайте её в веткеelse. После цикла выведите результат на строке под дождливыми днями:Дождливых дней: 13 Сухих дней: 27 - 3
Эмма ходит на ярмарку каждый 7-й день, но не в дождь. В том же цикле посчитайте в третьем счётчике,
market, дни, которые делятся на 7, но не делятся на 3. В конце выведите:Дней ярмарки: 4