Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 18, 2015 23:42:29

AlexFed
Зарегистрирован: 2015-10-30
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Помочь с заданием

Всем доброго времени суток. Прошу помочь, пожалуйста. Тут много текста, извините. Вроде решил все задания, кроме одного. Вот оно: Якщо n не задане, мається на увазі здача першого невиконаного практичного завдання. Как сделать чтоб моя функция def make_lab могла принимать только 1 значение m и записывала это значение в первое несделанное задание?
Извините за быдлокод. Учусь только. Буду благодарен за помощь.

Задание:
Розробити класс Student для представлення відомостей про успішність слухача курсу Prometheus. Об'єкт класу має містити поля для збереження імені студента та балів, отриманих ним за виконання практичних завдань і фінального екзамена.

Забезпечити наступні методи класу:

конструктор, який приймає рядок – ім'я студента – та словник, що містить налаштування курсу у наступному форматі:
conf = {
'exam_max': 30, # кількість балів, доступна за здачу екзамена
'lab_max': 7, # кількість балів, доступна за виконання 1 практичної роботи
'lab_num': 10, # кількість практичних робіт в курсі
'k': 0.61, # частка балів від максимума, яку необхідно набрати для отримання сертифікату
}.
метод make_lab(m,n), який приймає 2 аргументи та повертає посилання на поточний об'єкт. Тут m – кількість балів набрана за виконання завдання (ціле або дійсне число), а n – ціле невід'ємне число, порядковий номер завдання (лаби нумеруються від 0 до lab_num-1). При повторній здачі завдання зараховується остання оцінка. Якщо n не задане, мається на увазі здача першого невиконаного практичного завдання. Врахувати, що під час тестування система іноді дає збої, тому за виконання завдання може бути нараховано більше балів ніж це можливо за правилами курсу, що не повинно впливати на рейтинг студента. Крім того в системі можуть міститися додаткові завдання, чиї номери виходять за межі 0..lab_num – звичайно, бали за них не повинні зараховуватися для отримання сертифікату.
метод make_exam(m), який приймає 1 аргумент – ціле або дійсне число, оцінку за фінальний екзамен, та повертає посилання на поточний об'єкт. Як і у випадку з практичними завданнями, оцінка за екзамен в результаті помилки іноді може перевищувати максимально допустиму.
метод is_certified(), який повертає тьюпл, що містить дійсне число (суму балів студента за проходження курсу), та логічне значення True або False в залежності від того, чи достатньо цих балів для отримання сертифікату.

Приклад послідовності дій для тестування класу:
conf = {
'exam_max': 30,
'lab_max': 7,
'lab_num': 10,
'k': 0.61,
}
oleg = Student('Oleg', conf)
oleg.make_lab(1) \ # labs: 1 0 0 0 0 0 0 0 0 0, exam: 0
.make_lab(8,0) \ # labs: 7 0 0 0 0 0 0 0 0 0, exam: 0
.make_lab(1) \ # labs: 7 1 0 0 0 0 0 0 0 0, exam: 0
.make_lab(10,7) \ # labs: 7 1 0 0 0 0 0 7 0 0, exam: 0
.make_lab(4,1) \ # labs: 7 4 0 0 0 0 0 7 0 0, exam: 0
.make_lab(5) \ # labs: 7 4 5 0 0 0 0 7 0 0, exam: 0
.make_lab(6.5) \ # labs: 7 4 5 6.5 0 0 0 7 0 0, exam: 0
.make_exam(32) # labs: 7 4 5 6.5 0 0 0 7 0 0, exam: 30
print oleg.is_certified() # (59.5, False)
oleg.make_lab(7,1) # labs: 7 7 5 6.5 0 0 0 7 0 0, exam: 30
print oleg.is_certified() # (62.5, True)

class Student():
    name = None
    config = None
    marks = None
    def __init__(self, name, config):
        self.name = name
        self.config = config
        self.marks = {}
        for i in range(1, self.config['lab_num'] + 1):  # словарь с оценками
            self.marks[i] = 0
    def make_lab(self, m, n):
        if n <= self.config['lab_num']:  # проверяем не вышли ли за предел к-ства лаб
            if float(m) > float(self.config['lab_max']):  # если оценка больше заданой, то присваиваем макс значению
                self.marks[n] = self.config['lab_max']
            else:
                self.marks[n] = m  # если нет, то берем наше значение
        # print(self.marks)
        return self  # ссылка на наш обьект
    def make_exam(self, m):
        if m > self.config['exam_max']:  # если оценка больше заданой, дальше понятно крч
            self.marks['exam'] = self.config['exam_max']
            print(self.config['exam_max'])
        else:
            self.marks['exam'] = m
        # print(self.marks)
        return self
    def is_certified(self):
        if sum(self.marks.values()) >= self.config['k']*100:  # тут тоже все понятно
            print(sum(self.marks.values()), True)
        else:
            print(sum(self.marks.values()), False)

Офлайн

#2 Ноя. 19, 2015 20:36:26

AlexFed
Зарегистрирован: 2015-10-30
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Помочь с заданием

Всем спасибо. Уже сам разобрался. Мотивация от Вас прям и валила

Офлайн

#3 Ноя. 19, 2015 20:56:06

ihorgorobets
Зарегистрирован: 2015-11-01
Сообщения: 11
Репутация: +  -1  -
Профиль   Отправить e-mail  

Помочь с заданием

AlexFed
Всем спасибо. Уже сам разобрался. Мотивация от Вас прям и валила
Некультурно
__
А зачем ты выкладваешь ответ задания с курсов? Вроде как каждый должен делать их сам.



Second France is best France

Отредактировано ihorgorobets (Ноя. 19, 2015 21:11:47)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version