Рисовать буквы питона - PullRequest
       13

Рисовать буквы питона

0 голосов
/ 16 апреля 2019

У меня есть домашнее задание, и я должен сделать это:

Цель этой программы - нарисовать набор прямоугольников (со сторонами, параллельными осям), используя символы.

Вы получите последовательность прямоугольников, по одному на линию, определяемую координатами (X и Y) вашего верхнего левого и нижнего правого углов.

Вы должны «нарисовать» все прямоугольники, используя символ #. Координаты X и Y растут вправо и вниз соответственно.

Пример ввода:

0 0 2 8

0 7 8 8

10 0 12 8

10 0 18 1

10 7 18 8

20 0 22 8

20 0 28 1

20 7 28 8

Пример вывода:

    ###       ######### #########
    ###       ######### #########
    ###       ###       ###      
    ###       ###       ###      
    ###       ###       ###      
    ###       ###       ###      
    ###       ###       ###      
    ######### ######### #########
    ######### ######### #########

Я уже сделал это:

import sys

def make_rectangules(first_coordenates, second_coordenates):

    for y in range(second_coordenates[1]-first_coordenates[1]+1):
        for x in range(second_coordenates[0]-first_coordenates[0]+1):    
            print('#')


def main():
    aux_list = []
    for line in sys.stdin:
        line = line.strip('\n').split()
        line = list(map(int,line))
        first_coordenates = (line[0],line[1])
        second_coordenates = (line[2],line[3])
        make_rectangules(first_coordenates, second_coordenates)

main()

Но я не получаю тот же результат.

Ответы [ 2 ]

0 голосов
/ 16 апреля 2019

Код:

input_data = '''0 0 2 8
0 7 8 8
10 0 12 8
10 0 18 1
10 7 18 8
20 0 22 8
20 0 28 1
20 7 28 8'''

rectangles = [line.split(' ') for line in input_data.splitlines()]
output_list = []

for rect in rectangles:
    x1, y1, x2, y2 = [int(coord) for coord in rect]
    for i in range(y1, y2 + 1):
        prev = output_list[i] if i < len(output_list) else ''
        if len(prev) < x2:
            prev += ' ' * (x2 - len(prev) + 1)
        prev = prev[:x1] + '#' * (x2 - x1 + 1) + prev[x2 + 1:]
        if i < len(output_list):
            output_list[i] = prev
        else:
            output_list.append(prev)

output = '\n'.join(output_list)
print(output)

Вывод :

###       ######### #########
###       ######### #########
###       ###       ###
###       ###       ###
###       ###       ###
###       ###       ###
###       ###       ###
######### ######### #########
######### ######### #########

Не стесняйтесь спрашивать о коде.

0 голосов
/ 16 апреля 2019

Я сделал это:

import sys

def main():
    aux_list = [[0, 0, 2, 8],
                [0, 7, 8, 8], 
                [10, 0, 12, 8],
                [10, 0, 18, 1],
                [10, 7, 18, 8],
                [20, 0, 22, 8],
                [20, 0, 28, 1],
                [20, 7, 28, 8]
               ]

    max_x = 0
    max_y = 0
    for elem in aux_list:
        if elem[2] > max_x:
            max_x = elem[2]
        if elem[3] > max_y:
            max_y = elem[3]

    array = [[" " for x in range(max_y+1)] for y in range(max_x+1)]
    for elem in aux_list:
        for i in range(elem[0], elem[2]+1):
            for j in range(elem[1], elem[3]+1):
                array[i][j] = "#"

    for x in range(max_y+1):
        for y in range(max_x+1):
            print(array[y][x], end='')
        print("")
main()

Результат:

    >>python draw.py
###       ######### #########
###       ######### #########
###       ###       ###
###       ###       ###
###       ###       ###
###       ###       ###
###       ###       ###
######### ######### #########
######### ######### #########

Это не самый чистый способ сделать это, но он работает, и этот пример кода может вам помочь. Не торопитесь, чтобы понять этот код, и задавайте мне вопросы, если вам нужны некоторые разъяснения.

...