В этой статье мы увидим, как мы можем написать код для шаблона на сложном уровне. Если вы еще не ознакомились с моей предыдущей статьей о паттернах с простым шрифтом, пожалуйста, ознакомьтесь с ней, прежде чем начинать эту. Ссылка на статью (Easy)Patterns in Python — здесь.
Если вы новичок в программе паттернов, первый вопрос, который возникает: «Как вы можете назвать конкретный паттерн легким, средним или сложным?». Ответ очень прост, если вы можете взломать логику паттерна, то это легко, но если вы возьмете ручку и бумагу и попытаетесь взломать логику, то это довольно сложно. Второстепенным ответом может быть сложность узора.
Теперь давайте возьмем популярный паттерн и взломаем его логику. Вот так…
Красиво выглядит. Этот паттерн называется «Полный ромбовидный паттерн» и довольно популярен на собеседованиях по программированию.
Теперь, Просто простой вызов для вас. Перед прокруткой к следующему абзацу расшифровки этой логики шаблона. Попробуйте записать свою собственную логику.
Сделанный? Я надеюсь, ты…
Если вы читали мою предыдущую статью о шаблонах. Вы бы заметили, что если мы сможем ответить на три вопроса, мы сможем решить любую закономерность.
Давайте ответим на эти вопросы.
- Сколько строк относительно 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)
Надеюсь тебе понравилось…