Menu
CoddyTech

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 nauczysz go 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 znajdują się na nazwanej liście: nazwisko każdego ucznia jest powiązane z wektorem liczbowym zawierającym jego oceny. Lista pasuje, 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: to NULL, a przypisanie NULL usuwa element listy.

Każde polecenie jest rozdzielane na spacje, 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 zwróć added <name>. Jeśli imię jest już zapisane, zwróć <name> already exists.

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 słowa zapisanego małymi literami, a wejście zawiera tylko 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]
    # 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