Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.119.109.119] |
|
Сообщ.
#1
,
|
|
|
Не поможет ли кто?
Нужно разобраться с программой (основные функции и что делает каждая строчка). Этот язык для меня новый, разбираться по книжкам пытаюсь, но понятть программу пока не получается (а очень хочется и надо). Поэтому прошу оказать помощь всех кому не сложно! Содержание классов (синтаксис) вроде повторяется, поэтому, если не затруднит разъясните, хотябы первый и последний класс "Должность" и "Занятие". Заранее огромное спасибо!! """ Университет """ class Position: """ Должность """ counter = 0 positions = set() def __init__(self, name): Position.counter += 1 self.code = Position.counter self.name = name Position.positions.add(self) def __hash__(self): return hash(self.code) class Teacher: """ Преподаватель """ counter = 0 teachers = set() def __init__(self, name, adress, position): assert position in Position.positions Teacher.counter += 1 self.number = Teacher.counter self.name = name self.adress = adress self.position = position Teacher.teachers.add(self) def __hash__(self): return hash(self.number) class Chair: """ Кафедра """ counter = 0 chairs = set() def __init__(self, name, (chairName, adress, position)): Chair.counter += 1 self.code = Chair.counter self.name = name headChair = Teacher(chairName, adress, position) self.headChair = headChair self.teachers = [headChair] Chair.chairs.add(self) def addTeacher(self, name, adress, position): teacher = Teacher(name, adress, position) self.teachers.append(teacher) return teacher def __hash__(self): return hash(self.code) class Auditorium: """ Аудитория """ counter = 0 auditoriums = set() def __init__(self, name): Auditorium.counter += 1 self.number = Auditorium.counter self.name = name Auditorium.auditoriums.add(self) def __hash__(self): return hash(self.number) class Examination: """ Экзамен """ counter = 0 examinations = set() def __init__(self, name): Examination.counter += 1 self.code = Examination.counter self.name = name Examination.examinations.add(self) def __hash__(self): return hash(self.code) class Subject: """ Предмет """ counter = 0 subjects = set() def __init__(self, name, hours, examination): assert examination in Examination.examinations Subject.counter += 1 self.code = Subject.counter self.name = name self.hours = hours self.examination = examination Subject.subjects.add(self) def __hash__(self): return hash(self.code) class Lesson: """ Занятие """ lessons = [] def __init__(self, teacher, subject, auditorium): assert teacher in Teacher.teachers assert subject in Subject.subjects assert auditorium in Auditorium.auditoriums self.teacher = teacher self.subject = subject self.auditorium = auditorium Lesson.lessons.append(self) if __name__ == "__main__": assistant = Position('ассистент') lecturer = Position('доцент') professor = Position('профессор') chair = Chair('КА&ТЧ', ('Кузнецов В.Н.', 'Саратов', professor)) teach1 = chair.addTeacher('Блинков Ю.А.', 'Саратов', lecturer) teach2 = chair.addTeacher('Ромакина О.М.', 'Саратов', assistant) aud1 = Auditorium('им.Вавилова') aud2 = Auditorium('111') exam1 = Examination('зачет') exam2 = Examination('экзамен') sub1 = Subject('Проектирование ИС(лек)', 2, exam1) sub2 = Subject('Проектирование ИС(прак)', 2, exam2) sub3 = Subject('Алгебра', 2, exam1) Lesson(chair.headChair, sub3, aud1) Lesson(teach1, sub1, aud1) Lesson(teach2, sub2, aud2) Lesson(teach2, sub2, aud2) for lesson in Lesson.lessons: print "%13s" % lesson.teacher.name, print "%13s" % lesson.teacher.position.name, print "%23s" % lesson.subject.name, print "%2d" % lesson.subject.hours, print "%6s" % lesson.subject.examination.name, print "%15s" % lesson.auditorium.name |
Сообщ.
#2
,
|
|
|
Angela, А Вы не пробовали сначала зарегистрироваться на форуме?
Цитата Этот язык для меня новый, разбираться по книжкам пытаюсь Это пример вы взяли с книжки... если да то в книжке все о примере должно быть расписано. |
Сообщ.
#3
,
|
|
|
Прошу прощения, что не зарегистрировалась.
Пример не из книги, поэтому и не понятен. |
Сообщ.
#4
,
|
|
|
Angela, а пример-то нерабочий... Отступы где?!
|
Сообщ.
#5
,
|
|
|
Цитата Ho Im @ Отступы где?! Вот именно без отступов вообще смысла в этой программы ровно ноль |
Сообщ.
#6
,
|
|
|
#! /usr/bin/env python # -*- coding: cp1251 -*- """ Университет """ class Position: """ Должность """ counter = 0 positions = set() def __init__(self, name): Position.counter += 1 self.code = Position.counter self.name = name Position.positions.add(self) def __hash__(self): return hash(self.code) class Teacher: """ Преподаватель """ counter = 0 teachers = set() def __init__(self, name, adress, position): assert position in Position.positions Teacher.counter += 1 self.number = Teacher.counter self.name = name self.adress = adress self.position = position Teacher.teachers.add(self) def __hash__(self): return hash(self.number) class Chair: """ Кафедра """ counter = 0 chairs = set() def __init__(self, name, (chairName, adress, position)): Chair.counter += 1 self.code = Chair.counter self.name = name headChair = Teacher(chairName, adress, position) self.headChair = headChair self.teachers = [headChair] Chair.chairs.add(self) def addTeacher(self, name, adress, position): teacher = Teacher(name, adress, position) self.teachers.append(teacher) return teacher def __hash__(self): return hash(self.code) class Auditorium: """ Аудитория """ counter = 0 auditoriums = set() def __init__(self, name): Auditorium.counter += 1 self.number = Auditorium.counter self.name = name Auditorium.auditoriums.add(self) def __hash__(self): return hash(self.number) class Examination: """ Экзамен """ counter = 0 examinations = set() def __init__(self, name): Examination.counter += 1 self.code = Examination.counter self.name = name Examination.examinations.add(self) def __hash__(self): return hash(self.code) class Subject: """ Предмет """ counter = 0 subjects = set() def __init__(self, name, hours, examination): assert examination in Examination.examinations Subject.counter += 1 self.code = Subject.counter self.name = name self.hours = hours self.examination = examination Subject.subjects.add(self) def __hash__(self): return hash(self.code) class Lesson: """ Занятие """ lessons = [] def __init__(self, teacher, subject, auditorium): assert teacher in Teacher.teachers assert subject in Subject.subjects assert auditorium in Auditorium.auditoriums self.teacher = teacher self.subject = subject self.auditorium = auditorium Lesson.lessons.append(self) if __name__ == "__main__": assistant = Position('ассистент') lecturer = Position('доцент') professor = Position('профессор') chair = Chair('КА&ТЧ', ('Кузнецов В.Н.', 'Саратов', professor)) teach1 = chair.addTeacher('Блинков Ю.А.', 'Саратов', lecturer) teach2 = chair.addTeacher('Ромакина О.М.', 'Саратов', assistant) aud1 = Auditorium('им.Вавилова') aud2 = Auditorium('111') exam1 = Examination('зачет') exam2 = Examination('экзамен') sub1 = Subject('Проектирование ИС(лек)', 2, exam1) sub2 = Subject('Проектирование ИС(прак)', 2, exam2) sub3 = Subject('Алгебра', 2, exam1) Lesson(chair.headChair, sub3, aud1) Lesson(teach1, sub1, aud1) Lesson(teach2, sub2, aud2) Lesson(teach2, sub2, aud2) for lesson in Lesson.lessons: print "%13s" % lesson.teacher.name, print "%13s" % lesson.teacher.position.name, print "%23s" % lesson.subject.name, print "%2d" % lesson.subject.hours, print "%6s" % lesson.subject.examination.name, |
Сообщ.
#7
,
|
|
|
По ходу разбираюсь. Застряла на классах "Кафедра" и "Предмет"
Также непонятки с последним куском заполнения, начиная с if __name__ == "__main__": Помогите, чем сможете. Спасибо. |
Сообщ.
#8
,
|
|
|
Цитата Angela @ if __name__ == "__main__": такой прием используется для отделения кода, который будет запускаться только при исполнении модуля как такового, и будет пропускаться при импорте модуля. Т.е. если имеем файл test.py: if __name__ == "__main__": print 'abc' то при запуске python test.py на выходе получим строку abc, а при выполнении строчки import test на выход не будет выдано ничего. Более конкретно, переменная __name__ хранит название текущего модуля. В главном модуле (т.е. в модуле, который был запущен интерпретатором на исполнение) эта переменная имеет значение "__main__". Вот. Надеюсь, не запутал... |
Сообщ.
#9
,
|
|
|
Пример у тебя кривой, классы написаны неправильно и врятли будут работать. чтобы въехать в программирование на Питоне почитай либо Саммерфилд - Программирование на Python 3, либо Лутц - Изучаем Python 2
|
Сообщ.
#10
,
|
|
|
Lumberjack, Некромантим?!
|
Сообщ.
#11
,
|
|
|
Уж больно врезался мне в глаза данный кусок:
class Position: """ Должность """ counter = 0 positions = set() def __init__(self, name): Position.counter += 1 self.code = Position.counter self.name = name Position.positions.add(self) def __hash__(self): return hash(self.code) Во-первых когда ты создаешь класс, все переменные которые будут хранится в объекте класса ты объявляешь в базовом для всех классов методе __init__(self, .....), используя синтаксис self.[имя переменной] = значение. Во вторых Во-вторых. касаемо метода __init__(), в нем как я понял сделана попытка увеличить счетчик позиции должности, но сделано не правильно т.к объекта Position пока не существует а имеется только указатель на объект (self) и название должности (name). Было бы разумней передавать номер последней позиции как параметр метода __init__(). Я тебе посоветовал учебники по которым сам изучаю питон и в них написана действительно та информация по которой ты сможешь понять синтаксис питона и не допустить подобных ошибок, ну а касаемо данного примера дальше ошибки подобные. NetVir, объясни что это значит? |
Сообщ.
#12
,
|
|
|
Lumberjack , это значит посмотри на дату постов.
|
Сообщ.
#13
,
|
|
|
пардоньте
|