Thêm 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 22 trên 64.
Trong dự án này, bạn xây dựng một sổ điểm đọc các lệnh, mỗi dòng một lệnh, rồi phản hồi từng lệnh. Qua năm bước, sổ điểm học cách thêm học sinh, ghi điểm, báo cáo điểm trung bình và tìm học sinh có điểm cao nhất. Mỗi bước mở rộng cùng một hàm gradebook(commands).
ADD ada
GRADE ada 90
AVG ada
REPORT
TOPĐiểm số nằm trong một danh sách có tên: tên của mỗi học sinh ánh xạ đến một vector số gồm điểm số của học sinh đó. Danh sách phù hợp vì mỗi học sinh có nhiều giá trị.
grades <- list()
grades[["ada"]] <- numeric(0)
grades[["ada"]] <- c(grades[["ada"]], 90)
print(length(grades[["ada"]]))
print(names(grades))Đầu ra:
[1] 1
[1] "ada"numeric(0) là một vector số rỗng. Gán c() sẽ không hoạt động ở đây: nó là NULL, và gán NULL sẽ xóa một mục trong danh sách.
Mỗi lệnh được tách tại dấu cách, vì vậy parts[1] là lệnh và parts[2] là tên. Một chuỗi if / else if sẽ chọn việc cần làm:
for (cmd in commands) {
parts <- strsplit(cmd, " ")[[1]]
name <- parts[2]
if (parts[1] == "ADD") {
# xử lý ADD
}
}Các phản hồi được gom lại bằng replies <- c(replies, ...) và trả về ở cuối.
Thử thách
DễHoàn thiện gradebook(commands) để xử lý lệnh đầu tiên:
ADD <name>: nếu học sinh chưa có trong danh sách, hãy lưu tên họ mà chưa có điểm nào và trả lờiadded <name>. Nếu tên đã có trong danh sách, hãy trả lời<name> already exists.
Code được cung cấp truyền mỗi dòng đầu vào cho gradebook() dưới dạng một lệnh và in từng câu trả lời được 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]
# Viết code của bạn tại đây
}
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")
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiế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