В этой статье мы увидим, как мы можем написать код для шаблона на сложном уровне. Если вы еще не ознакомились с моей предыдущей статьей о паттернах с простым шрифтом, пожалуйста, ознакомьтесь с ней, прежде чем начинать эту. Ссылка на статью (Easy)Patterns in Python — здесь.

Если вы новичок в программе паттернов, первый вопрос, который возникает: «Как вы можете назвать конкретный паттерн легким, средним или сложным?». Ответ очень прост, если вы можете взломать логику паттерна, то это легко, но если вы возьмете ручку и бумагу и попытаетесь взломать логику, то это довольно сложно. Второстепенным ответом может быть сложность узора.

Теперь давайте возьмем популярный паттерн и взломаем его логику. Вот так…

Красиво выглядит. Этот паттерн называется «Полный ромбовидный паттерн» и довольно популярен на собеседованиях по программированию.

Теперь, Просто простой вызов для вас. Перед прокруткой к следующему абзацу расшифровки этой логики шаблона. Попробуйте записать свою собственную логику.

Сделанный? Я надеюсь, ты…

Если вы читали мою предыдущую статью о шаблонах. Вы бы заметили, что если мы сможем ответить на три вопроса, мы сможем решить любую закономерность.

Давайте ответим на эти вопросы.

  1. Сколько строк относительно n?

Когда мы наблюдаем шаблон, мы можем сказать, что если n = 7, то есть 7 строк. Если n = 5, то есть 5 строк. значит, количество строк равно n.

2. Сколько столбцов нужно напечатать в каждой конкретной строке?

А вот и сложная часть. Из 7 рядов, с 1-го по 4-й ряд, количество звезд увеличивается на нечетное число, затем с 5-го на 7-й ряд уменьшается на нечетное число. С другой стороны, в каждой строке есть пробелы, а затем звезды.

3. Что печатать в определенном столбце каждой строки?

Просто, вам нужно напечатать «*»

Имея все это в виду, мы взломаем логику.

Логика такова, что у нас есть 2 разные петли для строк (n). один для увеличения звездочек (n1), а другой для уменьшения звездочек (n2).

n1 + n2 = n

Для n = 7. Увеличивающая строка n1 = 4 и убывающая строка n2 = 3. При суммировании получаем 7.

В общем случае получаем n1 = n//2, тогда n2 = n - n1

А пока давайте побеспокоимся о n1.

Для n1 строки, от 1-й до n1 строк, мы можем напечатать несколько пробелов, а затем звездочки.

Для пробелов в i-й строке нужно вывести (n1-i) пробелов, а затем для звездочек (2*i-1) звездочек.

Первая половина ромба готова.

когда мы рассматриваем n2 для n = 7, мы получаем n2 = 3.

В общем случае получаем n2 = n - n1

Этот паттерн абсолютно противоположен первой половине паттерна.

В i-й строке для пробелов нам нужно напечатать i пробелов. а затем для звезд 2*(n2-i+1)-1 звезд.

Давайте посмотрим код Python для того же

def star_pattern(n):
    n1 = n // 2 + 1
    n2 = n - n1

    # First Half Pattern
    rows = 1
    while rows <= n1:
        spaces = 1
        # Space Loop
        while spaces <= n1 - rows:
            print(" ", end="")
            spaces = spaces + 1

        # Star Loop
        stars = 1
        while stars <= ((2 * rows) - 1):
            print("*", end="")
            stars = stars + 1

        rows = rows + 1
        print()

        # Second Half Pattern
    rows = 1
    while rows <= n2:

        # Space Loop
        spaces = 1
        while spaces <= rows:
            print(" ", end="")
            spaces = spaces + 1

        # Star Loop
        stars = 1
        while stars <= 2*(n2-rows+1)-1:
            print("*", end="")
            stars = stars + 1

        rows = rows + 1
        print()
    return


n = int(input())
star_pattern(n)

Надеюсь тебе понравилось…