Menu
Coddy logo textTech

Форматирование с sprintf()

Часть раздела Логика и потоки выполнения путешествия по R на Coddy. Урок 2 из 64.

sprintf() создаёт строку из шаблона. Каждый заполнитель % заменяется следующим аргументом: %s — для текста, %d — для целых чисел, а %f — для десятичных чисел.

name <- "Ada"
age <- 36
print(sprintf("%s is %d years old", name, age))

Вывод:

[1] "Ada is 36 years old"

%d принимает только целые числа: sprintf("%d", 2.5) завершается с ошибкой.

Точность между % и f задаёт количество знаков после запятой, поэтому %.2f округляет до двух знаков:

total <- 3 * 4.5 * 1.2
print(sprintf("Total: %.2f", total))

Вывод:

[1] "Total: 16.20"

Ширина дополняет значение до указанного количества символов: %5d дополняет слева, %-6s дополняет справа, а %03d дополняет нулями. %% выводит знак процента.

print(sprintf("[%5d]", 42))
print(sprintf("[%-6s]", "tea"))
print(sprintf("%03d", 7))
print(sprintf("%d%%", 85))

Вывод:

[1] "[   42]"
[1] "[tea   ]"
[1] "007"
[1] "85%"

sprintf() векторизована: с векторными аргументами она возвращает по одной строке для каждого элемента. cat() с sep = "\n" выводит каждую строку на отдельной строке.

items <- c("tea", "cake")
prices <- c(4, 12.5)
lines <- sprintf("%-5s %6.2f", items, prices)
cat(lines, sep = "\n")

Результат:

tea     4.00
cake   12.50
challenge icon

Задание

Легко

Завершите receipt_line(item, qty, price). Верните товар, количество и итоговую сумму строки (qty * price) в форме tea x3 = 13.50: товар, пробел, x, за которым следует количество, затем = и итоговая сумма ровно с двумя знаками после запятой.

Предоставленный код считывает товар, количество и цену (по одному значению в строке) и выводит возвращённое значение.

Попробуйте сами

receipt_line <- function(item, qty, price) {
  # Напишите свой код здесь
  ""
}

# Предоставленный код ввода/вывода: оставьте его как есть
input <- suppressWarnings(readLines(file("stdin")))
cat(receipt_line(input[1], as.integer(input[2]), as.numeric(input[3])), sep = "\n")
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и потоки выполнения

Потренируйтесь самостоятельно: Онлайн-компилятор R