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
TOPOceny 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.
Wyzwanie
ŁatwyUzupełnij gradebook(commands) dla pierwszego polecenia:
ADD <name>: jeśli uczeń jest nowy, zapisz go bez ocen i odpowiedzadded <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")
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
1Łańcuchy znaków w szczegółach
Podciągi za pomocą substr()Formatowanie za pomocą sprintf()Dzielenie i łączenieWyszukiwanie w łańcuchach znakówZastępowanie tekstuPowtórka – kreator nazwy użytkownika4Macierze
Tworzenie macierzyIndeksowanie macierzyPodsumowania wierszy i kolumnDziałania na macierzachPowtórka – plan miejsc10Zaawansowane sterowanie przepływem
Funkcja switch()Wektorowe ifelse()repeat i breakFunkcje rekurencyjnePodsumowanie — klasyfikator ocen2Wyszukiwanie wartości po kluczach
Wyszukiwanie nazwanych elementów wektoraSprawdzanie kluczyDodawanie i usuwanie kluczyIterowanie po nazwachPowtórzenie — giełda5Projekt — dziennik ocen
Dodawanie uczniówZapisywanie ocen3Zbiory i zliczanie
Unikalne wartościOperacje na zbiorachTesty przynależnościZliczanie za pomocą table()Podsumowanie — goście wydarzenia6Funkcje jako wartości
Funkcje anonimowePrzekazywanie funkcjiZwracanie funkcjiDomknięcia ze stanemPowtórka — reguły rabatowe9Ramki danych
Tworzenie ramek danychKolumny i wierszeFiltrowanie wierszyDodawanie i sortowaniePodsumowanie – raport sprzedaży12Projekt – śledzenie wydatków
Rejestrowanie wydatkówŁączne wydatkiPoćwicz samodzielnie: Kompilator R online