生徒の追加
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オンラインコンパイラ