Untitled

 avatar
unknown
python
a year ago
11 kB
4
Indexable
# Импортируем библиотеку pandas для работы с данными и модуль sys для выхода из программы
import pandas as pd
import sys, colorama

# Чтение данных из файла excel
data = pd.read_excel("universities.xlsx") # читаем данные из файла excel, который содержит информацию об университетах
data = data.dropna() # удаляем пропущенные значения, если они есть в таблице
data = data.reset_index(drop=True) # сбрасываем индексы, чтобы они шли по порядку от 0 до n-1, где n - количество строк в таблице

# Определение функции для рекомендации университетов
def recommend_university():
    # Запрашиваем параметры у пользователя, которые будут использоваться для фильтрации данных
    while True: # запускаем бесконечный цикл, который будет повторяться, пока пользователь не введет корректное число
        university = int(input(colorama.Fore.WHITE + "Государственный или частный (1 - Государственный, 0 - Частный): ")) # спрашиваем, хочет ли пользователь поступить в государственный или частный вуз
        if university == 1 or university == 0:
            break
        else:
            print(colorama.Fore.RED + 'Введите корректное число!') # выводим сообщение об ошибке и продолжаем цикл

    after_11 = int(input("После 11 класса? (1 - Да, 0 - Нет): ")) # спрашиваем, закончил ли пользователь 11 класс или нет
    if after_11 != 1: # если пользователь не закончил 11 класс, то он не может поступить в вуз
        print(colorama.Fore.RED + "Чтобы поступить в вуз закончите 11 класс!") # выводим сообщение об этом
        input(colorama.Fore.WHITE + "Нажмите enter чтобы завершить программу") # ждем, пока пользователь нажмет enter
        sys.exit() # выходим из программы
    
    print("Выберите направление:\n1. Аграрный\n2. Медицинский\n3. Гуманитарный\n4. Технический\n5. Военный") # выводим список возможных направлений обучения
    
    while True: # запускаем бесконечный цикл, который будет повторяться, пока пользователь не введет корректное число
        direction_input = int(input(colorama.Fore.WHITE + "Введите номер направления (1, 2, или 3): ")) # спрашиваем, какое направление выбирает пользователь
        directions_dict = {1: "аграрный", 2: "медицинский", 3: "гуманитарный", 4: "технический", 5: "военный"} # создаем словарь, который сопоставляет номера направлений с их названиями
        direction = directions_dict.get(direction_input) # получаем название направления по его номеру из словаря
        if 1 <= direction_input <= 5:
            break
        else:
            print(colorama.Fore.RED + 'Введите корректное число!') # выводим сообщение об ошибке и продолжаем цикл

    while True: # запускаем бесконечный цикл, который будет повторяться, пока пользователь не введет корректное число
        city_input = int(input(colorama.Fore.WHITE + "Выберите город обучения (1 - Саратов, 2 - Энгельс): ")) # спрашиваем, в каком городе хочет учиться пользователь
        cities_dict = {1: "Саратов", 2: "Энгельс"} # создаем словарь, который сопоставляет номера городов с их названиями
        city = cities_dict.get(city_input) # получаем название города по его номеру из словаря
        if city == "Саратов" or city == "Энгельс":
            break
        else:
            print(colorama.Fore.RED + 'Введите корректное число!') # выводим сообщение об ошибке и продолжаем цикл
    
    while True: # запускаем бесконечный цикл, который будет повторяться, пока пользователь не введет корректное число
       ege = int(input(colorama.Fore.WHITE + "Введите ваши баллы ЕГЭ (от 0 до 400): ")) # спрашиваем, сколько баллов набрал пользователь за ЕГЭ
       if ege >= 0 and ege <= 400: 
        break
       else:
        print(colorama.Fore.RED + 'Введите корректное число!') # выводим сообщение об ошибке и продолжаем цикл
    
    # Вызываем функцию с полученными параметрами
    result = recommend_university_params(university, after_11, direction, city, ege) # вызываем другую функцию, которая принимает параметры пользователя и возвращает список подходящих университетов
    
    # Печатаем результат
    if not result: # если список пустой, то
        print("По вашим данным вуз не найден") # выводим сообщение, что вуз не найден
    else: # иначе
        for line in result: # для каждой строки в списке
            print(line) # выводим ее на экран

# Определение функции для рекомендации университетов с передачей параметров
def recommend_university_params(university, after_11, direction, city, ege):
    # Фильтруем данные по параметрам выбора пользователя
    filtered_data = data[(data["university"] == university) & (data["after_11"] == after_11) & (data["direction"] == direction) & (data["city"] == city) & (data["ege"] <= ege)] # создаем новую таблицу, которая содержит только те строки из исходной таблицы, которые соответствуют параметрам пользователя
    
    # Если нет подходящих университетов, возвращаем пустой список
    if filtered_data.empty: # если новая таблица пустая, то
        return [] # возвращаем пустой список

    # Сортируем данные по рейтингу в убывающем порядке
    sorted_data = filtered_data.sort_values(by="rating", ascending=False) # создаем новую таблицу, которая содержит те же строки, что и предыдущая, но отсортированные по столбцу "rating" в убывающем порядке
    
    # Извлекаем три лучших варианта
    top_3 = sorted_data.head(3) # создаем новую таблицу, которая содержит только три первые строки из отсортированной таблицы

    # Создаем список строк с названием, характеристиками и рейтингом университета
    result = [] # создаем пустой список
    for i, (index, row) in enumerate(top_3.iterrows(), start=1): # для каждой пары индекс-строка в таблице с тремя лучшими вариантами, начиная с номера 1
        name = row["name"] # получаем название университета из столбца "name"
        university_type = "Государственный" if row["university"] == 1 else "частный" # получаем тип университета из столбца "university" и присваиваем ему читабельное значение
        after_11_str = "после 11 класса" if row["after_11"] == 1 else "после 9 класса" # получаем условие поступления из столбца "after_11" и присваиваем ему читабельное значение
        direction_str = direction # получаем направление обучения из параметра функции
        city_str = row["city"] # получаем город обучения из столбца "city"
        ege_str = row["ege"] # получаем требуемые баллы ЕГЭ из столбца "ege"
        rating_str = row["rating"] # получаем рейтинг университета из столбца "rating"

        # Формируем строку с названием, характеристиками и рейтингом университета
        line = f"{i}. {name} - {university_type} вуз {after_11_str} {direction_str} в городе {city_str}, требующий {ege_str} баллов за егэ, рейтинг: {rating_str}"

        # Добавляем строку в список
        result.append(line)

    # Возвращаем список
    return result

# Вызываем функцию для рекомендации университетов
recommend_university()
input("Нажмите enter чтобы завершить программу") # ждем, пока пользователь нажмет enter
Editor is loading...
Leave a Comment