Menu
CoddyTech

Đ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.

challenge icon

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ời no student <name> nếu không biết học sinh đó, <name>: no grades nế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

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