Python - 制作一个中间有两条线和三个星号的形状
Python - making a shape with two lines and three asterisks in the middle
我应该向用户询问一个数字并打印出以下形状:
用户输入 = 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)
通常当你想解决 ASCII-art 问题时,你会从分析图像开始。我们在这里看到的是每张图片:
- 第一行有
2*n+3
个星号;
- 后跟
n
行,其中有一个星号、n
个空格、一个星号、n
个空格,然后又是一个星号;和
- 带有
2*n+3
个星号的一行。
所以我们可以简单地利用 序列 (list
, str
ing, tuple
) 相乘的事实by a number 是重复给定次数的相同类型的序列。
所以对于第一行和最后一行,我们可以简单地写成'*'*(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)
*************
* * *
* * *
* * *
* * *
* * *
*************
您还可以通过使用 for
循环使其更具程序性(尽管这通常被认为不那么 Pythonic):
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))
<b>n = int(input("Eliga un número: "))
print_pattern(n)</b>
您的程序需要做两件主要的事情。首先,您需要计算顶线和底线的长度。这是 3 + 2 * (number from user),因为会有 3 个星号和 2 个空格,每个空格的长度与用户输入的数字相同。
然后你需要使用循环。首先从上面计算的数字中打印出星号的数量。然后使用循环打印出星号和空格。您可以使循环的每次迭代都打印一行,因此循环仅用于打印出正确的行数。然后打印与第一行星号匹配的最后一行。
这应该适合你:
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
我使用 format() 来概括
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")
我应该向用户询问一个数字并打印出以下形状:
用户输入 = 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)
通常当你想解决 ASCII-art 问题时,你会从分析图像开始。我们在这里看到的是每张图片:
- 第一行有
2*n+3
个星号; - 后跟
n
行,其中有一个星号、n
个空格、一个星号、n
个空格,然后又是一个星号;和 - 带有
2*n+3
个星号的一行。
所以我们可以简单地利用 序列 (list
, str
ing, tuple
) 相乘的事实by a number 是重复给定次数的相同类型的序列。
所以对于第一行和最后一行,我们可以简单地写成'*'*(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)
*************
* * *
* * *
* * *
* * *
* * *
*************
您还可以通过使用 for
循环使其更具程序性(尽管这通常被认为不那么 Pythonic):
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))
<b>n = int(input("Eliga un número: "))
print_pattern(n)</b>
您的程序需要做两件主要的事情。首先,您需要计算顶线和底线的长度。这是 3 + 2 * (number from user),因为会有 3 个星号和 2 个空格,每个空格的长度与用户输入的数字相同。
然后你需要使用循环。首先从上面计算的数字中打印出星号的数量。然后使用循环打印出星号和空格。您可以使循环的每次迭代都打印一行,因此循环仅用于打印出正确的行数。然后打印与第一行星号匹配的最后一行。
这应该适合你:
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
我使用 format() 来概括
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")