Menu
Coddy logo textTech

Mise en forme avec sprintf()

Fait partie de la section Logique et flux d’exécution du Journey R de Coddy. Leçon 2 sur 64.

sprintf() construit une chaîne à partir d’un modèle. Chaque espace réservé % est remplacé par l’argument suivant : %s pour le texte, %d pour les nombres entiers et %f pour les nombres décimaux.

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

Sortie :

[1] "Ada is 36 years old"

%d accepte uniquement les nombres entiers : sprintf("%d", 2.5) s’arrête avec une erreur.

Une précision entre % et f définit le nombre de décimales, ainsi %.2f arrondit à deux décimales :

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

Sortie :

[1] "Total: 16.20"

Une largeur complète la valeur jusqu'à atteindre ce nombre de caractères : %5d complète à gauche, %-6s complète à droite et %03d complète avec des zéros. %% affiche un signe de pourcentage.

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

Sortie :

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

sprintf() est vectorisé : avec des arguments vectoriels, il renvoie une chaîne par élément. cat() avec sep = "\n" affiche chaque chaîne sur sa propre ligne.

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

Sortie :

tea     4.00
cake   12.50
challenge icon

Défi

Facile

Complétez receipt_line(item, qty, price). Renvoyez l’article, la quantité et le total de la ligne (qty * price) sous la forme tea x3 = 13.50 : l’article, un espace, x suivi de la quantité, puis = et le total avec exactement deux décimales.

Le code fourni lit l’article, la quantité et le prix (un par ligne), puis affiche la valeur renvoyée.

Essayez vous-même

receipt_line <- function(item, qty, price) {
  # Écrivez votre code ici
  ""
}

# Code d'entrée/sortie fourni : conservez-le tel quel
input <- suppressWarnings(readLines(file("stdin")))
cat(receipt_line(input[1], as.integer(input[2]), as.numeric(input[3])), sep = "\n")
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique et flux d’exécution

Entraînez-vous par vous-même : Compilateur R en ligne