Найти - Пользователи
Полная версия: Задача на Python "систему расчёта статистик успеваемости студентов"
Начало » Python для новичков » Задача на Python "систему расчёта статистик успеваемости студентов"
1
Vardan.b
Добрый день
Помогите пожалуйста решить задачу.
Вот условие:

Организуйте систему расчёта статистик успеваемости студентов.

Для начала вы вводите список предметов, после — список фамилий и имён студентов. После для каждого студента выводите оценку в диапазоне от 1 до 10. У вас 10-балльная система оценок.
Когда сбор данных будет завершён, выведите студента с лучшей средней успеваемостью. И средний балл этого студента по предметам.

Пример решения
Введите предмет: математика
Введите предмет: физика
Введите предмет:
Введите фамилию студента: Иванов
Введите имя студента: Иван
Введите фамилию студента: Петров
Введите имя студента: Дмитрий
Введите оценку по предмету
Студент Иван Иванов
математика: 5
физика: 5
Студент Дмитрий Петров
математика: 5
физика: 3
Статистика:
Студент с лучшей успеваемостью
Иван Иванов 5.00
Средний балл по предмету:
математика: 5.00
физика: 4.00
Пример с вводом данных
Введите успеваемость: Иван;Иванов;математика,5;физика,5
Введите успеваемость: Иван;Иванов;математика,5;физика,3
Введите успеваемость:
Статистика:
Студент с лучшей успеваемостью
Иван Иванов 5.00
Средний балл по предмету:
математика: 5.00
физика: 4.00

Рекомендации к выполнению
Можно вводить данные одной строкой, но для этого вам потребуется метод split.
ZerG
Попробуй как то так:
 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                                                                                     
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB