Menu
Coddy logo textTech

Dodawanie uczniów

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

W tym projekcie zbudujesz dziennik ocen, który odczytuje polecenia, po jednym w wierszu, i odpowiada na każde z nich. W pięciu krokach nauczy się dodawać uczniów, zapisywać oceny, podawać średnie i znajdować ucznia z najwyższą oceną. Każdy krok rozszerza tę samą funkcję gradebook(commands).

ADD ada
GRADE ada 90
AVG ada
REPORT
TOP

Oceny są przechowywane na nazwanej liście: imię i nazwisko każdego ucznia jest powiązane z wektorem liczbowym zawierającym oceny tego ucznia. Lista się sprawdza, ponieważ każdy uczeń ma kilka wartości.

grades <- list()
grades[["ada"]] <- numeric(0)
grades[["ada"]] <- c(grades[["ada"]], 90)
print(length(grades[["ada"]]))
print(names(grades))

Wynik:

[1] 1
[1] "ada"

numeric(0) to pusty wektor liczbowy. Przypisanie c() nie zadziałałoby w tym przypadku: zwraca ono NULL, a przypisanie NULL usuwa element listy.

Każde polecenie jest dzielone w miejscach spacji, więc parts[1] to polecenie, a parts[2] to nazwa. Łańcuch if / else if wybiera, co zrobić:

for (cmd in commands) {
  parts <- strsplit(cmd, " ")[[1]]
  name <- parts[2]
  if (parts[1] == "ADD") {
    # obsłuż ADD
  }
}

Odpowiedzi są zbierane za pomocą replies <- c(replies, ...) i zwracane na końcu.

challenge icon

Wyzwanie

Łatwy

Uzupełnij gradebook(commands) dla pierwszego polecenia:

  • ADD <name>: jeśli uczeń jest nowy, zapisz go bez ocen i odpowiedz added <name>. Jeśli nazwa jest już zapisana, odpowiedz <name> already exists.

Dostarczony kod przekazuje każdy wiersz wejścia do gradebook() jako jedno polecenie i wyświetla każdą zwróconą odpowiedź w osobnym wierszu. Nazwa to jedno słowo zapisane małymi literami, a wejście zawiera tylko dotychczas opisane polecenia.

Spróbuj swoich sił

gradebook <- function(commands) {
  grades <- list()
  replies <- c()
  for (cmd in commands) {
    parts <- strsplit(cmd, " ")[[1]]
    name <- parts[2]
    # Wpisz tutaj swój kod
  }
  replies
}

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

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ sterowania

Poćwicz samodzielnie: Kompilator R online