コース別一覧
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オンラインコンパイラ