Lua Academy · Урок

string.format для вывода

Форматируйте строки с помощью %s, %d, %f и других спецификаторов формата.

Урок 3 из 412 шагов

«string.format для вывода» — бесплатный урок Lua Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Lua Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Lua Academy содержит 4 уроков всего.

Основы string.format

string.format(fmt, ...) форматирует значения с помощью спецификаторов формата в стиле C. Функция возвращает отформатированную строку. Строка формата содержит обычный текст и спецификаторы преобразования, начинающиеся с %. Это основной способ получать точный вывод в Lua.

print(string.format("Hello, %s!", "Lua"))      -- Hello, Lua!
print(string.format("Pi is %.4f", math.pi))   -- Pi is 3.1416
print(string.format("%d items at $%.2f each", 5, 2.99))

%d и %i для целых чисел

%d и %i форматируют целые числа. Добавьте ширину для выравнивания: %5d дополняет значение справа до 5 символов. %-5d выравнивает его по левому краю. %05d дополняет нулями. Эти спецификаторы усекают дробные числа — при необходимости сначала используйте math.floor().

print(string.format("%d",  42))       -- 42
print(string.format("%5d", 42))       --    42 (right-aligned)
print(string.format("%-5d|", 42))     -- 42   | (left-aligned)
print(string.format("%05d", 42))      -- 00042
print(string.format("%+d", 42))       -- +42

%f и %e для дробных чисел

%f форматирует число в обычной записи с фиксированной точкой, %e — в экспоненциальной, а %g выбирает более короткий вариант. Спецификатор точности, например %.2f, задаёт количество знаков после запятой. Точность по умолчанию равна 6.

print(string.format("%.2f",  3.14159)) -- 3.14
print(string.format("%10.3f", 3.14))   --      3.140
print(string.format("%e", 12345.678))  -- 1.234568e+04
print(string.format("%.2e", 0.001))    -- 1.00e-03
print(string.format("%g", 100.0))      -- 100

%s для строк

%s вставляет строку. Значения других типов преобразуются с помощью tostring. Ширина и выравнивание работают так же, как для чисел. %q заключает строку в кавычки в формате, пригодном для чтения Lua, включая управляющие последовательности; это удобно для сериализации.

print(string.format("%-10s|", "hi"))   -- hi        |
print(string.format("%10s|", "hi"))    --         hi|
print(string.format("%.3s", "hello"))  -- hel (truncate)
print(string.format("%q", 'say "hi"'))-- "say \"hi\""
print(string.format("%s=%s", "key","val")) -- key=val

%x и %o для других оснований

%x форматирует целое число в шестнадцатеричном виде, используя строчные буквы; %X — в шестнадцатеричном виде с прописными буквами; %o — в восьмеричном; %u — как беззнаковое целое. Это удобно для отображения битовых масок, цветовых кодов и низкоуровневого программирования.

print(string.format("%x",  255))   -- ff
print(string.format("%X",  255))   -- FF
print(string.format("%#x", 255))   -- 0xff (with prefix)
print(string.format("%o",  8))     -- 10 (octal)
print(string.format("%08x", 0xDEAD)) -- 0000dead

Несколько значений

Передавайте столько аргументов, сколько указано спецификаторов формата. Количество аргументов должно совпадать: слишком малое количество вызывает ошибку, а лишние аргументы игнорируются. Используйте строки формата для создания структурированного вывода, например таблиц, журналов или отчётов.

local function printRow(name, score, grade)
  print(string.format("%-12s  %3d  %s", name, score, grade))
end

printRow("Alice",    95, "A")
printRow("Bob",      87, "B")
printRow("Carol",    91, "A")
-- Alice         95  A
-- Bob           87  B
-- Carol         91  A

Создание шаблонов формата

Сохраняйте строки формата в виде констант, чтобы использовать их повторно. Это обеспечивает единообразный вывод и позволяет легко изменить формат в одном месте. Форматирование строк лежит в основе ведения журналов, вывода в формате CSV и создания отчётов.

local LOG_FMT = "[%s] %s: %s"

local function log(level, module, msg)
  print(string.format(LOG_FMT, level, module, msg))
end

log("INFO",  "server", "started on port 8080")
log("WARN",  "db",     "connection pool low")
log("ERROR", "auth",   "token expired")

Заполнение и выравнивание

Используйте спецификаторы ширины для выравнивания вывода. Положительная ширина выравнивает по правому краю, отрицательная — по левому. Это особенно полезно для таблиц и отчётов, где столбцы должны располагаться ровно. Для создания разделительных линий объединяйте это с string.rep.

local fmt = "%-15s %6s %8s"
print(string.format(fmt, "Name", "Score", "Grade"))
print(string.rep("-", 31))
local data = {{"Alice",95,"A"},{"Bob",87,"B"},{"Dave",78,"C"}}
for _, r in ipairs(data) do
  print(string.format(fmt, r[1], r[2], r[3]))
end

%c и %% как литералы

%c преобразует целое число в соответствующий символ ASCII. %% выводит обычный знак процента. Это удобно для создания специальных символов или включения знака % в строки формата.

print(string.format("%c%c%c", 76, 117, 97))  -- Lua
print(string.format("100%%"))                -- 100%
print(string.format("%.1f%%", 87.5))         -- 87.5%

-- Build a progress bar
local pct = 65
local filled = math.floor(pct / 5)
local bar = "[" .. string.rep("#",filled) .. string.rep(".",20-filled) .. "]"
print(bar .. " " .. pct .. "%")

string.format и tostring

Используйте tostring для простого преобразования значения любого типа, а string.format — для управления точностью, заполнения и форматирования нескольких значений. При преобразовании в строку string.format("%s", val) внутренне вызывает tostring.

-- tostring: simple, any type
print(tostring(3.14))      -- 3.14
print(tostring(true))      -- true
print(tostring(nil))       -- nil

-- string.format: precision + structure
print(string.format("%.2f", 3.14159))  -- 3.14
print(string.format("%d", 255))        -- 255
-- print(string.format("%d", true))    -- ERROR

Быстрая проверка

Что возвращает string.format("%05.2f", 3.1)?

Итоги: string.format

Краткое повторение:

  • %s — строка, %d — целое число, %f — дробное число, %x — шестнадцатеричное число
  • Ширина: %10d — выравнивание по правому краю, %-10d — по левому, %010d — заполнение нулями
  • Точность: %.2f — 2 знака после запятой, %.3s — 3 символа
  • %q заключает строку в кавычки для разбора Lua
  • %% — обычный знак процента
Можно начать бесплатно

Изучай Lua с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
40
Уроки
159

Часто задаваемые вопросы

Урок «string.format для вывода» бесплатный?

Да — полный текст урока «string.format для вывода» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Lua Academy, подпишись на CoddyKit PRO. Курс Lua Academy содержит 4 уроков всего.

Чему я научусь в уроке «string.format для вывода»?

Форматируйте строки с помощью %s, %d, %f и других спецификаторов формата. Ты практикуешь Lua Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Lua Academy?

Предыдущий опыт не требуется. Lua Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «string.format для вывода»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Lua Academy?

Да. Каждый урок Lua Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Основы строк: объединение и длина
  2. Поиск и извлечение подстрок
  3. string.format для вывода
  4. string.gsub и string.gmatch
← Назад к Lua Academy