Menu
CoddyTech

우수 학생

Coddy GDScript 여정의 논리와 흐름 섹션에 포함된 레슨. 78개 중 48번째.

challenge icon

챌린지

쉬움

마지막으로, 성적이 높은 학생들을 찾으세요. 이전 단계에서 작성한 내용은 모두 그대로 두세요.

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 컴파일러