En Başarılı Öğrenciler
Coddy'nin GDScript Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 48 / 78.
Görev
KolaySon olarak, en başarılı öğrencileri bul. Önceki adımlarda yazdığın her şeyi koru.
1. Fonksiyon. Diğer fonksiyonların altına filter_top_students(threshold: float) -> Array yaz. Ortalama notu eşikten büyük olan öğrencilerin adlarını, eklendikleri sırayla içeren bir dizi döndürür. Her öğrencinin ortalamasını calculate_average_grade() ile al; hiç notu olmayan bir öğrencinin ortalaması 0.0 olur.
2. Komut. ["show"] satırının üstüne, örneğin top 80 gibi top <threshold> için bir dal ekle. Eşiği float() ile dönüştürür ve filter_top_students() fonksiyonunun döndürdüğü diziyi yazdırır. Şu komutlar için
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çıktı şöyledir:
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!Öğrenci Kayıtları Yöneticin artık sözlükleri, kümeleri, dizileri, fonksiyonları ve match ifadesini tek bir programda bir araya getiriyor.
Kendin dene
extends Node
# Her öğrenci: name -> {"age": int, "grades": Array, "courses": ders adlarından oluşan bir küme}
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
Mantık ve Akış bölümündeki tüm dersler
1String’leri Derinlemesine İnceleme
String MetotlarıString’lerde AramaDeğiştirme ve KırpmaBölme ve BirleştirmeTekrar: Kullanıcı Adı Kontrolü4Sözlükler Bölüm 2
İç İçe SözlüklerSözlük DizileriSözlükleri BirleştirmeSözlükleri KopyalamaTekrar - Frekans Sayacı10İleri Düzey Fonksiyonlar
Birden Fazla Değer DöndürmeLambda Fonksiyonları Bölüm 1Lambda Fonksiyonları Bölüm 2Tekrar - Lambda ile SıralamaÖzyinelemeli Fonksiyonlar Bölüm 1Özyinelemeli Fonksiyonlar Bölüm 2Tekrar - İç İçe Dizilerin Toplamı13Envanter Yönetim Sistemi
Projeye Genel BakışÜrün Ekle2İleri Düzey Karar Verme
Değişkenlerle EşleştirmeEşleştirme KoşullarıDizi KalıplarıSözlük KalıplarıÜyelik KontrolleriÖzet - Komut Ayrıştırıcı5Rehber Uygulaması
Menüyü GörüntüleKişi Ekle8Öğrenci Kayıt Yöneticisi
Proje Genel BakışıÖğrenci Ekle11Üst Düzey Fonksiyonlar
map Metodufilter Metodureduce Metoduany ve allTekrar - E-posta DoğrulayıcıTekrar - Sayı İşleyici3Çok Boyutlu Diziler
2B Dizilere Giriş2B Dizi Elemanlarına Erişim2B Dizilerle İç İçe DöngülerTekrar - 2B DizilerDüzensiz DizilerYaygın 2B Dizi ÖrüntüleriTekrar - Oyun Tahtası6Sözlüklerle Kümeler
Küme Nedir?Küme Olarak SözlükEkleme ve SilmeBirleşim ve KesişimKüme FarkıTekrar: Yinelenenleri Silme9Gelişmiş Veri Toplama
Değerleri ToplamaEn Küçük ve En Büyük Değeri BulmaÖzel SıralamaÖzet - Sözlük SıralayıcıKendi başına pratik yap: Online GDScript derleyicisi