Menu
CoddyTech

コース別一覧

CoddyのGDScriptジャーニー「ロジックとフロー」セクションの一部。レッスン 47/78。

challenge icon

チャレンジ

簡単

あるコースを履修している学生を一覧表示します。前の手順で書いた内容はすべて残してください。

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オンラインコンパイラ