Moyenne des notes
Fait partie de la section Logique et Flux du Journey Ruby de Coddy — leçon 51 sur 56.
Ajoutez une méthode qui retourne la moyenne des notes d'un étudiant, exactement le genre de calcul de synthèse pour lequel Enumerable a été conçu.
Faites attention à deux cas particuliers : l'étudiant n'existe pas, et l'étudiant n'a pas encore de notes.
Défi
FacileAjoutez une méthode average_grade(name) qui :
- Affiche
Student '<name>' not found.et retournenilsi le nom n'existe pas. - Retourne
0si l'étudiant existe mais n'a pas de notes. - Sinon, retourne la moyenne arithmétique de
:gradessous forme de Float.
Remplacez le bloc de test par :
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").inspectRésultat attendu :
Student 'Alice' added.
Student 'Bob' added.
Grade 90 added for 'Alice'.
Grade 80 added for 'Alice'.
85.0
0
Student 'Charlie' not found.
nilAide-mémoire
Gérez les cas particuliers lors du calcul de moyennes à partir d'une collection :
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
- Utilisez
.findpour localiser un enregistrement ; renvoienils'il n'est pas trouvé. - Protégez-vous contre une collection vide avec
.empty?avant de diviser. - Utilisez
.to_fsur la somme (ou la taille) pour garantir un résultat Float.
Essayez vous-même
$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
# TODO: def average_grade(name), gère l'étudiant manquant, les notes vides, retourne la moyenne en Float
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
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logique et Flux
1Les chaînes de caractères en profondeur
Aperçu des méthodes de chaînesInterpolation de chaînesParcourir les chaînesSplit et JoinRécapitulatif - String Weaver4Blocs, Procs & Lambdas
Qu'est-ce qu'un bloc ?do..end vs AccoladesLe mot-clé yieldParamètres de blocProcs et LambdasRécapitulatif - Itérateur personnalisé7Hashes - Partie 2
Hash.new avec des valeurs par défautItérer sur les HashesHashes imbriquésFusion et transformationRécapitulatif - Compteur de fréquence10Projet - Dossiers étudiants
Présentation du projetAjouter un étudiant2Intervalles
Qu'est-ce qu'un intervalle ?Méthodes d'intervalleLes intervalles dans Case / WhenRécapitulatif - Pratique des intervalles5La puissance d'Enumerable
Select et RejectChaîner MapReduce / Injectcount, all?, any?, none?group_by et partitionsort_by, min_by, max_byRécapitulatif - Data Pipeline