mirror of
https://github.com/Faridik/Carolyn.git
synced 2026-07-08 13:21:53 +00:00
Добавил классы, чтобы легче было оперировать со студентами и группами
This commit is contained in:
parent
976201b08c
commit
10ced6941d
6
.gitignore
vendored
6
.gitignore
vendored
@ -1,3 +1,5 @@
|
||||
.vscode
|
||||
/SpreadsheetsService/client_secret.json
|
||||
/SpreadsheetsService/token.json
|
||||
SpreadsheetsService/client_secret.json
|
||||
SpreadsheetsService/token.json
|
||||
SpreadsheetsService/models/__pycache__/*
|
||||
SpreadsheetsService/utils/__pycache__/*
|
||||
2
SpreadsheetsService/models/__init__.py
Normal file
2
SpreadsheetsService/models/__init__.py
Normal file
@ -0,0 +1,2 @@
|
||||
from .student import *
|
||||
from .group import *
|
||||
14
SpreadsheetsService/models/assignment.py
Normal file
14
SpreadsheetsService/models/assignment.py
Normal file
@ -0,0 +1,14 @@
|
||||
class Assignment:
|
||||
"""Задание."""
|
||||
|
||||
def __init__(self, weight: float, values: tuple):
|
||||
self.weight = weight
|
||||
self.values = values
|
||||
|
||||
@property
|
||||
def total(self) -> float:
|
||||
"""Получить общую оценку по заданию.
|
||||
|
||||
`вес*СУММ(рез-ты)`
|
||||
"""
|
||||
return sum(self.values) * self.weight
|
||||
0
SpreadsheetsService/models/const.py
Normal file
0
SpreadsheetsService/models/const.py
Normal file
64
SpreadsheetsService/models/group.py
Normal file
64
SpreadsheetsService/models/group.py
Normal file
@ -0,0 +1,64 @@
|
||||
from .student import Student
|
||||
|
||||
|
||||
class StudentNotFound(Exception):
|
||||
def __init__(self, message):
|
||||
self.message = message
|
||||
super().__init__(self.message)
|
||||
|
||||
|
||||
class Group:
|
||||
"""Объект "Группа" для работы со списком студентов.
|
||||
Используется для работы с множеством студентов.
|
||||
"""
|
||||
|
||||
def __init__(self, group_id: int):
|
||||
self.group_id: int = group_id
|
||||
self.students: Student = []
|
||||
|
||||
def __iter__(self):
|
||||
"""Делегирует итератор на список студентов.
|
||||
|
||||
Так, можно использовать конструкцию
|
||||
```python
|
||||
for student in group
|
||||
```
|
||||
"""
|
||||
return iter(self.students)
|
||||
|
||||
def add_student(self, student: Student):
|
||||
"""Добавить студента в группу."""
|
||||
self.students.append(student)
|
||||
|
||||
def get_student_by_number(self, number: int) -> Student:
|
||||
"""Возвращает студента по его номеру, если номера нет, то поднимает
|
||||
ошибку."""
|
||||
f = lambda s: number == s.number
|
||||
try:
|
||||
return next(filter(f, self.students))
|
||||
except StopIteration:
|
||||
raise StudentNotFound("Не могу найти студента по номеру")
|
||||
|
||||
def find_students(self, name: str) -> list:
|
||||
"""Найти студентов в группе по имени.
|
||||
|
||||
Возвращает список найденных студентов. Если никого не найдет, вернет
|
||||
пустой список.
|
||||
|
||||
Arguments:
|
||||
name (str): текстовое поле, часть имени.
|
||||
"""
|
||||
|
||||
f = lambda s: name.lower() in s.name.lower()
|
||||
return list(filter(f, self.students))
|
||||
|
||||
def top(self, n: int = None) -> list:
|
||||
"""Топ N студентов группы по среднему баллу. Возвращает весь список,
|
||||
если N не указано."""
|
||||
n = len(self.students) if n is None else n
|
||||
return sorted(self.students, key=lambda student: student.grade)[:n]
|
||||
|
||||
def between(self, a: float, b: float) -> list:
|
||||
"""Список студентов, у которых оценка между [a, b]."""
|
||||
f = lambda student: a < student.average < b
|
||||
return list(filter(f, self.students))
|
||||
25
SpreadsheetsService/models/student.py
Normal file
25
SpreadsheetsService/models/student.py
Normal file
@ -0,0 +1,25 @@
|
||||
from .assignment import Assignment
|
||||
|
||||
|
||||
class Student:
|
||||
"""Позволяет выполнять операции над студентами."""
|
||||
|
||||
def __init__(self, number: int, name: str):
|
||||
self.number: int = number
|
||||
self.name: str = name
|
||||
self.tg_id = None
|
||||
self.assignments = []
|
||||
|
||||
@property
|
||||
def add_assignment(self, assignment: Assignment):
|
||||
self.assignments.append(assignment)
|
||||
|
||||
@property
|
||||
def grade(self) -> float:
|
||||
"""Получить среднюю оценку студента по текущему контролю."""
|
||||
return 2
|
||||
|
||||
@property
|
||||
def score(self):
|
||||
"""Количество баллов у студента."""
|
||||
return sum([a.total for a in self.assignments])
|
||||
0
SpreadsheetsService/utils/__init__.py
Normal file
0
SpreadsheetsService/utils/__init__.py
Normal file
Loading…
x
Reference in New Issue
Block a user