Menu
Coddy logo textTech

Registrare le spese

Fa parte della sezione Logica e flusso del percorso R di Coddy. Lezione 57 di 64.

In questo progetto creerai un tracker delle spese che legge comandi, uno per riga. In cinque passaggi imparerà a registrare le spese, riportare il totale, raggruppare le uscite per categoria, elencare le spese maggiori e riepilogare un mese. Ogni passaggio estende la stessa funzione tracker(commands).

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

Le spese sono memorizzate in un data frame con una riga per ogni spesa. Inizia con tre colonne vuote dei tipi corretti e rbind() aggiunge una riga per ogni ADD valido:

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)

Output:

[1] 1
[1] 12.5

Una riga ADD deve avere quattro parti e un importo positivo. Converti l’importo con suppressWarnings(as.numeric()) in modo che un valore non valido restituisca NA invece di un avviso, quindi controllalo prima di aggiungere la riga:

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

Output:

[1] FALSE
challenge icon

Sfida

Facile

Completa tracker(commands) per il primo comando:

  • ADD <date> <category> <amount>: se la riga ha esattamente quattro parti e l'importo è un numero maggiore di 0, aggiungi la spesa e rispondi added <category> <amount> con l'importo espresso con due cifre decimali, ad esempio added food 12.50. Altrimenti rispondi invalid: seguito dall'intero comando.

Il codice fornito passa ogni riga di input a tracker() come un singolo comando e stampa ogni risposta restituita su una riga separata. Le date sono scritte nel formato YYYY-MM-DD, le categorie sono parole in minuscolo e l'input contiene solo i comandi descritti finora.

Provalo tu

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]]
    # Write your code here
  }
  replies
}

# Supplied input/output code: keep it as it is
input <- suppressWarnings(readLines(file("stdin")))
cat(tracker(input), sep = "\n")
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore R online