Mencatat Pengeluaran
Termasuk bagian Logika dan Alur dalam perjalanan R di Coddy. Pelajaran 57 dari 64.
Dalam proyek ini, kamu membangun pencatat pengeluaran yang membaca perintah, satu per baris. Dalam lima langkah, program ini belajar mencatat pengeluaran, melaporkan total, mengelompokkan pengeluaran berdasarkan kategori, mencantumkan pengeluaran terbesar, dan merangkum satu bulan. Setiap langkah mengembangkan fungsi tracker(commands) yang sama.
ADD 2024-05-01 food 12.50
ADD 2024-05-02 rent 500
TOTAL
CATEGORY
TOP 2
MONTH 2024-05Pengeluaran tersimpan dalam data frame dengan satu baris untuk setiap pengeluaran. Data frame ini dimulai dengan tiga kolom kosong yang bertipe tepat, lalu rbind() menambahkan satu baris untuk setiap ADD yang valid:
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.5Baris ADD harus memiliki empat bagian dan jumlah positif. Ubah jumlah tersebut dengan suppressWarnings(as.numeric()) agar nilai yang tidak valid menghasilkan NA, bukan peringatan, lalu periksa sebelum menambahkan baris:
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] FALSETantangan
MudahLengkapi tracker(commands) untuk perintah pertama:
ADD <date> <category> <amount>: jika baris tersebut memiliki tepat empat bagian dan jumlahnya adalah angka yang lebih besar dari 0, tambahkan pengeluaran tersebut dan berikan balasanadded <category> <amount>dengan jumlah hingga dua angka desimal, sepertiadded food 12.50. Jika tidak, berikan balasaninvalid:diikuti seluruh perintah.
Kode yang disediakan meneruskan setiap baris input ke tracker() sebagai satu perintah dan mencetak setiap balasan yang dikembalikan pada barisnya sendiri. Tanggal ditulis dalam format YYYY-MM-DD, kategori berupa kata berhuruf kecil, dan input hanya berisi perintah yang telah dijelaskan sejauh ini.
Coba sendiri
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]]
# Tulis kodemu di sini
}
replies
}
# Kode input/output yang disediakan: biarkan apa adanya
input <- suppressWarnings(readLines(file("stdin")))
cat(tracker(input), sep = "\n")
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika dan Alur
1Mendalami string
Substring dengan substr()Memformat dengan sprintf()Memisahkan dan MenggabungkanMencari stringMengganti TeksRangkuman: Pembuat Nama Pengguna4Matriks
Membuat MatriksMengakses Elemen MatriksRingkasan Baris dan KolomAritmetika MatriksRangkuman: Denah Tempat Duduk2Pencarian Nilai-Kunci
Pencarian pada Vector BernamaMemeriksa KunciMenambahkan dan Menghapus KunciMenelusuri NamaUlasan: Meja Saham5Proyek, Buku Nilai
Menambahkan SiswaMencatat Nilai3Set dan Penghitungan
Nilai UnikOperasi setPengujian KeanggotaanMenghitung dengan table()Ulasan: Tamu Acara6Fungsi sebagai Nilai
Fungsi AnonimMengirim FungsiMengembalikan FungsiClosure dengan StateRangkuman: Aturan Diskon9Data Frame
Membuat Data FrameKolom dan BarisMemfilter BarisMenambahkan dan MengurutkanRangkuman: Laporan Penjualan12Proyek: Pelacak Pengeluaran
Mencatat PengeluaranTotal PengeluaranLatihan sendiri: Compiler R online