Menu
Coddy logo textTech

Средние оценки учеников

Часть раздела Логика и потоки выполнения путешествия по R на Coddy. Урок 24 из 64.

challenge icon

Задание

Легко

Добавьте команду AVG. Все команды из предыдущих шагов должны работать точно так же, как и раньше.

  • AVG <name>: возвращайте no student <name> для неизвестного ученика, <name>: no grades для ученика без оценок, а в противном случае — <name>: , за которым следует среднее значение его оценок с одним десятичным знаком, например ada: 88.8.

На следующем шаге снова пригодится вспомогательная функция, которая преобразует вектор оценок в no grades или форматированное среднее значение.

Предоставленный код передаёт каждую входную строку в gradebook() как одну команду и выводит каждый возвращённый ответ на отдельной строке. Имя представляет собой одно слово в нижнем регистре, а ввод содержит только описанные на данный момент команды.

Попробуйте сами

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
}

# Предоставленный код ввода/вывода: оставьте его как есть
input <- suppressWarnings(readLines(file("stdin")))
cat(gradebook(input), sep = "\n")

Все уроки раздела Логика и потоки выполнения

Потренируйтесь самостоятельно: Онлайн-компилятор R