Прикреплённый файл «txtscr.py»
Загрузка 1 #!/usr/bin/env python3
2 '''
3 Рисование фигур из символов на текстовом экране
4 '''
5
6 def init(width, height, paper="."):
7 """Создаёт пустой экран (список строк) размером width×height,
8 в качестве пустых элементов использовать строку paper.
9 Возвращает экран.
10 """
11 return([paper*width for i in range(height)])
12
13 def str(screen):
14 """Преобразует экран в строку"""
15 sep = "+"+"-"*len(screen[0])+"+"
16 return(sep+"\n"+"\n".join("|"+s+"|" for s in screen)+"\n"+sep)
17
18 def dot(screen, x, y, ink="*"):
19 """Ставит точку (первый символ строки ink) нв экран screen по координатам x:y
20 Выход за границы экрана обрезается по модулю
21 """
22 x = x % len(screen[0])
23 y = y % len(screen)
24 screen[y] = screen[y][:x]+ink[0]+screen[y][x+1:]
25
26 def get(screen, x, y):
27 """Возвращает символ экрана screen по координатам x,y
28 Выход за границы экрана обрезается по модулю
29 """
30 x = x % len(screen[0])
31 y = y % len(screen)
32 return screen[y][x]
33
34 def hline(screen, x, y, x1, ink="*"):
35 """Проводит горизонтальный отрезок из символов ink на экране screen
36 начиная с точки x:y и заканчивая точкой x1:y (координаты неотрицательные)"""
37 for x0 in range(x,x1+1) if x<x1 else range(x1,x+1):
38 dot(screen,x0,y,ink)
39
40 def vline(screen, x, y, y1, ink="*"):
41 """Проводит вертикальный отрезок из символов ink на экране screen
42 начиная с точки x:y и заканчивая точкой x:y1 (координаты неотрицательные)"""
43 for y0 in range(y,y1+1) if y<y1 else range(y1,y+1):
44 dot(screen,x,y0,ink)
45
46 def line(screen, x0, y0, x1, y1, ink="*"):
47 """Проводит произвольный отрезок из символов ink на экране screen
48 начиная с точки x0:y0 и заканчивая точкой x0:y1 (координаты неотрицательные)"""
49 x, y = x0, y0
50 if x0 == x1:
51 return vline(screen, x, y0, y1, ink)
52 if y0 == y1:
53 return hline(screen, x, y0, x1, ink)
54 dx, dy = -1 if x1<x0 else 1, -1 if y1<y0 else 1
55 dot(screen, x, y, ink)
56 n = max(abs(x0-x1),abs(y0-y1))
57 for i in range(n):
58 x, y = x0+(x1-x0)*i//n, y0+(y1-y0)*i//n
59 dot(screen, x, y, ink)
60
61 def fill(screen, x, y, ink="#", paper="."):
62 """Закрашивает связную область экрана screen из символов paper
63 символами ink
64 """
65 turn = (0,1), (1,0), (0,-1), (-1,0)
66 todo = [(x,y)]
67 while todo:
68 x,y = todo.pop()
69 dot(screen,x,y,ink)
70 for dx, dy in turn:
71 if get(screen,x+dx,y+dy)==paper:
72 todo.append((x+dx,y+dy))
73
74 if __name__ == "__main__":
75 scr = init(60,20)
76 print(str(scr))
77 vline(scr,4,2,18,"+")
78 print(str(scr))
79 hline(scr,2,4,55,"@")
80 print(str(scr))
81 line(scr, 0,12,57,38)
82 print(str(scr))
83 line(scr, 10,19,58,7,"%")
84 print(str(scr))
85 fill(scr, 20, 10)
86 print(str(scr))
Прикреплённые файлы
Для ссылки на прикреплённый файл в тексте страницы напишите attachment:имяфайла, как показано ниже в списке файлов. Не используйте URL из ссылки «[получить]», так как он чисто внутренний и может измениться.Вам нельзя прикреплять файлы к этой странице.