과목별 목록
Coddy GDScript 여정의 논리와 흐름 섹션에 포함된 레슨. 78개 중 47번째.
챌린지
쉬움과목을 수강하는 학생들을 나열하세요. 이전 단계에서 작성한 내용은 모두 그대로 유지하세요.
1. 함수. 다른 함수 아래에 list_students_by_course(course: String) -> Array를 작성하세요. 이 함수는 student_records를 반복하며, "courses" 집합에 해당 과목이 있는 학생들의 이름을 학생이 추가된 순서대로 배열에 담아 반환합니다. 해당 과목을 수강하는 학생이 없으면 빈 배열을 반환합니다.
2. 명령. ["show"] 위에 course <course>에 대한 분기를 추가하세요. 예를 들면 course Math입니다. list_students_by_course()가 반환하는 배열을 출력합니다. 다음 명령을 실행하면
add Alice 20 Math Physics
add Bob 22 Math Biology
add Diana 23 Chemistry Physics
course Math
course Physics
course Biology
course History
exit다음과 같이 출력됩니다.
Student 'Alice' added successfully.
Student 'Bob' added successfully.
Student 'Diana' added successfully.
["Alice", "Bob"]
["Alice", "Diana"]
["Bob"]
[]
Goodbye!직접 해보기
extends Node
# 각 학생: name -> {"age": int, "grades": Array, "courses": 강좌 이름의 집합}
var student_records := {}
func _ready():
while true:
var parts := Array(OS.read_string_from_stdin().split(" ", false))
match parts:
["add", var student, var age, ..]:
add_student(student, int(age), parts.slice(3))
["grade", var student, var grade]:
add_grade(student, int(grade))
["enrolled", var student, var course]:
print(is_enrolled(student, course))
["average", var student]:
var average := calculate_average_grade(student)
if average >= 0:
print("Average grade of '%s': %.2f" % [student, average])
["show"]:
print(student_records)
["exit"]:
print("Goodbye!")
break
func add_student(student_name: String, age: int, courses: Array) -> void:
if student_records.has(student_name):
print("Student '%s' already exists." % student_name)
return
var course_set := {}
for course in courses:
course_set[course] = true
student_records[student_name] = {"age": age, "grades": [], "courses": course_set}
print("Student '%s' added successfully." % student_name)
func add_grade(student_name: String, grade: int) -> void:
if not student_records.has(student_name):
print("Student '%s' not found." % student_name)
return
student_records[student_name]["grades"].append(grade)
print("Grade %d added for student '%s'." % [grade, student_name])
func is_enrolled(student_name: String, course: String) -> bool:
if not student_records.has(student_name):
print("Student '%s' not found." % student_name)
return false
return student_records[student_name]["courses"].has(course)
func calculate_average_grade(student_name: String) -> float:
if not student_records.has(student_name):
print("Student '%s' not found." % student_name)
return -1.0
var grades: Array = student_records[student_name]["grades"]
if grades.is_empty():
return 0.0
var total := 0
for grade in grades:
total += grade
return float(total) / grades.size()
논리와 흐름의 모든 레슨
직접 연습해 보세요: 온라인 GDScript 컴파일러