Python - создание фигуры с двумя линиями и тремя звездочками посередине
Я должен спросить у пользователя номер и распечатать следующие формы:
пользовательский ввод = 1 (1 единица в высоту и 1 единица между двумя строками)
*****
* * *
*****
пользовательский ввод = 2 (2 блока высотой, 2 блока между ними)
*******
* * *
* * *
*******
пользовательский ввод = 3
*********
* * *
* * *
* * *
*********
и так далее...
На данный момент я получаю полый квадрат с номером пользовательского ввода:
side = int(input("Choose a number: "))
inner = side - 2
print ('*' * side)
for i in range(inner):
print ('*' + ' ' * inner + '*')
print ('*' * side)
4 ответа
Обычно, когда вы хотите решить проблемы с ASCII-искусством, вы начинаете с анализа изображения. То, что мы видим здесь, это то, что каждое изображение:
- сначала есть строка, которая имеет
2*n+3
звездочки; - с последующим
n
строки, которые отмечены звездочкой,n
пробелы, звездочка,n
пробелы и снова звездочка; а также - линия с
2*n+3
звездочки.
Таким образом, мы можем просто использовать тот факт, что последовательность (list
, str
ING, tuple
), умноженное на число, представляет собой последовательность того же типа, которая повторяет последовательность заданное количество раз.
Так что для первой и последней строки мы можем просто написать '*'*(2*n+3)
, Линии в середине могут быть построены с '*'+' '*n+'*'+' '*n+'*'
и мы должны повторить это n
раз. Таким образом, мы можем построить список строк с помощью:
['*'*(2*n+3)]+['*'+' '*n+'*'+' '*n+'*']*n+['*'*(2*n+3)]
# ^ first ^ middle line ^ last line
А потом использовать '\n'.join(..)
соединить линии вместе:
def print_pattern(n):
print('\n'.join(['*'*(2*n+3)]+['*'+' '*n+'*'+' '*n+'*']*n+['*'*(2*n+3)]))
Это создает:
>>> print_pattern(1)
*****
* * *
*****
>>> print_pattern(2)
*******
* * *
* * *
*******
>>> print_pattern(3)
*********
* * *
* * *
* * *
*********
>>> print_pattern(4)
***********
* * *
* * *
* * *
* * *
***********
>>> print_pattern(5)
*************
* * *
* * *
* * *
* * *
* * *
*************
Вы также можете сделать его более предшествующим (хотя это обычно считается менее Pythonic) с помощью for
цикл:
def print_pattern(n):
print('*'*(2*n+3))
for _ in range(n):
print('*'+' '*n+'*'+' '*n+'*')
print('*'*(2*n+3))
Или в программе с пользовательским вводом:
def print_pattern(n):
print('*'*(2*n+3))
for _ in range(n):
print('*'+' '*n+'*'+' '*n+'*')
print('*'*(2*n+3))
n = int(input("Eliga un número: "))
print_pattern(n)
Это должно работать для вас:
m = 6
n = 2
for i in range(m*n+(m-n)):
print '*',
print
for c in range(m):
for i in range(m):
print "*",
for b in range(n):
print ' ',
print
for i in range(m*n+(m-n)):
print '*',
print
Есть две основные вещи, которые должна сделать ваша программа. Во-первых, вам нужно рассчитать длину верхней и нижней линий. Это 3 + 2 * (число от пользователя), потому что будет 3 звездочки и 2 пробела, причем каждый пробел будет иметь ту же длину, что и число, введенное пользователем.
Тогда вам нужно использовать петли. Сначала распечатайте количество звездочек из числа, которое вы рассчитали выше. Затем используйте цикл, чтобы распечатать звездочки и пробелы. Вы можете выполнить каждую итерацию цикла, чтобы напечатать одну строку, поэтому цикл просто используется для вывода правильного количества строк. Затем выведите последнюю строку, соответствующую первой строке звездочек.
Я использовал формат () для обобщения
def ascing(n, C, patmid = "*{0: <{gap}}*{0: <{gap}}*\n" ):
mid = (n * patmid).format(' ', gap=n)
print( "{0}\n{1}{0}".format((3+2*n)*C, mid) )
for x in range(1,7):
ascing(x, '*')
print("\n====================\n")