Mejores estudiantes
Parte de la sección Lógica y flujo del Journey de GDScript de Coddy. Lección 48 de 78.
Desafío
FácilPor último, busca a los mejores estudiantes. Conserva todo lo que escribiste en los pasos anteriores.
1. La función. Debajo de las otras funciones, escribe filter_top_students(threshold: float) -> Array. Devuelve un array con los nombres de los estudiantes cuya nota media es mayor que el umbral, en el orden en que se añadieron. Obtén cada promedio con calculate_average_grade(); un estudiante sin notas tiene un promedio de 0.0.
2. El comando. Añade una rama para top <threshold>, como top 80, encima de ["show"]. Convierte el umbral con float() e imprime el array que devuelve filter_top_students(). Para los comandos
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
exitel resultado es:
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!Tu Student Records Manager ahora combina diccionarios, conjuntos, arrays, funciones y match en un solo programa.
Pruébalo tú mismo
extends Node
# Cada estudiante: nombre -> {"age": int, "grades": Array, "courses": un conjunto de nombres de cursos}
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
Todas las lecciones de Lógica y flujo
1Cadenas de texto en profundidad
Métodos de cadenasBúsqueda en cadenasReemplazar y eliminar espaciosDividir y unirRepaso - Comprobación del nombre de usuario4Diccionarios, parte 2
Diccionarios anidadosArrays de diccionariosCombinar diccionariosCopiar diccionariosRepaso: contador de frecuencias7Enumeraciones
¿Qué es una enumeración?Definir una enumeraciónValores de una enumeraciónEnumeraciones en matchRepaso: semáforo10Funciones avanzadas
Devolver múltiples valoresFunciones lambda, parte 1Funciones lambda, parte 2Repaso: ordenar con lambdaFunciones recursivas, parte 1Funciones recursivas, parte 2Repaso: sumar un array anidado13Sistema de gestión de inventario
Descripción general del proyectoAñadir artículo2Toma de decisiones avanzada
Coincidencia con variablesGuardas de coincidenciaPatrones de arraysPatrones de diccionariosComprobaciones de pertenenciaRepaso: analizador de comandos5Aplicación de agenda de contactos
Mostrar menúAñadir contacto8Gestor de expedientes estudiantiles
Descripción del proyectoAgregar estudiante3Arrays multidimensionales
Conceptos básicos de arrays 2DAcceso a elementos de arrays 2DBucles anidados con arrays 2DRepaso: arrays 2DArrays irregularesPatrones comunes de arrays 2DRepaso: tablero de juego6Conjuntos con diccionarios
¿Qué es un conjunto?El diccionario como conjuntoAñadir y eliminarUnión e intersecciónDiferencia de conjuntosRepaso: eliminar duplicados9Agregación avanzada de datos
Suma de valoresCómo encontrar el mínimo y el máximoOrdenación personalizadaRepaso: organizador de diccionariosPractica por tu cuenta: Compilador de GDScript online