Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
1 / 1 / 0
Регистрация: 15.11.2021
Сообщений: 228
1

Оптимизация кода

20.04.2023, 15:28. Показов 406. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Имею 2 вопроса:
1) что можно улучшить в коде(в плане написания, читаемости и т.д.)
2) self.data, исполняет ли он свою задумку(он читает данные с файла которые после обрабатываются, меня смущает что в методе объявления он подсвечивается(точнее метод которые возвращает считанные данные) как пустой(функция возвращает "Нон"))
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
import json
from typing import Optional
 
 
class RecordingSystem:
    filename: str
 
    def __init__(self, file: str):
        self.points = []
        self.filename = file
        self.json_old_data = self.load_data()
        self.json_data_write = []
        self.template_dictionary = {}
 
    def load_data(self) -> None:
        try:
            print(self.filename)
            with open(self.filename, 'r') as file:
                data = json.load(file)
        except FileNotFoundError:
            raise FileNotFoundError("Enter the correct file path")
        return data
 
    def enter_users_data(self, first_name: str, last_name: str, name_of_faculty: str, name_of_specialization: str,
                         token: str) -> dict[str, str | dict[str, int]]:
 
        self.template_dictionary = {"first_name": first_name,
                                    "last_name": last_name,
                                    "name_of_faculty": name_of_faculty,
                                    "specialization_name": name_of_specialization,
                                    "token": token
                                    }
        grades_by_semester = {}
        print("Enter grades for the exam, if you have not already entered this course, enter 0.")
        for course in range(1, 5):
            grades_by_semester[f"Course{course}"] = {}
            for semester_num in range(1, 3):
                semester_name = f"Semester{semester_num}"
                grades_by_semester[f"Course{course}"][semester_name] = {}
                grades_by_semester[f"Course{course}"][semester_name]["FirstExam"] = int(
                    input(f"Grade for the first exam {course} course, {semester_name}: "))
                grades_by_semester[f"Course{course}"][semester_name]["SecondExam"] = int(
                    input(f"Grade for the second exam {course} course, {semester_name}: "))
                grades_by_semester[f"Course{course}"][semester_name]["ThirdExam"] = int(
                    input(f"Grade for the third exam {course} course, {semester_name}: "))
 
        self.template_dictionary["grades_by_semester"] = grades_by_semester
 
        return self.template_dictionary
 
    def end_of_recording(self) -> list:
        self.json_data_write.append(self.json_old_data)
        self.json_data_write.append(self.template_dictionary)
        return self.json_data_write
 
    def json_write(self) -> None:
        with open('Dataset_for_coursework.json', 'w') as file:
            json.dump(self.json_data_write, file, indent=4, ensure_ascii=False)
 
 
