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

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

Исключения

Д/З

  1. Дистанционные тесты. TODO FrBrGeorge: отладить, написать подробный пример, послать информацию в группу

  1. <!> Задача_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
  2. <!> Задача_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
  3. <!> Задача_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/PythonIntro2023/Prac/09_Inheritance_Exceptions (последним исправлял пользователь FrBrGeorge 2023-11-07 10:41:27)