Как отобразить следующее в python? - PullRequest
0 голосов
/ 18 марта 2020

Формулировка задачи:

Напишите функцию create_grid, которая принимает число квадратов на стороне и количество звезд на стороне квадрата, а затем возвращает сетку квадратов в виде строка. Разделите каждую строку символом новой строки (\n).

должно отображаться следующее:

assert_equal(
    create_grid(1, 1),
"""+ - +
| * |
+ - +
""")
assert_equal(
    create_grid(2, 4),
"""+ - - - - + - - - - +
| * * * * |         |
| * * * * |         |
| * * * * |         |
| * * * * |         |
+ - - - - + - - - - +
|         | * * * * |
|         | * * * * |
|         | * * * * |
|         | * * * * |
+ - - - - + - - - - +
""")
assert_equal(
    create_grid(4, 2),
"""+ - - + - - + - - + - - +
| * * |     | * * |     |
| * * |     | * * |     |
+ - - + - - + - - + - - +
|     | * * |     | * * |
|     | * * |     | * * |
+ - - + - - + - - + - - +
| * * |     | * * |     |
| * * |     | * * |     |
+ - - + - - + - - + - - +
|     | * * |     | * * |
|     | * * |     | * * |
+ - - + - - + - - + - - +
""")

Мне удалось найти только следующий код:

def create_grid(num_squares, num_stars):
    # YOUR CODE HERE
    #raise NotImplementedError()

    #'+ - +\n
    #| * |\n
    #+ - +\n'
    holder = ""
    a = '+ ' + "- "*num_stars + "+\n"
    b = '| ' + '* '*num_stars + '|\n'

    for squaresdown in range(num_squares):
        holder+=a
        for row in range(num_stars):
            holder+=b
    holder+=a
    print(holder)

create_grid(3,5)

, который отображает сетку

+ - - - - - +
| * * * * * |
| * * * * * |
| * * * * * |
| * * * * * |
| * * * * * |
+ - - - - - +
| * * * * * |
| * * * * * |
| * * * * * |
| * * * * * |
| * * * * * |
+ - - - - - +
| * * * * * |
| * * * * * |
| * * * * * |
| * * * * * |
| * * * * * |
+ - - - - - +

Как мне реализовать способ:

  • Игнорировать размещение звездочек в каждом другом поле
  • генерировать новые столбцы?

1 Ответ

0 голосов
/ 18 марта 2020

Рассмотрим этот подход (Обновлено):

def create_grid(num_squares, num_stars):
    holder = ""
    a = '+ ' + ("- " * num_stars + "+ " + "- " * num_stars + '+ ')*(
        num_squares // 2) + ("- " * num_stars + "+ ") * (num_squares % 2)
    b = ('| ' + '* ' * num_stars + '| ' + "  " * num_stars)*(num_squares//2) \
         + ('| ' + '* ' * num_stars) * (num_squares % 2)

    for column in range(num_squares):
        holder += a + "\n"
        for row in range(num_stars):
            holder += (b + '|' if (column % 2) == 0 else '|' + b[::-1]) + "\n"
    holder += a + "\n"
    print(holder)

Поэтому приведем несколько иллюстративных примеров печати:

create_grid(1,1):

+ - +
| * |
+ - +

create_grid(1,2):

+ - - +
| * * |
| * * |
+ - - +

create_grid(1,3):

+ - - - +
| * * * |
| * * * |
| * * * |
+ - - - +

create_grid(2,1):

+ - + - +
| * |   |
+ - + - +
|   | * |
+ - + - +

create_grid(2,2):

+ - - + - - +
| * * |     |
| * * |     |
+ - - + - - +
|     | * * |
|     | * * |
+ - - + - - +

create_grid(2,3):

+ - - - + - - - +
| * * * |       |
| * * * |       |
| * * * |       |
+ - - - + - - - +
|       | * * * |
|       | * * * |
|       | * * * |
+ - - - + - - - +

create_grid(3,1):

+ - + - + - +
| * |   | * |
+ - + - + - +
| * |   | * |
+ - + - + - +
| * |   | * |
+ - + - + - +

create_grid(3,2):

+ - - + - - + - - +
| * * |     | * * |
| * * |     | * * |
+ - - + - - + - - +
| * * |     | * * |
| * * |     | * * |
+ - - + - - + - - +
| * * |     | * * |
| * * |     | * * |
+ - - + - - + - - +

create_grid(3,3):

+ - - - + - - - + - - - +
| * * * |       | * * * |
| * * * |       | * * * |
| * * * |       | * * * |
+ - - - + - - - + - - - +
| * * * |       | * * * |
| * * * |       | * * * |
| * * * |       | * * * |
+ - - - + - - - + - - - +
| * * * |       | * * * |
| * * * |       | * * * |
| * * * |       | * * * |
+ - - - + - - - + - - - +
...