Last active
February 11, 2022 21:43
-
-
Save fenske/051871c38a17e632668d3dad4ff917a5 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| from NIR3_func import * # Импорт модуля NIR3_func | |
| # ********************** | |
| # Ввод рабочего каталога | |
| # ********************** | |
| while True: | |
| path = input("Введите путь рабочего каталога: ") | |
| # os.chdir('C:\\Users\\Alexandr\\Desktop\\НИР') | |
| if os.path.isdir(path): | |
| print("Обнаружен рабочий каталог", path) | |
| os.chdir(path) | |
| break | |
| elif (path == ""): | |
| print("Некорректный ввод пути") | |
| else: | |
| print("Рабочий каталог не обнаружен") | |
| # ***************************************** | |
| # Определение имени базы данных и ее таблиц | |
| # ***************************************** | |
| database_name = "VUZ.sqlite" | |
| if os.path.isfile(database_name): | |
| table_name_info = "vuzkart" | |
| table_name_stat = "vuzstat" | |
| else: | |
| print("Исходная база данных {} не обнаружена".format(database_name)) | |
| sys.exit() | |
| # **************************************** | |
| # Работа с меню, вызов необходимых функций | |
| # **************************************** | |
| while True: | |
| while True: | |
| print("Выберите пункт меню") | |
| print("1. Решение задачи 1") | |
| print("2. Решение задачи 2") | |
| print("3. Выход из программы") | |
| menu_choice = input("-> ") | |
| if int(menu_choice) == 1: | |
| status = [] | |
| while True: | |
| status_list = getUniversityStatus(database_name, table_name_info) | |
| print("Выберите желаемый статус вуза:") | |
| print("Введите A, чтобы выбрать Академия") | |
| print("Введите U, чтобы выбрать Университет") | |
| print("Введите I, чтобы выбрать Институт") | |
| print("Введите 0, чтобы вернуться в главное меню") | |
| while True: | |
| status = input("-> ").split() | |
| if status[-1].strip().upper() == "A": | |
| showAverageStudentNumber(database_name, table_name_info, table_name_stat, "Академия") | |
| break | |
| elif status[-1].strip().upper() == "U": | |
| showAverageStudentNumber(database_name, table_name_info, table_name_stat, "Университет") | |
| break | |
| elif status[-1].strip().upper() == "I": | |
| showAverageStudentNumber(database_name, table_name_info, table_name_stat, "Институт") | |
| break | |
| elif status[-1].strip() == "0": | |
| break | |
| else: | |
| print("Некорректный ввод статуса") | |
| break | |
| elif int(menu_choice) == 2: | |
| minmax_percentage = minmaxDoctoratePercentage(database_name, table_name_stat) | |
| while True: | |
| while True: | |
| percentage = float(input( | |
| "Введите пороговое значение процента докторов наук среди преподавателей в вузе.\nДопустимый диапазон: ({}-{})%: ".format( | |
| round(minmax_percentage[0], 2), round(minmax_percentage[1], 2)))) | |
| if ((percentage >= minmax_percentage[0] and percentage <= minmax_percentage[1])): | |
| showSuitablePercentUniversities(database_name, table_name_info, table_name_stat, percentage) | |
| break | |
| else: | |
| print("Неккоректный ввод значения процента") | |
| break | |
| break | |
| elif int(menu_choice) == 3: | |
| sys.exit() | |
| else: | |
| print("Некорректный выбор пункта меню") |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # -*- coding: CP1251 -* | |
| #**************** | |
| #Импорт библиотек | |
| #**************** | |
| import sqlite3 #импорт модуля sqlite3 для работы с SQLite | |
| import os #импорт библиотеки os для работы с каталогами | |
| import sys #импорт библиотеки sys для перенаправления вывода в файл | |
| #********************************** | |
| #Функции для решения первой задачи: | |
| #********************************** | |
| def minmaxDoctoratePercentage(database_name,table_name_stat): | |
| """Вычисление минимального и максимального значения процента докторов наук среди преподавателей. | |
| Возвращает список с двумя элементами, первый из которых -- минимальное значение, второй -- макисмальное | |
| database_name -- имя базы данных | |
| table_name_stat -- имя таблицы базы данных, содержащая статистические данные по вузам | |
| """ | |
| con=sqlite3.connect(database_name) | |
| cur=con.cursor() | |
| doctorate_number=cur.execute("SELECT DN FROM {}".format(table_name_stat)).fetchall() | |
| staff_number=cur.execute("SELECT PPS FROM {}".format(table_name_stat)).fetchall() | |
| doctorate_number_list=[x[0] for x in doctorate_number] | |
| staff_number_list=[x[0] for x in staff_number] | |
| percentage=[x/y for x,y in zip(doctorate_number_list,staff_number_list)] | |
| min_percentage=min(percentage) | |
| max_percentage=max(percentage) | |
| cur.close() | |
| con.close() | |
| return [min_percentage*100,max_percentage*100] | |
| def showSuitablePercentUniversities(database_name,table_name_info,table_name_stat,percent): | |
| """Отображение в виде таблицы перечня полных наименований вузов, для которых значения процента докторов наук среди преподавателей больше или равно выбранному порогу percentage | |
| database_name -- имя базы данных | |
| table_name_stat -- имя таблицы базы данных, содержащая статистические данные по вузам | |
| """ | |
| con=sqlite3.connect(database_name) | |
| cur=con.cursor() | |
| data=cur.execute("SELECT codvuz,dn,pps,z1 FROM {0} NATURAL JOIN {1} where e_mail IS NOT NULL".format(table_name_stat,table_name_info)).fetchall() | |
| code_list=[int(x[0]) for x in data] | |
| doctorate_number_list=[x[1] for x in data] | |
| staff_number_list=[x[2] for x in data] | |
| university_names_list=[x[3].strip() for x in data] | |
| percentage_list=[x/y for x,y in zip(doctorate_number_list,staff_number_list)] | |
| percentage_list_desired=pecentage_list=[x for x in percentage_list if x>=percent/100] | |
| suitable_percent_codes=[code_list[percentage_list.index(x)] for x in percentage_list_desired] | |
| university_names_list_desired=[university_names_list[percentage_list.index(x)] for x in percentage_list_desired] | |
| cur.close() | |
| con.close() | |
| res=zip(suitable_percent_codes,university_names_list_desired,percentage_list_desired) | |
| print("Заданный процент:", percent) | |
| print("{:<10} {:<100} {:<20}".format("Код вуза","Полное наименование вуза", "Процент докторов наук")) | |
| for x,y,z in res: | |
| print("{:<10} {:<100} {:<20}".format(x,y,round(z*100,2))) | |
| #********************************** | |
| #Функции для решения второй задачи: | |
| #********************************** | |
| def getUniversityStatus(database_name,table_name_info): | |
| """Получение списка статусов вузов | |
| database_name -- имя базы данных | |
| table_name_info -- имя таблицы базы данных, содержащая информацию по вузам""" | |
| con=sqlite3.connect(database_name) | |
| cur=con.cursor() | |
| status=cur.execute("SELECT status FROM {}".format(table_name_info)) | |
| status_list=[x[0].strip() for x in status] | |
| cur.close() | |
| con.close() | |
| return list(set(status_list)) | |
| def showAverageStudentNumber(database_name,table_name_info,table_name_stat,status=["Университет", "Институт", "Академия"]): | |
| """Вычисление среднего числа студентов среди выбранных статусов status вузов по федеральным округам. Отображение полученных значений в виде таблицы. | |
| database_name -- имя базы данных | |
| table_name_stat -- имя таблицы базы данных, содержащая статистические данные по вузам""" | |
| con=sqlite3.connect(database_name) | |
| cur=con.cursor() | |
| data=cur.execute("SELECT z1,status,e_mail FROM {0} WHERE e_mail '%@%'IS NOT LIKE AND status LIKE '%{1}%'".format(table_name_info,status)).fetchall() | |
| status_list=[x[0].strip() for x in data] | |
| region_list=[x[1].strip() for x in data] | |
| stud=[x[2] for x in data] | |
| data_zip=zip(status_list,region_list,stud) | |
| dict_student_number=dict.fromkeys(set(region_list),0) | |
| dict_university_number=dict.fromkeys(set(region_list),0) | |
| dict_res=dict.fromkeys(set(region_list),0) | |
| cur.close() | |
| con.close() | |
| print("Выбранный статус(ы):",str(status)) | |
| print("{:<5} {:<50} {:<50}".format("№","Федеральный округ","Среднее количество студентов")) | |
| for i,data in enumerate(data): | |
| print("{:<5} {:<50} {:<100} {:<100}".format(i+1,data[0],data[1],data[2])) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment