Раздел «Язык Си».PythonOOPTasks2:

Скопировать файлы

Нужно скопировать себе на компьютер в ту же директорию, где будете писать задачи файлы:

class Point

from grid import Grid

class Point:
    def __init__(self, x, y, color="blue"):
        self.x = x
        self.y = y
        self.color = color

    def __repr__(self):
        return '({}, {})'.format(self.x, self.y)
        
    def draw(self, color='blue'):
        g.draw_dot(self.x, self.y, color)
        
    def move(self, dx=0, dy=0):
        self.x += dx
        self.y += dy
        
def test_point():
    
    p1 = Point(0, 0)
    p1.draw()
    
    p2 = Point(50, -50)
    p2.draw('red')
    
if __name__ == '__main__':    
    g = Grid()
    test_point()
    g.done()

class Segment2

Начнем создавать класс Segment2 для описания отрезков на плоскости ХУ

from grid import Grid

import math

class Point:
    def __init__(self, x, y, color="blue"):
        self.x = x
        self.y = y
        self.color = color  # не используется

    def __repr__(self):
        return '({}, {})'.format(self.x, self.y)
        
    def draw(self, color='blue'):
        g.draw_dot(self.x, self.y, color)
        
    def move(self, dx=0, dy=0):
        self.x += dx
        self.y += dy


class Segment2:
    def __init__(self, start, finish):
        self.start = start
        self.finish = finish

    def __repr__(self):
        return '[{}, {}]'.format(repr(self.start), repr(self.finish))
        
    def draw(self, color='blue'):
        g.draw_line(
            self.start.x, 
            self.start.y, 
            self.finish.x, 
            self.finish.y, 
            color
        )
        self.start.draw('red')
        self.finish.draw('green')
        
    def length(self):
        dx = self.start.x - self.finish.x
        dy = self.start.y - self.finish.y
        return math.sqrt(dx * dx + dy * dy)
        
    def move(self, dx, dy):
        self.start.move(dx, dy)
        self.finish.move(dx, dy)
        
        
def test_point():
    
    p1 = Point(0, 0)
    p1.draw()
    
    p2 = Point(50, -50)
    p2.draw('red')

def test1():
    p1 = Point(-50, -70)
    p2 = Point(10, 90)
    s = Segment2(p1, p2)
    
    print(s)
    print(s.length())
    
    s.draw('violet')
    
    s.move(-30, -10)
    s.draw('blue')


g = Grid()

# test_point()
test1()

g.done()

class Rectangle

Конструктор должен быть такой:

class Rectangle:
    def __init__(self, lt, rb):
        self.lt = lt    # left top point
        self.rb = rb    # right bottom point

Задачи

Задача 1. Трансформация фигуры

Вариант класс функция что делает
1 Segment2 flipH(self) отображает отрезок относительно оси У
2 Segment2 flipV(self) отображает отрезок относительно оси X
3 Segment2 move0(self) передвигает отрезок точкой начала в 0,0
4 Segment2 sym0(self) создает центрально симметричный отрезок относительно точки 0,0
5 Segment2 left(self) поворачивает отрезок налево на 90 градусов относительно точки 0,0

Вариант класс функция что делает
1 Rect flipH(self) отображает относительно оси У
2 Rect flipV(self) отображает относительно оси X
3 Rect move0(self) передвигает отрезок точкой начала в 0,0
4 Rect sym0(self) создает центрально симметричный прямоугольник относительно точки 0,0
5 Rect left(self) поворачивает прямоугольник налево на 90 градусов относительно точки 0,0

Вариант класс функция что делает
1T Triangle flipH(self) отображает относительно оси У

Задача 2. Чтение данных

Мьянма: прочитать отрезки из входного файла и нарисовать их. Остальные: прочитать прямоугольники из входного файла и нарисовать их.

Вариант 1 - отрезки

3
0 0 80 -30
-70 -10 20 10
20 20 30 40

Вариант 2 - отрезки

3
0,0,80,-30
-70,-10,20,10
20,20,30,40

Вариант 3 - отрезки

3
0;0;80;-30
-70;-10;20;10
20;20;30;40

Вариант 4 - отрезки

3
0|0|80|-30
-70|-10|20|10
20|20|30|40

Вариант 5 - отрезки

3
0/0/80/-30
-70/-10/20/10
20/20/30/40

Вариант 6 - прямоугольники

3
0 0 80 -30
-70 10 20 -10
20 40 30 20

Вариант 7 - прямоугольники

3
0,0,80,-30
-70,10,20,-10
20,40,30,20

Вариант 8 - прямоугольники

3
0;0;80;-30
-70;10;20;-10
20;40;30;20

Вариант 9 - прямоугольники

3
0|0|80|-30
-70|10|20|-10
20|40|30|20

Вариант 5 - отрезки

3
0/0/80/-30
-70/-10/20/10
20/20/30/40

Задача 3

Задача 3.1

Отсортировать отрезки по длине

Задача 3.2

Найти самый длинный отрезок

Задача 3.3

Найти самый короткий отрезок

Задача 3.4

Реализовать оператор умножения отрезка на число k, который увеличивает отрезок в k раз относительно его точки старта.

Задача 3.5

Реализовать оператор умножения отрезка на число k, который увеличивает отрезок в k раз относительно его цетра.

Задача 3.6

Написать сложение прямоугольников. Получается прямоугольник, который содержит оба слагаемых.

s1 = Rectangle(Point(0, 0), Point(80, -20))
s2 = Rectangle(Point(-20, 20), Point(10, -50))
s = s1 + s2
print(s1)   # [(0, 0), (80, -20)] 
print(s2)   # [(-20, 20), (10, -50)]
print(s3)   # [(-20, 20), (80, -50)]

Задача 3.7

Найти самый большой прямоугольник

Задача 3.8

Отсортировать прямоугольники

Задача 3.9

Реализовать оператор умножения прямоугольника на число k, который увеличивает прямоугольник в k раз относительно его левой верхней точки.

Задача 3.10

Реализовать оператор умножения прямоугольника на число k, который увеличивает прямоугольник в k раз относительно его центра.

tones = [
  'violet',   # tones[0]
  'blue',     # tones[1]
  'green',    # tones[2]
  'yellow',   # tones[3]
  'gold',     # tones[4]
  'orange',   # tones[5]
  'red'       # tones[6]
  ]

-- TatyanaDerbysheva - 14 May 2019