Python3: 生成带星星的图案,必须使用二维列表
Python3: Produce a patern with stars and must use a 2 dimensional list
Python3.6: 我有一个作业需要生成一个带有星号的模式并且必须使用二维列表。
第一部分只是使用 print() 进行连接。
def 角():
"""This function will display a Stars in the top left
and bottom right corners"""
a4 = '****'
a3 = '***'
a2 = '**'
a1 = '*'
s3 = ' '
s4 = ' '
s5 = ' '
print(a4 + s3)
print(a3 + s4)
print(a2 + s5)
print(a1 + s5 + a1)
print(s5 + a2)
print(s4 + a3)
print(s3 + a4)
角球()
(显示的图像是这样的)
****
***
**
* *
**
***
****
现在,第二部分是做同样的事情,但使用二维列表和循环。我试过了,但我被卡住了。该作业共有 5 个不同的伙伴。如果有人愿意提供一些助手来找出其中一个,那么其他 4 个应该更容易。
谢谢
让我们从与您的原始静态解决方案相匹配的具体案例开始。假设用户输入是 7。您的任务是打印 7 行。每行由 7 个字符组成:
- 4 星,3 个空格,无星
- 3 星,4 个空格,无星
- 2 星,5 个空格,无星
- 1 星,5 个空格,1 星
- ...然后反过来也是一样。
因此,列表的第一个元素是 [4,3,0]
,然后是 [3,4,0]
,依此类推。
完整的二维列表将是 [[4,3,0], [3,4,0], ... etc]
调用您的列表 rows
:
rows = [[4,3,0], [3,4,0], ... etc]
现在如果你这样做:
for (l_stars, spaces, r_stars) in rows:
第一次,l_stars
为 4,spaces
为 3,r_stars
为 0。在 for
循环中,打印适当数量的星号和空格:
for (l_stars, spaces, r_stars) in rows:
print("*" * l_stars, " " * spaces, "*" * r_stars, sep="")
如果 l_stars
的值为 4,则 "*" * l_stars
将为 "****"
,依此类推。 print
语句中的 sep
是为了停止 print
在逗号所在的位置放置额外的空格。
现在您看到了使用二维列表的价值。您的程序从 14 条语句减少到 3 条,并且模式更容易更改。如果程序要响应用户输入,则需要更改模式的能力。我必须说这对初学者来说是一项非常具有挑战性的任务。
在一般情况下,您的任务是打印 n 行。每行由n个字符组成:
- n-3星,n-4个空格,无星
- n-4星,n-3个空格,无星
- n-5星,n-2个空格,无星
- ...等等
- 1 星,n-2 个空格,1 星
- ...然后反过来也是一样。
要打印的行数是可变的:您需要 n 行。一种方法是使用 列表理解 。如果用户的输入是 n
,那将类似于
rows = [ [...something...] for i in range(n) ]
这里棘手的部分是你的模式在中间是不变的:
* *
所以rows
由左上角、中部、右下角3部分组成,并从中间向上和向下增长或收缩。因此,您必须将其构建为 3 个部分。如果 n
是偶数,您的描述并不清楚您想要发生什么。在这种情况下,我假设您需要同一中间行的两个副本。
try:
n = int(input("Enter size of pattern:"))
except:
print("Invalid input, using 7")
n = 7
top_left = [[n-i, i, 0] for i in range (3,n-1)]
middle = [[1,n-2,1]]
if not n % 2: # n is even, need two copies
middle *= 2
bottom_right = [[0, i, n-i] for i in range (n-2,2,-1)]
rows = top_left + middle + bottom_right
for (l_stars, spaces, r_stars) in rows:
print("*" * l_stars, " " * spaces, "*" * r_stars, sep="")
我会留给您对所需的输入进行任何范围检查。
Python3.6: 我有一个作业需要生成一个带有星号的模式并且必须使用二维列表。
第一部分只是使用 print() 进行连接。 def 角():
"""This function will display a Stars in the top left
and bottom right corners"""
a4 = '****'
a3 = '***'
a2 = '**'
a1 = '*'
s3 = ' '
s4 = ' '
s5 = ' '
print(a4 + s3)
print(a3 + s4)
print(a2 + s5)
print(a1 + s5 + a1)
print(s5 + a2)
print(s4 + a3)
print(s3 + a4)
角球()
(显示的图像是这样的)
****
***
**
* *
**
***
****
现在,第二部分是做同样的事情,但使用二维列表和循环。我试过了,但我被卡住了。该作业共有 5 个不同的伙伴。如果有人愿意提供一些助手来找出其中一个,那么其他 4 个应该更容易。 谢谢
让我们从与您的原始静态解决方案相匹配的具体案例开始。假设用户输入是 7。您的任务是打印 7 行。每行由 7 个字符组成:
- 4 星,3 个空格,无星
- 3 星,4 个空格,无星
- 2 星,5 个空格,无星
- 1 星,5 个空格,1 星
- ...然后反过来也是一样。
因此,列表的第一个元素是 [4,3,0]
,然后是 [3,4,0]
,依此类推。
完整的二维列表将是 [[4,3,0], [3,4,0], ... etc]
调用您的列表 rows
:
rows = [[4,3,0], [3,4,0], ... etc]
现在如果你这样做:
for (l_stars, spaces, r_stars) in rows:
第一次,l_stars
为 4,spaces
为 3,r_stars
为 0。在 for
循环中,打印适当数量的星号和空格:
for (l_stars, spaces, r_stars) in rows:
print("*" * l_stars, " " * spaces, "*" * r_stars, sep="")
如果 l_stars
的值为 4,则 "*" * l_stars
将为 "****"
,依此类推。 print
语句中的 sep
是为了停止 print
在逗号所在的位置放置额外的空格。
现在您看到了使用二维列表的价值。您的程序从 14 条语句减少到 3 条,并且模式更容易更改。如果程序要响应用户输入,则需要更改模式的能力。我必须说这对初学者来说是一项非常具有挑战性的任务。
在一般情况下,您的任务是打印 n 行。每行由n个字符组成:
- n-3星,n-4个空格,无星
- n-4星,n-3个空格,无星
- n-5星,n-2个空格,无星
- ...等等
- 1 星,n-2 个空格,1 星
- ...然后反过来也是一样。
要打印的行数是可变的:您需要 n 行。一种方法是使用 列表理解 。如果用户的输入是 n
,那将类似于
rows = [ [...something...] for i in range(n) ]
这里棘手的部分是你的模式在中间是不变的:
* *
所以rows
由左上角、中部、右下角3部分组成,并从中间向上和向下增长或收缩。因此,您必须将其构建为 3 个部分。如果 n
是偶数,您的描述并不清楚您想要发生什么。在这种情况下,我假设您需要同一中间行的两个副本。
try:
n = int(input("Enter size of pattern:"))
except:
print("Invalid input, using 7")
n = 7
top_left = [[n-i, i, 0] for i in range (3,n-1)]
middle = [[1,n-2,1]]
if not n % 2: # n is even, need two copies
middle *= 2
bottom_right = [[0, i, n-i] for i in range (n-2,2,-1)]
rows = top_left + middle + bottom_right
for (l_stars, spaces, r_stars) in rows:
print("*" * l_stars, " " * spaces, "*" * r_stars, sep="")
我会留给您对所需的输入进行任何范围检查。