Laporan Kelas
Termasuk bagian Logika dan Alur dalam perjalanan R di Coddy. Pelajaran 25 dari 64.
Tantangan
MudahTambahkan perintah REPORT. Pastikan setiap perintah dari langkah sebelumnya tetap berfungsi persis seperti sebelumnya.
REPORT: balas dengan satu baris untuk setiap siswa yang tersimpan, dalam urutan alfabetis, dengan format seperti balasan untukAVG(ada: 88.8ataubo: no grades). Lalu tambahkan barisClass average:diikuti rata-rata semua nilai yang tercatat dari setiap siswa dengan satu angka desimal, atauno gradesjika belum ada nilai yang tercatat.
Satu perintah REPORT menghasilkan beberapa balasan, dan setiap balasan dicetak pada barisnya sendiri.
Kode yang disediakan meneruskan setiap baris input ke gradebook() sebagai satu perintah dan mencetak setiap balasan yang dikembalikan pada barisnya sendiri. Nama terdiri dari satu kata berhuruf kecil, dan input hanya berisi perintah yang telah dijelaskan sejauh ini.
Coba sendiri
average_text <- function(scores) {
if (length(scores) == 0) "no grades" else sprintf("%.1f", mean(scores))
}
gradebook <- function(commands) {
grades <- list()
replies <- c()
for (cmd in commands) {
parts <- strsplit(cmd, " ")[[1]]
name <- parts[2]
if (parts[1] == "ADD") {
if (name %in% names(grades)) {
replies <- c(replies, paste(name, "already exists"))
} else {
grades[[name]] <- numeric(0)
replies <- c(replies, paste("added", name))
}
} else if (parts[1] == "GRADE") {
if (!(name %in% names(grades))) {
replies <- c(replies, paste("no student", name))
} else {
score <- as.numeric(parts[3])
grades[[name]] <- c(grades[[name]], score)
replies <- c(replies, paste("recorded", score, "for", name))
}
} else if (parts[1] == "AVG") {
if (!(name %in% names(grades))) {
replies <- c(replies, paste("no student", name))
} else {
replies <- c(replies, paste0(name, ": ", average_text(grades[[name]])))
}
}
}
replies
}
# Kode input/output yang disediakan: biarkan apa adanya
input <- suppressWarnings(readLines(file("stdin")))
cat(gradebook(input), sep = "\n")
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