우수 학생
Coddy GDScript 여정의 논리와 흐름 섹션에 포함된 레슨. 78개 중 48번째.
챌린지
쉬움마지막으로, 성적이 높은 학생들을 찾으세요. 이전 단계에서 작성한 내용은 모두 그대로 두세요.
1. 함수. 다른 함수들 아래에 filter_top_students(threshold: float) -> Array를 작성하세요. 평균 성적이 기준값보다 높은 학생들의 이름을 추가된 순서대로 담은 배열을 반환합니다. 각 평균은 calculate_average_grade()로 구하세요. 성적이 없는 학생의 평균은 0.0입니다.
2. 명령. ["show"] 위에 top <threshold> 분기를 추가하세요. 예를 들면 top 80입니다. 기준값을 float()로 변환하고 filter_top_students()가 반환하는 배열을 출력하세요. 다음 명령을 실행하면
add Alice 20 Math Physics
add Bob 22 Math Biology
add Diana 23 Chemistry Physics
grade Alice 90
grade Alice 85
grade Bob 75
grade Diana 95
top 80
top 90
top 100
exit출력은 다음과 같습니다.
Student 'Alice' added successfully.
Student 'Bob' added successfully.
Student 'Diana' added successfully.
Grade 90 added for student 'Alice'.
Grade 85 added for student 'Alice'.
Grade 75 added for student 'Bob'.
Grade 95 added for student 'Diana'.
["Alice", "Diana"]
["Diana"]
[]
Goodbye!이제 Student Records Manager는 딕셔너리, 집합, 배열, 함수, match를 하나의 프로그램에서 모두 활용합니다.
직접 해보기
extends Node
# 각 학생: 이름 -> {"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])
["course", var course]:
print(list_students_by_course(course))
["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()
func list_students_by_course(course: String) -> Array:
var students_in_course := []
for student_name in student_records:
if student_records[student_name]["courses"].has(course):
students_in_course.append(student_name)
return students_in_course
논리와 흐름의 모든 레슨
직접 연습해 보세요: 온라인 GDScript 컴파일러