Not Ortalaması
Coddy'nin Ruby Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 51 / 56.
Bir öğrencinin notlarının ortalamasını döndüren bir metot ekleyin; bu, tam da Enumerable'ın tasarlanma amacı olan türden bir özet hesaplamadır.
İki uç duruma dikkat edin: öğrenci mevcut değil ve öğrencinin henüz hiç notu yok.
Görev
KolayAşağıdakileri gerçekleştiren bir average_grade(name) metodu ekleyin:
- Eğer isim mevcut değilse
Student '<name>' not found.yazdırır venildöndürür. - Öğrenci mevcutsa ancak hiç notu yoksa
0döndürür. - Aksi takdirde
:gradesdizisinin aritmetik ortalamasını bir Float olarak döndürür.
Test bloğunu şununla değiştirin:
add_student("Alice", 20, ["Math"])
add_student("Bob", 22, ["Biology"])
add_grade("Alice", 90)
add_grade("Alice", 80)
puts average_grade("Alice")
puts average_grade("Bob")
puts average_grade("Charlie").inspectBeklenen çıktı:
Student 'Alice' added.
Student 'Bob' added.
Grade 90 added for 'Alice'.
Grade 80 added for 'Alice'.
85.0
0
Student 'Charlie' not found.
nilKopya kağıdı
Bir koleksiyondan ortalama hesaplarken uç durumları ele alın:
def average_grade(name)
student = @students.find { |s| s[:name] == name }
if student.nil?
puts "Student '#{name}' not found."
return nil
end
grades = student[:grades]
return 0 if grades.empty?
grades.sum.to_f / grades.size
end
- Bir kaydı bulmak için
.findkullanın; bulunamazsanildöner. - Bölme işleminden önce
.empty?ile boş bir koleksiyona karşı önlem alın. - Float bir sonuç elde etmek için toplam (veya boyut) üzerinde
.to_fkullanın.
Kendin dene
$student_records = {}
def add_student(name, age, courses)
if $student_records.key?(name)
puts "Student '#{name}' already exists."
return
end
$student_records[name] = { age: age, grades: [], courses: courses }
puts "Student '#{name}' added."
end
def add_grade(name, grade)
unless $student_records.key?(name)
puts "Student '#{name}' not found."
return
end
$student_records[name][:grades] << grade
puts "Grade #{grade} added for '#{name}'."
end
# YAPILACAK: def average_grade(name), eksik öğrenciyi ve boş notları işler, Float ortalama döndürür
add_student("Alice", 20, ["Math"])
add_student("Bob", 22, ["Biology"])
add_grade("Alice", 90)
add_grade("Alice", 80)
puts average_grade("Alice")
puts average_grade("Bob")
puts average_grade("Charlie").inspect
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık ve Akış bölümündeki tüm dersler
1Derinlemesine Stringler
String Metotlarına Genel BakışString InterpolationStringler Üzerinde GezinmeSplit ve JoinÖzet - String Weaver4Bloklar, Procs ve Lambdalar
Blok Nedir?do..end ve Süslü Parantezleryield Anahtar KelimesiBlok ParametreleriProcs ve LambdalarÖzet - Özel İteratör7Hashes Bölüm 2
Varsayılan Değerlerle Hash.newHash Yapıları Üzerinde Yinelemeİç İçe Hash YapılarıBirleştirme ve DönüştürmeÖzet - Frekans Sayacı10Proje - Öğrenci Kayıtları
Projeye Genel BakışÖğrenci Ekle5Enumerable Gücü
Select ve RejectMap ZincirlemeReduce / Injectcount, all?, any?, none?group_by ve partitionsort_by, min_by, max_byÖzet - Data Pipeline8İleri Seviye Karar Yapıları
Sınıflar ve Regex ile CaseÇok Değerli whenTernary OperatörüSatır İçi if / unlessÖzet - Not Sınıflandırıcı