class EqualSystem(RecordingSystem):
    filename: str
 
    def __init__(self, file: str):
        super().__init__(file)
        self.filename = file
        self.data = self.load_data()
 
    def load_data(self):
        try:
            with open(self.filename, 'r') as file:
                self.data = json.load(file)
        except FileNotFoundError:
            print("Enter the correct file path")
        return self.data
 
    def get_student_by_token(self, token: str) -> Optional[dict]:
        for student in self.data:
            if student["token"] == token:
                return student
        return None
 
    def filter_students_by_faculty(self, faculty: str) -> list[str]:
        students = []
        for student in self.data:
            if student['name_of_faculty'] == faculty:
                students.append(f"имя: {student['first_name']}, фамилия: {student['last_name']}, номер зачётки: "
                                f"{student['token']}")
        return students
 
    def filter_students_by_specialization(self, specialization: str) -> list[str]:
        students = []
        for student in self.data:
            if student['specialization_name'] == specialization:
                students.append(f"имя: {student['first_name']}, фамилия: {student['last_name']}, номер зачётки: "
                                f"{student['token']}")
        return students
 
    def get_students_with_good_grades(self) -> list[str]:
        result = set()
        for student in self.data:
            for course, semesters in student["grades_by_semester"].items():
                for semester, exams in semesters.items():
                    for exam, grade in exams.items():
                        if grade > 0 and grade >= 4:
                            result.add(f"имя: {student['first_name']}, фамилия: {student['last_name']}, номер зачётки: "
                                       f"{student['token']}")
        return list(result)
 
    def get_average_grade_by_faculty(self) -> dict[str, float]:
        average_grades_for_faculty = {}
        for student in self.data:
            faculty = student["name_of_faculty"]
            total_grade = 0
            num_courses = 0
            
            for course, semesters in student["grades_by_semester"].items():
                for semester, exams in semesters.items():
                    for exam, grade in exams.items():
                        if grade > 0:
                            total_grade += grade
                            num_courses += 1
            
            if num_courses > 0:
                average_grade_for_faculty = total_grade / num_courses
                if faculty in average_grades_for_faculty:
                    average_grades_for_faculty[faculty].append(average_grade_for_faculty)
                else:
                    average_grades_for_faculty[faculty] = [average_grade_for_faculty]
                    
        for faculty, grades in average_grades_for_faculty.items():
            average_grade_for_faculty = sum(grades) / len(grades)
            average_grades_for_faculty[faculty] = average_grade_for_faculty
        return average_grades_for_faculty
 
    def get_average_grade_by_specialization(self) -> dict[str, float]:
        average_grades_for_specialization = {}
        for student in self.data:
            specialization = student["specialization_name"]
            total_grade = 0
            num_courses = 0
            
            for course, semesters in student["grades_by_semester"].items():
                for semester, exams in semesters.items():
                    for exam, grade in exams.items():
                        if grade > 0:
                            total_grade += grade
                            num_courses += 1
            
            if num_courses > 0:
                average_grade_for_specialization = total_grade / num_courses
                if specialization in average_grades_for_specialization:
                    average_grades_for_specialization[specialization].append(average_grade_for_specialization)
                else:
                    average_grades_for_specialization[specialization] = [average_grade_for_specialization]
 
        for specialization, grades in average_grades_for_specialization.items():
            average_grade_for_specialization = sum(grades) / len(grades)
            average_grades_for_specialization[specialization] = average_grade_for_specialization
 
        return average_grades_for_specialization
 
 
file = 'C:\\Users\\Lenovo\\PycharmProjects\\pythonProject1\\Dataset_for_coursework.json'
# file = str(input())
 
record = RecordingSystem(file)
ec_sys = EqualSystem(record.filename)
 
while True:
    print('Enter name of function(\033[1;35mEnter\033[0m - enter data, '
          '\033[1;35mRecording\033[0m - recording in json-file, \033[1;35mHandling\033[0m - data handling):')
 
    choose = input()
    match choose:
        case 'Enter':
            ec_sys.load_data()
            first_name = input("Input name of student: ")
            last_name = input("Input surname of student: ")
            name_of_faculty = input("Input name of faculty(Abbreviations remain in your language): ")
            name_of_specialization = input("Input name of specialization: ")
            token = str(input("Enter the student identification number (ID) of your record book: "))
 
            ec_sys.enter_users_data(first_name, last_name, name_of_specialization, name_of_faculty, token)
            ec_sys.end_of_recording()
 
        case 'Recording':
            ec_sys.json_write()
        case 'Handling':
            method_of_grouping = str(input())
            ec_sys.load_data()
            match method_of_grouping:
                case 'Filter by token':
                    token = str(input())
                    print(ec_sys.get_student_by_token(token))
                case 'Filter by faculty':
                    faculty = str(input())
                    print(ec_sys.filter_students_by_faculty(faculty))
                case 'Filter by specialization':
                    specialization = str(input())
                    print(ec_sys.filter_students_by_specialization(specialization))
                case 'Filter by good grade':
                    print(ec_sys.get_students_with_good_grades())
                case 'Average grade by specialization':
                    average_grades_f_s = ec_sys.get_average_grade_by_specialization()
                    for specialization, average_grade in average_grades_f_s.items():
                        print(f"Specialization: {specialization}, average grade: {average_grade}")
                case 'Average grade by faculty':
                    average_grade_f_f = ec_sys.get_average_grade_by_faculty()
                    for faculty, average_grade in average_grade_f_f.items():
                        print(f"Faculty: {faculty}, average grade: {average_grade_f_f}")
                case other:
                    print("Wrong choice")
 
        case other:
            print("Wrong choice")
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.04.2023, 15:28
Ответы с готовыми решениями:

