На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: RaD
  
    > Знатоки Питона, помогите
      Не поможет ли кто?
      Нужно разобраться с программой (основные функции и что делает каждая строчка). Этот язык для меня новый, разбираться по книжкам пытаюсь, но понятть программу пока не получается (а очень хочется и надо). Поэтому прошу оказать помощь всех кому не сложно!
      Содержание классов (синтаксис) вроде повторяется, поэтому, если не затруднит разъясните, хотябы первый и последний класс "Должность" и "Занятие". Заранее огромное спасибо!!
      """
      Университет
      """

      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
        Angela, А Вы не пробовали сначала зарегистрироваться на форуме?
        Цитата
        Этот язык для меня новый, разбираться по книжкам пытаюсь

        Это пример вы взяли с книжки... если да то в книжке все о примере должно быть расписано.
          Прошу прощения, что не зарегистрировалась.
          Пример не из книги, поэтому и не понятен.
            Angela, а пример-то нерабочий... Отступы где?!
              Цитата Ho Im @
              Отступы где?!

              Вот именно без отступов вообще смысла в этой программы ровно ноль
                ExpandedWrap disabled
                  #! /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,
                  По ходу разбираюсь. Застряла на классах "Кафедра" и "Предмет"
                  Также непонятки с последним куском заполнения, начиная с if __name__ == "__main__":
                  Помогите, чем сможете. Спасибо.
                    Цитата Angela @
                    if __name__ == "__main__":


                    такой прием используется для отделения кода, который будет запускаться только при исполнении модуля как такового, и будет пропускаться при импорте модуля. Т.е. если имеем файл test.py:

                    ExpandedWrap disabled
                      if __name__ == "__main__":
                          print 'abc'


                    то при запуске python test.py на выходе получим строку abc, а при выполнении строчки import test на выход не будет выдано ничего.

                    Более конкретно, переменная __name__ хранит название текущего модуля. В главном модуле (т.е. в модуле, который был запущен интерпретатором на исполнение) эта переменная имеет значение "__main__". Вот. Надеюсь, не запутал...
                      Пример у тебя кривой, классы написаны неправильно и врятли будут работать. чтобы въехать в программирование на Питоне почитай либо Саммерфилд - Программирование на Python 3, либо Лутц - Изучаем Python 2
                        Lumberjack, Некромантим?!
                          Уж больно врезался мне в глаза данный кусок:
                          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__().

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

                          NetVir, объясни что это значит?
                          Сообщение отредактировано: Lumberjack -
                            Lumberjack , это значит посмотри на дату постов.
                              пардоньте
                              1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                              0 пользователей:


                              Рейтинг@Mail.ru
                              [ Script execution time: 0,0322 ]   [ 14 queries used ]   [ Generated: 18.05.24, 10:42 GMT ]