Untitled
unknown
python
2 years ago
11 kB
5
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 чтобы завершить программу") # ждем, пока пользователь нажмет enterEditor is loading...
Leave a Comment