학생 추가
Coddy R 여정의 논리와 흐름 섹션에 포함된 레슨. 64개 중 22번째.
이 프로젝트에서는 한 줄에 하나씩 명령을 읽고 각각에 응답하는 성적 기록부를 만듭니다. 다섯 단계에 걸쳐 학생을 추가하고, 성적을 기록하고, 평균을 보고하고, 최우수 학생을 찾는 방법을 배웁니다. 각 단계는 동일한 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라고 응답하세요.
제공된 코드는 각 입력 줄을 하나의 명령으로 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")
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
논리와 흐름의 모든 레슨
직접 연습해 보세요: 온라인 R 컴파일러