Menu
Coddy logo textTech

Średnie uczniów

Część sekcji Logika i przepływ sterowania ścieżki R w Coddy. Lekcja 24 z 64.

challenge icon

Wyzwanie

Łatwy

Dodaj polecenie AVG. Wszystkie polecenia z poprzednich kroków mają nadal działać dokładnie tak jak wcześniej.

  • AVG <name>: odpowiedz no student <name> w przypadku nieznanego ucznia, <name>: no grades w przypadku ucznia bez ocen, a w pozostałych przypadkach podaj <name>: , a następnie średnią jego ocen z jednym miejscem po przecinku, na przykład ada: 88.8.

Funkcja pomocnicza, która zamienia wektor wyników na no grades lub sformatowaną średnią, przyda się również w następnym kroku.

Dostarczony kod przekazuje każdy wiersz wejścia do gradebook() jako jedno polecenie i wypisuje każdą zwróconą odpowiedź w osobnym wierszu. Imię składa się z jednego wyrazu pisanego małymi literami, a wejście zawiera wyłącznie opisane dotąd polecenia.

Spróbuj swoich sił

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
}

# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
input <- suppressWarnings(readLines(file("stdin")))
cat(gradebook(input), sep = "\n")

Wszystkie lekcje w sekcji Logika i przepływ sterowania

Poćwicz samodzielnie: Kompilator R online