Menu
CoddyTech

生徒の追加

CoddyのRジャーニー「ロジックとフロー」セクションの一部。レッスン 22/64。

このプロジェクトでは、1行に1つずつコマンドを読み取り、それぞれに応答する成績簿を作成します。5つのステップを通じて、生徒の追加、成績の記録、平均点の報告、そしてトップの生徒の検索ができるようになります。各ステップで、同じ 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と返します。

用意されたコードは、入力の各行を1つのコマンドとしてgradebook()に渡し、返された各応答をそれぞれ別の行に出力します。名前は小文字1語で、入力にはここまでに説明したコマンドだけが含まれます。

自分で試してみよう

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オンラインコンパイラ