Оптимизация кода
Написал код, работает правильно, но сайт, который проверяет, говорит, что цикломатическая сложность...

Оптимизация кода
я новичок в сфере программирования хотелось бы написать полезную программу для себя но код вышел...

Оптимизация кода, генерация списков и словарей
Создайте кортеж a = (5, 3, 2, 1, 4) и отсортируйте его по возрастанию с помощью метода sorted....

Оптимизация кода
Мы будем работать с набором слов. Ваша задача — выписать все слова, которые являются анаграммами...

Оптимизация кода
kol=0 N=int(input()) teach_list= for i in range(N): teach_list.append(input()) teach_list1...

5
507 / 166 / 51
Регистрация: 12.02.2023
Сообщений: 607
20.04.2023, 22:16 2
возможно могу и ошибаться конечно, но что-то мне подсказывает, что с этим self.data вы там натворили неладное
Python
1
2
3
4
5
6
7
8
9
10
11
12
def __init__(self, file: str):
        super().__init__(file)
        self.filename = file
        self.data = self.load_data() # вот в этой строчке
 
    def load_data(self): # в этой
        try:
            with open(self.filename, 'r') as file:
                self.data = json.load(file) # и вот в этой
        except FileNotFoundError:
            print("Enter the correct file path")
        return self.data
0
1 / 1 / 0
Регистрация: 15.11.2021
Сообщений: 228
21.04.2023, 12:39  [ТС] 3
Ну тут "пайчарм" говорит что я ничего не получаю(возвращаю*) с метода

Добавлено через 4 минуты
Но тогда почему в первом классе не возникает такой ошибки("варнинга")
0
1 / 1 / 0
Регистрация: 15.11.2021
Сообщений: 228
21.04.2023, 18:53  [ТС] 4
Как я понимаю, я где-то(в отмеченных вами строках) перезаписываю эти данные дважды
0
Am I evil? Yes, I am!
Эксперт PythonЭксперт Java
17593 / 10342 / 2826
Регистрация: 21.10.2017
Сообщений: 22,417
21.04.2023, 20:19 5
Цитата Сообщение от ArtemGubarev Посмотреть сообщение
def load_data(self) -> None:
Цитата Сообщение от ArtemGubarev Посмотреть сообщение
return data
0
1 / 1 / 0
Регистрация: 15.11.2021
Сообщений: 228
22.04.2023, 17:09  [ТС] 6


Добавлено через 48 секунд
Ой, только понял что просто продублировал методы, спасибо
0
22.04.2023, 17:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.04.2023, 17:09
Помогаю со студенческими работами здесь

Оптимизация кода
Добрый день! Решаю задачу по учебе и вроде код по условию верный, но при тестах выдает ошибку...

Оптимизация кода
Добрый день! Я только учусь и столкнулся с такой проблемой: Задание на кодварсе следующее: есть...

Оптимизация кода
Оптимизируйте пожалуйста эти коды: s = input() res = set() for i in range(len(s)): for j in...

Оптимизация кода
Как сделать count для каждого значения? Ниже приведен код, но я хотел бы сделать count каждого...

Оптимизация кода
Коллеги, здравствуйте! Как можно оптимизировать код, долго что-то выполняется import math...

Оптимизация кода
Задача G. Условие в .pdf файле. Если нужны тесты, напишите. with open('test\\01', 'r') as inp: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru