通常,当你想解决ASCII-art问题时,你可以从分析图像开始。我们在这里看到的是每个图像:第一行有一行有2*n+3星号
后跟n行,这些行有一个星号,n个空格,一个星号,n个空格,还有一个星号;和
带有2*n+3星号的行。在
所以我们可以简单地利用这样一个事实:一个序列(list,str,tuple)乘以一个数是一个相同类型的序列,它将序列重复给定的次数。
所以对于第一行和最后一行,我们可以简单地写'*'*(2*n+3)。中间的行可以用'*'+' '*n+'*'+' '*n+'*'构造,我们需要重复n次。因此,我们可以用以下内容构建一个行列表:['*'*(2*n+3)]+['*'+' '*n+'*'+' '*n+'*']*n+['*'*(2*n+3)]
# ^ first ^ middle line ^ last line
然后使用'\n'.join(..)将这些行连接在一起:
^{pr2}$
这将产生:>>> print_pattern(1)
*****
* * *
*****
>>> print_pattern(2)
*******
* * *
* * *
*******
>>> print_pattern(3)
*********
* * *
* * *
* * *
*********
>>> print_pattern(4)
***********
* * *
* * *
* * *
* * *
***********
>>> print_pattern(5)
*************
* * *
* * *
* * *
* * *
* * *
*************
您还可以通过使用for循环使其更具前硬性(尽管这通常被认为不太像Python):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)