11.08 Наследование и исключения

B) — пример из лекции

Наследование

Исключения

О дистанционных тестах.

Д/З

  1. Дистанционные тесты. TODO написать более подробный пример

    • Ко всем задачам (если это не оговорено отдельно) подобрать среди зарегистрированных репозиториев три каталога с тестами, которые

    • В каталог с решением каждой задачи положить файл URLS (большими буквами), в котором должно быть три таких URL, по одному в строке

      • Пример строчки в таком файле для текстов из репозитория на GitHub:

        • https://github.com/Veniamin-Arefev/pythonprac-2021/tree/main/20211111/2/tests

      • Пример для GitLab:

        • https://git.cs.msu.ru/s02190248/pythonprac/-/tree/main/20211111/2/tests

    • Проверить что эти тесты скачиваются и проверяются pyjydge

  2. <!> Задача_1:

    • Написать класс DivStr (унаследованный от collections.UserString), в котором:

      • Добавлена возможность заведения пустой строки без параметров — DivStr()

      • Добавлена операция a // n — возвращается итератор из n подстрок одинакового наибольшего размера, на которые можно разбить исходную строку

      • Добавлена операция a % n — возвращается «остаток от деления», хвостик, который надо приписать к a // n, чтобы получилась вся строка (возможно, пустой)

      Input

         1 a = DivStr("XcDfQWEasdERTdfgRTY")
         2 print(* a // 4)
         3 print(a % 4)
         4 print(* a % 10 // 3)
         5 print(a.lower() % 3)
         6 print(* a[1:7] // 3)
         7 print(a % 5 + DivStr() + a % 6)
      

      Output

      XcDf QWEa sdER Tdfg
      RTY
      ERT dfg RTY
      y
      cD fQ WE
      gRTYY
  3. <!> Задача_2:

    • Написать программу, которая заставляет человека вводить координаты вершин треугольника в формате (x1, y1), (x2, y2), (x3, y3), до тех пор, пока это не окажутся координаты вершин треугольника в указанном формате, а потом выводит его площадь с точностью до сотой.

      • Если формат ввода неправильный, программа вместо площади выводит «Invalid input», а если формат условно правильный, но площадь его нулевая или вычислить её нельзя, потому что введены вообще не числа — «Not a triangle».

    • Диагностика ввода и расчет площади производится в функции triangleSquare, которая:

      • получает на вход входную строку программы
      • преобразует строку в координаты вершин: (x1, y1), (x2, y2), (x3, y3) = eval(inStr)

      • при преобразовании ловит все исключения, и при любом перехваченном исключении формирует исключение InvalidInput (этот класс нужно определить)

      • если ввод корректен, выполняет проверку на то, что координаты - корректны для треугольника; в случае некорректности формирует исключение BadTriangle (этот класс нужно определить)

      • если координаты корректны, то вычисляет и возвращает площадь
    • При вызове функции triangleSquare в основном коде программы ловятся исключения InvalidInput и BadTriangle, и в блоках их обработки выдается соответствующая диагностика

    • Вывод площади выполняется в блоке else

    • Написать тесты:
      • на неправильный формат
      • на не-треугольник

      Input:

      asdf
      1,2,3,4,5,6
      (1,1), (2,2), (11,11)
      (1,2), (4,5), (9,8)

      Output:

      Invalid input
      Invalid input
      Not a triangle
      3.00
  4. <!> Задача_3 на иерархию исключений

    • Написать программу, в которой есть:
      • Несложная иерархия исключений: базовый класс Undead и наследники Skeleton, Zombie и Ghoul

      • Функция necro(a), которая в зависимости от остатка от деления a на 3 формирует исключение: 0 - Skeleton, 1 - Zombie, 2 - Ghoul

      • Ввод целочисленных значений x и y

      • Цикл по range(x,y), в теле цикла: вызов necro(), перехват исключений следующих типов (и в таком порядке): Skeleton, Zombie, Undead; при обработке исключений вывод текста, соответственно, "Skeleton", "Zombie", "Generic Undead"

      Input:

      11, 17

      Output:

      Generic Undead
      Skeleton
      Zombie
      Generic Undead
      Skeleton
      Zombie

LecturesCMC/PythonIntro2022/Prac/09_Inheritance_Exceptions (последним исправлял пользователь hbd 2022-11-11 18:08:41)