Menu
CoddyTech

Добавление учеников

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

В этом проекте ты создашь электронный журнал, который считывает команды, по одной в каждой строке, и отвечает на каждую из них. За пять шагов он научится добавлять учеников, записывать оценки, сообщать средние значения и находить ученика с лучшим результатом. Каждый шаг расширяет одну и ту же функцию gradebook(commands).

ADD ada
GRADE ada 90
AVG ada
REPORT
TOP

Оценки хранятся в именованном списке: имя каждого ученика связано с числовым вектором его оценок. Список подходит, потому что у каждого ученика есть несколько значений.

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

Вывод:

[1] 1
[1] "ada"

numeric(0) — это пустой числовой вектор. Присвоение c() здесь не сработает: это NULL, а присвоение NULL удаляет элемент списка.

Каждая команда разделяется по пробелам, поэтому parts[1] — это команда, а parts[2] — имя. Цепочка if / else if определяет, что делать:

for (cmd in commands) {
  parts <- strsplit(cmd, " ")[[1]]
  name <- parts[2]
  if (parts[1] == "ADD") {
    # обработать ADD
  }
}

Ответы собираются с помощью replies <- c(replies, ...) и возвращаются в конце.

challenge icon

Задание

Легко

Дополните gradebook(commands) для первой команды:

  • ADD <name>: если ученик новый, сохраните его без оценок и верните ответ added <name>. Если имя уже сохранено, верните ответ <name> already exists.

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

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

gradebook <- function(commands) {
  grades <- list()
  replies <- c()
  for (cmd in commands) {
    parts <- strsplit(cmd, " ")[[1]]
    name <- parts[2]
    # Напишите здесь свой код
  }
  replies
}

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

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

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

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