Điểm trung bình của học sinh
Thuộc phần Logic và luồng điều khiển trong hành trình R của Coddy. Bài học 24 trên 64.
Thử thách
DễThêm lệnh AVG. Giữ cho mọi lệnh từ các bước trước tiếp tục hoạt động chính xác như trước.
AVG <name>: trả lờino student <name>nếu không biết học sinh đó,<name>: no gradesnếu học sinh chưa có điểm, nếu không thì trả lời<name>:theo sau là điểm trung bình của các điểm số, được định dạng với một chữ số thập phân, chẳng hạn nhưada: 88.8.
Một hàm trợ giúp chuyển một vectơ điểm số thành no grades hoặc điểm trung bình đã định dạng sẽ hữu ích ở bước tiếp theo.
Code được cung cấp chuyển từng dòng đầu vào cho gradebook() dưới dạng một lệnh và in từng câu trả lời trả về trên một dòng riêng. Tên là một từ viết thường, và đầu vào chỉ chứa các lệnh đã mô tả đến thời điểm này.
Tự làm thử
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))
}
}
}
replies
}
# Đoạn code đầu vào/đầu ra đã cung cấp: giữ nguyên
input <- suppressWarnings(readLines(file("stdin")))
cat(gradebook(input), sep = "\n")
Tất cả bài học trong Logic và luồng điều khiển
1Chuỗi chuyên sâu
Chuỗi con với substr()Định dạng với sprintf()Tách và nối chuỗiTìm kiếm trong chuỗiThay thế văn bảnÔn tập: Tạo tên người dùng10Luồng điều khiển nâng cao
Hàm switch()ifelse() dạng vector hóarepeat và breakHàm đệ quyÔn tập: phân loại điểmTự luyện tập: Trình biên dịch R online