按课程列出
本课属于 Coddy GDScript 学习旅程的“逻辑与流程”单元。第 47 课,共 78 课。
挑战
简单列出选修某门课程的学生。保留你在前面步骤中写的所有内容。
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
# 每个学生:姓名 -> {"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 在线编译器