학생 추가
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 컴파일러