生徒の追加
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, ...) で収集され、最後に返されます。
チャレンジ
簡単最初のコマンドについて、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")
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
自分で練習してみよう: Rオンラインコンパイラ