Menu
Coddy logo textTech

生徒の追加

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語であり、入力にはこれまでに説明したコマンドのみが含まれます。

REQUIRED OUTPUT FORMAT: [Your translated content here]

自分で試してみよう

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