Форум сайта python.su
Добрый день
Помогите пожалуйста решить задачу.
Вот условие:
Организуйте систему расчёта статистик успеваемости студентов.
Для начала вы вводите список предметов, после — список фамилий и имён студентов. После для каждого студента выводите оценку в диапазоне от 1 до 10. У вас 10-балльная система оценок.
Когда сбор данных будет завершён, выведите студента с лучшей средней успеваемостью. И средний балл этого студента по предметам.
Пример решения
Введите предмет: математика
Введите предмет: физика
Введите предмет:
Введите фамилию студента: Иванов
Введите имя студента: Иван
Введите фамилию студента: Петров
Введите имя студента: Дмитрий
Введите оценку по предмету
Студент Иван Иванов
математика: 5
физика: 5
Студент Дмитрий Петров
математика: 5
физика: 3
Статистика:
Студент с лучшей успеваемостью
Иван Иванов 5.00
Средний балл по предмету:
математика: 5.00
физика: 4.00
Пример с вводом данных
Введите успеваемость: Иван;Иванов;математика,5;физика,5
Введите успеваемость: Иван;Иванов;математика,5;физика,3
Введите успеваемость:
Статистика:
Студент с лучшей успеваемостью
Иван Иванов 5.00
Средний балл по предмету:
математика: 5.00
физика: 4.00
Рекомендации к выполнению
Можно вводить данные одной строкой, но для этого вам потребуется метод split.
Офлайн
Попробуй как то так:
subjects = [] users = {} def add_subjects(): while True: subj = input("Введите название предмета: ") if subj: subjects.append(subj) else: break print("Список предметов: ") for predmet in subjects: print(predmet) print() def add_users(): while True: username = input("Введите данные пользователя: ") if username: users[username] = {x: [] for x in subjects} else: break print("Список пользователей:") for user in users: print(user) print() def append_grades(user_name): user = users.get(user_name) if user: print(f"Введите оценки пользователя {user_name}: ") graded_subjects = set() while len(graded_subjects) != len(user): for predmet in user: if predmet not in graded_subjects: try: grade = input(f"{predmet}: ") if grade: users[user_name][predmet].append(int(grade)) graded_subjects.add(predmet) # Mark subject as graded except ValueError: print("Оценка должна быть целым числом") def update_users(): user = None user_list = {index: name for index, name in enumerate(users.keys(), start=1)} while True: user_name = input("Введите имя студента(* выбрать из списка): ") if user_name == "*": for user_id, user_name in user_list.items(): print(f"[{user_id}]: {user_name}") try: user_id = int(input("Выберите студента:")) if user_id: user = user_list.get(user_id) if not user: print("Такого номера нет в списке!") except ValueError: print("Номер должен быть целым числом!") elif user_name: if users.get(user_name): user = user_name else: break if user: append_grades(user) # Заполним список предметов add_subjects() # Заполним список пользователей add_users() # Заполним список оценок update_users() # Вывод результатов best_user = None best_average = 0 best_details = {} for user_name, subjs in users.items(): if all(subjs.values()): total_average = sum(sum(grades) for grades in subjs.values()) / sum(len(grades) for grades in subjs.values()) if total_average > best_average: best_user = user_name best_average = total_average for predmet, grades in subjs.items(): best_details[predmet] = sum(grades) / len(grades) print(f"Студент с лучшей успеваемостью: {best_user}: {best_average}") print("Средний балл по предмету:") for predmet, average in best_details.items(): print(f"{predmet}: {average}")
Введите название предмета: Математика Введите название предмета: Труды Введите название предмета: Список предметов: Математика Труды Введите данные пользователя: Олег Иванов Введите данные пользователя: Иван Введите данные пользователя: Список пользователей: Олег Иванов Иван Введите имя студента(* выбрать из списка): * [1]: Олег Иванов [2]: Иван Выберите студента:1 Введите оценки пользователя Олег Иванов: Математика: 10 Труды: 10 Введите имя студента(* выбрать из списка): Иван Введите оценки пользователя Иван: Математика: 5 Труды: 6 Введите имя студента(* выбрать из списка): {'Олег Иванов': {'Математика': [10], 'Труды': [10]}, 'Иван': {'Математика': [5], 'Труды': [6]}} Студент с лучшей успеваемостью: Олег Иванов: 10.0 Средний балл по предмету: Математика: 10.0 Труды: 10.0
Отредактировано ZerG (Фев. 26, 2024 12:22:03)
Офлайн