Menu
Coddy logo textTech

Enregistrer les dépenses

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

Dans ce projet, vous construisez un outil de suivi des dépenses qui lit des commandes, une par ligne. En cinq étapes, il apprend à enregistrer les dépenses, à afficher le total, à regrouper les dépenses par catégorie, à répertorier les dépenses les plus importantes et à récapituler un mois. Chaque étape étend la même fonction tracker(commands).

ADD 2024-05-01 food 12.50
ADD 2024-05-02 rent 500
TOTAL
CATEGORY
TOP 2
MONTH 2024-05

Les dépenses sont stockées dans un data frame avec une ligne par dépense. Il commence avec trois colonnes vides des types appropriés, et rbind() ajoute une ligne pour chaque ADD valide :

expenses <- data.frame(date = character(0), category = character(0), amount = numeric(0))
expenses <- rbind(expenses, data.frame(date = "2024-05-01", category = "food", amount = 12.5))
print(nrow(expenses))
print(expenses$amount)

Sortie :

[1] 1
[1] 12.5

Une ligne ADD doit comporter quatre parties et un montant positif. Convertissez le montant avec suppressWarnings(as.numeric()) afin qu’une valeur incorrecte donne NA au lieu d’un avertissement, puis vérifiez-le avant d’ajouter la ligne :

parts <- strsplit("ADD 2024-05-01 food abc", " ")[[1]]
amount <- suppressWarnings(as.numeric(parts[4]))
print(length(parts) == 4 && !is.na(amount) && amount > 0)

Sortie :

[1] FALSE
challenge icon

Défi

Facile

Complétez tracker(commands) pour la première commande :

  • ADD <date> <category> <amount> : si la ligne comporte exactement quatre parties et que le montant est un nombre supérieur à 0, ajoutez la dépense et renvoyez added <category> <amount> avec le montant affiché avec deux décimales, par exemple added food 12.50. Sinon, renvoyez invalid: suivi de la commande entière.

Le code fourni transmet chaque ligne d'entrée à tracker() comme une commande et affiche chaque réponse renvoyée sur sa propre ligne. Les dates sont écrites au format YYYY-MM-DD, les catégories sont des mots en minuscules et l'entrée contient uniquement les commandes décrites jusqu'à présent.

Essayez vous-même

tracker <- function(commands) {
  expenses <- data.frame(date = character(0), category = character(0), amount = numeric(0))
  replies <- c()
  for (cmd in commands) {
    parts <- strsplit(cmd, " ")[[1]]
    # Écrivez votre code ici
  }
  replies
}

# Code d'entrée/sortie fourni : gardez-le tel quel
input <- suppressWarnings(readLines(file("stdin")))
cat(tracker(input), 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