Roman9234

Untitled

Sep 19th, 2024 (edited)
450
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 13.38 KB | Fixit | 0 0
  1. import math
  2. import time
  3. from module6hard import Figure, Circle, Triangle, Cube
  4.  
  5. TIME_COUNT = 0
  6.  
  7.  
  8. print("Проверка класса Figure... ")
  9. time.sleep(TIME_COUNT)
  10. assert "sides_count" in Figure.__dict__, "Создайте классовый атрибут sides_count над конструктором"
  11. assert "_Figure__sides" not in Figure.__dict__, "Атрибут __sides не должен быть классовым атрибутом. Он должен быть в конструкторе. Иначе случится так, что если вы создадите два объекта, измените список у одного из них - он автоматически изменится у другого. Попробуйте. так быть не должно"
  12. assert "_Figure__color" not in Figure.__dict__, "Атрибут __color не должен быть классовым атрибутом. Он должен быть в конструкторе. Иначе случится так, что если вы создадите два объекта, измените список у одного из них - он автоматически изменится у другого. Попробуйте. так быть не должно"
  13. assert "get_color" in Figure.__dict__, "Забыли метод get_color"
  14. assert "set_color" in Figure.__dict__, "Забыли метод set_color"
  15. assert "get_sides" in Figure.__dict__, "Забыли метод get_sides"
  16. assert "set_sides" in Figure.__dict__, "Забыли метод set_sides"
  17. assert "__len__" in Figure.__dict__, "Забыли метод __len__"
  18. assert "_Figure__is_valid_color" in Figure.__dict__, "Забыли метод __is_valid_color"
  19. assert "_Figure__is_valid_sides" in Figure.__dict__, "Забыли метод __is_valid_sides"
  20. assert Figure.sides_count == 0, "Figure: sides_count должен быть равен 0"
  21. try:
  22.     f1 = Figure((-100, -100, -100), 1)
  23.     f2 = Figure((0, 0, 0), 2)
  24.     f3 = Figure((300, 300, 300), 3)
  25.     f4 = Figure([5, 5, 5], 5, 6, 7, 8, 9, 10)
  26.     f5 = Figure([127, 14, 48], 5, 6, 7, 8, 9, 10, 11)
  27. except:
  28.     print("Вы забыли создать конструктор, либо он не имеет вид def __init__(self, color: list, *sides: int): или попроще def __init__(self, color, *sides):")
  29.     exit()
  30. assert isinstance(f3._Figure__color, (list, tuple)), "В конструкторе нужно сделать self.__color списком или кортежем"
  31. assert list(f1.get_color()) == [
  32.     0, 0, 0], "У вас сейчас можно при создании объекта записать отрицательные числа в цвет. Добавьте проверку set_color"
  33.  
  34. assert list(f2.get_color()) == [0, 0, 0] , "У вас нельзя записать 0 в качестве значения цвета в конструкторе"
  35. assert list(f3.get_color()) == [0, 0, 0] , "У вас сейчас можно при создании объекта записать числа, больше 255 в цвете"
  36. assert len(f1._Figure__sides) == 0, "В конструкторе длина списка sides не равна 0"
  37. assert len(f1.get_sides()) == 0, "Геттер get_sides выдает список не из 0 элементов"
  38. assert isinstance(f1.get_sides(), list), "get_sides должен возвращать список сторон"
  39. assert f1.get_sides() == [] or f5.get_sides() == [
  40. ], "Если в конструкторе передано сторон меньше, чем sides_count, то sides должен состоять из 0 единиц: [] по количеству sides_count (не создавать просто [])"
  41. assert f4.get_sides() == [], "Обратите внимание, что в конструктор передается *sides - неограниченное количество сторон, и если количество переданных сторон совпадает с sides_count, то стороны записываются в список sides. Метод get_sides должен выдавать именно их."
  42. try:
  43.     f4.set_color("red", "green", "blue")
  44. except:
  45.     print("Добавьте проверку в __is_valid_color, что цвет является числом")
  46.  
  47.  
  48. class Sixter(Figure):
  49.     sides_count = 6
  50.  
  51.  
  52. f4 = Sixter([5, 5, 5], 5, 6, 7, 8, 9, 10)
  53. f4.set_color(300, 300, 300)
  54. assert list(f4.get_color()) == [5, 5, 5], "Проверка __is_valid_color пропускает числа, больше 255, либо у вас не сохраняется в set_color изначальное значение цвета. Метод должен работать так: если переданный цвет является валидным, то self.__color = этому новому цвету. В противном случае ничего не происходит"
  55. f4.set_color(255, 255, 255)
  56. assert list(f4.get_color()) == [255, 255, 255], "Попробовал set_color(255,255,255). Число 255 почему-то не входит в диапазон разрешенных значений в set_color"
  57. f4.set_color(0, 0, 0)
  58. assert list(f4.get_color()) == [0, 0, 0], "Попробовал set_color(0,0,0). Число 0 почему-то не входит в диапазон разрешенных значений в set_color"
  59. f4.set_sides(1, 2, 3, 4, 5, 6)
  60. assert f4.get_sides() == [
  61.     1, 2, 3, 4, 5, 6], f"Передал в set_sides числа 1,2,3,4,5,6, а get_sides не выдал [1,2,3,4,5,6]. Вышло {f4.get_sides()} Что за ошибка вкралась?"
  62. f4.set_sides(5)
  63. assert f4.get_sides() == [
  64.     1, 2, 3, 4, 5, 6], "Поправьте __is_valid_sides - первые строки в методе: if len(sides) != self.sides_count: return False. Сейчас при передаче одной стороны в set_sides список сторон не сохраняется исходным"
  65. f4.set_sides(5.5, 5.5, 5.5, 5.5, 5.5, 5.5)
  66. assert f4.get_sides() == [
  67.     1, 2, 3, 4, 5, 6], "Поправьте __is_valid_sides - если в set_sides передаются нецелые числа, то список сторон не должен меняться на эти переданные числа"
  68. assert len(f4) == sum(f4.get_sides()), "Метод __len__ должен выдавать сумму всех сторон. Используйте return sum(self.__sides)"
  69. print("Ошибок нет! Класс Figure хорош.")
  70.  
  71. print("\nТеперь класс Circle...")
  72. print("Не забывайте, что в этом и следующем классах к сторонам нужно обращаться self.get_sides(), а к цвету - self.get_color()")
  73. time.sleep(TIME_COUNT)
  74. assert issubclass(
  75.     Circle, Figure), "Класс Circle должен наследоваться от класса Figure. Используйте следующий синтаксис: class Circle(Figure)"
  76. assert "sides_count" in Circle.__dict__, "Создайте классовый атрибут sides_count над конструктором. Он должен равняться 1."
  77. assert "_Circle__sides" not in Circle.__dict__, "Атрибут __sides не должен быть классовым атрибутом. Он должен быть в конструкторе. Иначе случится так, что если вы создадите два объекта, измените список у одного из них - он автоматически изменится у другого. Попробуйте. так быть не должно"
  78. assert "_Circle__color" not in Circle.__dict__, "Атрибут __color не должен быть классовым атрибутом. Он должен быть в конструкторе. Иначе случится так, что если вы создадите два объекта, измените список у одного из них - он автоматически изменится у другого. Попробуйте. так быть не должно"
  79. assert Circle.sides_count == 1, "sides_count должен быть равен 1"
  80. circle = Circle((255, 150, 150), 3, 4, 5)
  81. assert circle.get_sides() == [1], "При передаче нескольких сторон при создании круга, в списке sides должно быть [1]"
  82. true_radius = 1/(2 * math.pi)
  83. assert circle._Circle__radius - \
  84.     true_radius < 0.01, "Неправильная формула расчета радиуса. Используйте 0-й элемент списка сторон и делите его на (2 * math.pi)"
  85. true_area = math.pi
  86. assert circle.get_square() - true_area < 0.01, "Неправильно высчитывается площадь, формула такова: math.pi * (self.__radius ** 2)"
  87. circle._Circle__radius = 5
  88. true_area = math.pi * 25
  89. assert circle.get_square() - true_area < 0.01, "Неправильно высчитывается площадь, формула такова: math.pi * (self.__radius ** 2)"
  90. print("С кругом у вас тоже полный порядок!")
  91.  
  92. time.sleep(1)
  93. print("\nТеперь смотрим класс Triangle...")
  94. time.sleep(TIME_COUNT)
  95. assert issubclass(
  96.     Triangle, Figure), "Класс Triangle должен наследоваться от класса Figure. Используйте следующий синтаксис: class Circle(Figure)"
  97. assert "sides_count" in Triangle.__dict__, "Создайте классовый атрибут sides_count над конструктором"
  98. assert "_Triangle__sides" not in Triangle.__dict__, "Атрибут __sides не должен быть классовым атрибутом. Он должен быть в конструкторе. Иначе случится так, что если вы создадите два объекта, измените список у одного из них - он автоматически изменится у другого. Попробуйте. так быть не должно"
  99. assert "_Triangle__color" not in Triangle.__dict__, "Атрибут __color не должен быть классовым атрибутом. Он должен быть в конструкторе. Иначе случится так, что если вы создадите два объекта, измените список у одного из них - он автоматически изменится у другого. Попробуйте. так быть не должно"
  100. assert Triangle.sides_count == 3, "sides_count должен быть равен 1"
  101. triangle = Triangle((5, 5, 5), 3, 4, 5)
  102.  
  103. assert triangle.get_square() - 6.0 < 0.01, "Формула подсчета площади работает некорректно. Не забывайте скобки и использование math.sqrt"
  104.  
  105. print(f"С классом Треугольника тоже порядок!")
  106.  
  107. time.sleep(1)
  108. print(f"\nТеперь смотрим на последний класс - Cube")
  109. assert issubclass(
  110.     Cube, Figure), "Класс Cube должен наследоваться от класса Figure. Используйте следующий синтаксис: class Circle(Figure)"
  111. assert "sides_count" in Cube.__dict__, "Создайте классовый атрибут sides_count над конструктором"
  112. assert "_Cube__sides" not in Cube.__dict__, "Атрибут __sides не должен быть классовым атрибутом. Он должен быть в конструкторе. Иначе случится так, что если вы создадите два объекта, измените список у одного из них - он автоматически изменится у другого. Попробуйте. так быть не должно"
  113. assert "_Cube__color" not in Cube.__dict__, "Атрибут __color не должен быть классовым атрибутом. Он должен быть в конструкторе. Иначе случится так, что если вы создадите два объекта, измените список у одного из них - он автоматически изменится у другого. Попробуйте. так быть не должно"
  114. assert Cube.sides_count == 12, "sides_count должен быть равен 12"
  115. cube = Cube((2, 2, 2), 9, 12)
  116. assert cube.get_sides() == [1] * \
  117.     12, "Когда передается несколько сторон в конструктор, список должен состоять из 12-ти единиц"
  118. cube = Cube((2, 2, 2), 3)
  119. assert cube.get_sides() == [
  120.     3] * 12 or cube.get_sides() == (3,)*12, "Нужно переопределить конструктор. После вызова родительского конструктора - self.set_sides(*list(sides)*12)"
  121. assert cube.get_volume() == 27, "Метод подсчета объема куба некорректен, проверьте формулу и не забудьте, что для получения списка сторон используется self.get_sides(), а сторона вам нужна только одна, которую нужно возвести в степень 3"
  122. print(f"Всё правильно!")
  123. print("\n\nПОЗДРАВЛЯЮ С ОКОНЧАНИЕМ 6 МОДУЛЯ!")
  124.  
Advertisement
Add Comment
Please, Sign In to add comment