Menu
Coddy logo textTech

Ausgaben erfassen

Teil des Abschnitts Logik und Ablaufsteuerung der R-Journey von Coddy. Lektion 57 von 64.

In diesem Projekt erstellst du einen Ausgaben-Tracker, der Befehle zeilenweise einliest. In fünf Schritten lernst du, Ausgaben zu erfassen, die Gesamtsumme auszugeben, Ausgaben nach Kategorie zu gruppieren, die größten Ausgaben aufzulisten und einen Monat zusammenzufassen. Jeder Schritt erweitert dieselbe tracker(commands)-Funktion.

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

Die Ausgaben befinden sich in einem Dataframe mit einer Zeile pro Ausgabe. Er beginnt mit drei leeren Spalten des richtigen Typs, und rbind() fügt für jedes gültige ADD eine Zeile hinzu:

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)

Ausgabe:

[1] 1
[1] 12.5

Eine ADD-Zeile muss vier Teile und einen positiven Betrag enthalten. Wandle den Betrag mit suppressWarnings(as.numeric()) um, damit ein ungültiger Wert NA statt einer Warnung ergibt, und überprüfe ihn dann, bevor du die Zeile hinzufügst:

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

Ausgabe:

[1] FALSE
challenge icon

Aufgabe

Einfach

Vervollständige tracker(commands) für den ersten Befehl:

  • ADD <date> <category> <amount>: Wenn die Zeile genau vier Teile enthält und der Betrag eine Zahl größer als 0 ist, füge die Ausgabe hinzu und antworte mit added <category> <amount>, wobei der Betrag mit zwei Dezimalstellen angegeben wird, zum Beispiel added food 12.50. Andernfalls antworte mit invalid: , gefolgt vom vollständigen Befehl.

Der bereitgestellte Code übergibt jede Eingabezeile als einen Befehl an tracker() und gibt jede zurückgegebene Antwort in einer eigenen Zeile aus. Datumsangaben werden als YYYY-MM-DD geschrieben, Kategorien sind kleingeschriebene Wörter, und die Eingabe enthält ausschließlich die bisher beschriebenen Befehle.

Probier es selbst

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]]
    # Schreibe deinen Code hier
  }
  replies
}

# Bereitgestellter Ein-/Ausgabecode: belasse ihn wie er ist
input <- suppressWarnings(readLines(file("stdin")))
cat(tracker(input), sep = "\n")
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik und Ablaufsteuerung

Übe selbstständig: Online-R-Compiler