Сумма в цикле
Циклы умеют не только выводить. Очень часто они складывают много значений. У Эммы поспевает клубника: в день 1 она собирает 1 корзину, в день 2 — две корзины, в день 3 — три, и так далее. Сколько корзин она соберёт за 10 дней?
local total = 0
for day = 1, 10 do
total = total + day
end
print("Корзин: " .. total)Корзин: 55Переменная total накапливает сумму. Она начинается с 0, потому что пока вы ничего не прибавили, сумма равна нулю. В каждой итерации total = total + day добавляет корзины одного дня. Чтобы увидеть, как растёт сумма, можно ненадолго вывести её прямо в цикле:
local total = 0
for day = 1, 5 do
total = total + day
print(total)
end1
3
6
10
15После дня 1 сумма равна 1, после дня 2 — 3 (1 + 2), затем 6 (1 + 2 + 3), и так далее. Вывод значений внутри цикла — самый простой способ выяснить, что на самом деле делает цикл, когда его результат вас удивляет.
Важно, где стоит каждая строка:
local total = 0стоит до цикла, чтобы выполниться только один раз. Внутри блока цикла она создавала бы новую переменнуюtotalсо значением 0 в каждой итерации. А после цикла такойtotalуже не существовал бы: локальная переменная, созданная в блоке, существует только в этом блоке, как и переменная циклаfor. Программа закончилась бы ошибкойattempt to concatenate a nil value (global 'total').printстоит после цикла, когда сумма уже готова. Внутри цикла он выводил бы каждую промежуточную сумму, как выше.
Среднее — это сумма, делённая на количество значений. Помните, что / всегда даёт дробное число:
local total = 0
for day = 1, 10 do
total = total + day
end
print("Среднее: " .. total / 10)Среднее: 5.5Вычисление total / 10 происходит раньше, чем склейка через .., поэтому скобки не нужны. Если бы сумма была равна 60, вы получили бы 6.0. Чтобы всегда выводить один знак после запятой, используйте string.format("%.1f", total / 10).
Задание
- 1
Сколько клубники Эмма соберёт за эти шесть дней? До цикла создайте локальную переменную
totalсо значением0. В цикле прибавляйте к ней клубнику за день,day * 3. После цикла выведите сумму:Всего: 63 - 2
В конце программы выведите среднее количество клубники в день:
total, делённое на6:Среднее: 10.5