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-05Le 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.5Una 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] FALSESfida
FacileCompleta 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 rispondiadded <category> <amount>con l'importo espresso con due cifre decimali, ad esempioadded food 12.50. Altrimenti rispondiinvalid: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")
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Le stringhe in dettaglio
Sottostringhe con substr()Formattazione con sprintf()Dividere e unireRicerca nelle stringheSostituzione del testoRipasso - Generatore di nomi utente4Matrici
Creazione di matriciIndicizzazione delle matriciRiepiloghi di righe e colonneOperazioni aritmetiche con le matriciRipasso - Schema dei posti a sedere10Flusso di controllo avanzato
La funzione switch()ifelse() vettorialerepeat e breakFunzioni ricorsiveRiepilogo - Classificatore di voti2Ricerche chiave-valore
Ricerche in vettori con nomiControllare le chiaviAggiungere e rimuovere chiaviIterare sui nomiRiepilogo - Sportello titoli5Progetto - Registro dei voti
Aggiungere studentiRegistrare i voti8Ordinamento e raggruppamento
Ordinare i vettoriOrdinare in base a una chiaveRaggruppare con split()Riepiloghi dei gruppiRipasso - Classifica3Insiemi e conteggio
Valori univociOperazioni sugli insiemiTest di appartenenzaConteggio con table()Riepilogo - Ospiti dell’evento6Le funzioni come valori
Funzioni anonimePassare funzioniRestituire funzioniClosure con statoRiepilogo - Regole di sconto9DataFrame
Creare DataFrameColonne e righeFiltrare le righeAggiungere e ordinareRiepilogo - Report delle vendite12Progetto - Gestione delle spese
Registrare le speseSpesa totaleEsercitati da solo: Compilatore R online