Menu
CoddyTech

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.

challenge icon

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ời added <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")
quiz iconTự kiểm tra

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

Tự luyện tập: Trình biên dịch R online