有人可以编写 n = 19 行的代码并得到下图吗?对于 Python
Can someone write the code for n = 19 rows and get this following figure? For Python
编写一个接受数字 n 作为输入的函数,它 returns n 行看起来像下面的模式。 运行 n = 19 的函数(下面的输出是 n=19 的)。
n = int(input("enter number of rows:"))
for i in range(1, n+1):
for j in range(1, n-i+1):
print(end=' ')
for j in range(i,0, -1):
print(''+str(j),end='')
for j in range(2,i+1):
print(str(j)+'_',end='')
print()
输出
1
212_
3212_3_
43212_3_4_
543212_3_4_5_
6543212_3_4_5_6_
76543212_3_4_5_6_7_
876543212_3_4_5_6_7_8_
9876543212_3_4_5_6_7_8_9_
109876543212_3_4_5_6_7_8_9_10_
11109876543212_3_4_5_6_7_8_9_10_11_
1211109876543212_3_4_5_6_7_8_9_10_11_12_
131211109876543212_3_4_5_6_7_8_9_10_11_12_13_
14131211109876543212_3_4_5_6_7_8_9_10_11_12_13_14_
1514131211109876543212_3_4_5_6_7_8_9_10_11_12_13_14_15_
161514131211109876543212_3_4_5_6_7_8_9_10_11_12_13_14_15_16_
17161514131211109876543212_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_
1817161514131211109876543212_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_18_
191817161514131211109876543212_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_18_19_
这是一个行之有效的解决方案。由于这看起来像是作业,所以我就给出算法。
For each row create a list of row * 2 + 1 size and fill with underscores
Ex: row 0 -> [_], row 1 -> [___], row 2 -> [_____], etc
Find the middle of row and put 1 at the index
Then put 2 and indexes middle-2 and middle + 2
Put 3 and indexes middle-4 and middle+4
Repeat to finish row
Ex: [_________] ->
[____1____] ->
[__2_1_2__] ->
[3_2_1_2_3]
Print spaces - 1st row gets n spaces. 2nd row gets n-1 spaces, etc
Print the list
Repeat for next row
对此稍作改进的是只构建最后一行,然后循环打印最后一行的切片。从中间开始向外加宽。
我看到你已经接受了另一个答案,所以我假设你已经完成了作业,所以我可以 post 我的代码。
n = 19
last_line = ['_'] * (n * 2 - 1)
middle = len(last_line) // 2
for j in range(0, n, 2):
last_line[middle + j] = str(j // 2 + 1)
last_line[middle - j] = str(j // 2 + 1)
for row in range(n):
print(f"{' ' * (n - row)}{''.join(last_line[middle - row:middle + row + 1])}")
代码的前6行构建金字塔的最后一行。最后 2 行打印了其中的一部分。
这会奏效,会给你的作业一个很好的答案。
n = int(input("enter number of rows:"))
r = 0
for i in range(1, int((n+1)/2+1)):
r += 1
for j in range(1, n-i+1):
print(end=' ')
for kk in range(i,0, -1):
if i==1:
print(' '+str(i))
else:
if kk==i:
print(end= ' ')
if kk==1:
print(str(kk), end='')
else:
print(str(kk)+'_', end='')
for ll in range(2,i+1):
if i>1:
print('_'+str(ll), end='')
if i>1:
print()
r += 1
if r > n:
break
for jj in range(1, n-i+1):
print(end=' ')
for k in range(i,0, -1):
if i==1:
print('_'+str(i)+'_', end='')
else:
print('_'+str(k), end='')
for l in range(2,i+1):
if l==2:
print('_'+str(l)+'_',end='')
else:
print(str(l)+'_',end='')
print()
结果:
1
_1_
2_1_2
_2_1_2_
3_2_1_2_3
_3_2_1_2_3_
4_3_2_1_2_3_4
_4_3_2_1_2_3_4_
5_4_3_2_1_2_3_4_5
_5_4_3_2_1_2_3_4_5_
6_5_4_3_2_1_2_3_4_5_6
_6_5_4_3_2_1_2_3_4_5_6_
7_6_5_4_3_2_1_2_3_4_5_6_7
_7_6_5_4_3_2_1_2_3_4_5_6_7_
8_7_6_5_4_3_2_1_2_3_4_5_6_7_8
_8_7_6_5_4_3_2_1_2_3_4_5_6_7_8_
9_8_7_6_5_4_3_2_1_2_3_4_5_6_7_8_9
_9_8_7_6_5_4_3_2_1_2_3_4_5_6_7_8_9_
10_9_8_7_6_5_4_3_2_1_2_3_4_5_6_7_8_9_10
编写一个接受数字 n 作为输入的函数,它 returns n 行看起来像下面的模式。 运行 n = 19 的函数(下面的输出是 n=19 的)。
n = int(input("enter number of rows:"))
for i in range(1, n+1):
for j in range(1, n-i+1):
print(end=' ')
for j in range(i,0, -1):
print(''+str(j),end='')
for j in range(2,i+1):
print(str(j)+'_',end='')
print()
输出
1
212_
3212_3_
43212_3_4_
543212_3_4_5_
6543212_3_4_5_6_
76543212_3_4_5_6_7_
876543212_3_4_5_6_7_8_
9876543212_3_4_5_6_7_8_9_
109876543212_3_4_5_6_7_8_9_10_
11109876543212_3_4_5_6_7_8_9_10_11_
1211109876543212_3_4_5_6_7_8_9_10_11_12_
131211109876543212_3_4_5_6_7_8_9_10_11_12_13_
14131211109876543212_3_4_5_6_7_8_9_10_11_12_13_14_
1514131211109876543212_3_4_5_6_7_8_9_10_11_12_13_14_15_
161514131211109876543212_3_4_5_6_7_8_9_10_11_12_13_14_15_16_
17161514131211109876543212_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_
1817161514131211109876543212_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_18_
191817161514131211109876543212_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_18_19_
这是一个行之有效的解决方案。由于这看起来像是作业,所以我就给出算法。
For each row create a list of row * 2 + 1 size and fill with underscores
Ex: row 0 -> [_], row 1 -> [___], row 2 -> [_____], etc
Find the middle of row and put 1 at the index
Then put 2 and indexes middle-2 and middle + 2
Put 3 and indexes middle-4 and middle+4
Repeat to finish row
Ex: [_________] ->
[____1____] ->
[__2_1_2__] ->
[3_2_1_2_3]
Print spaces - 1st row gets n spaces. 2nd row gets n-1 spaces, etc
Print the list
Repeat for next row
对此稍作改进的是只构建最后一行,然后循环打印最后一行的切片。从中间开始向外加宽。
我看到你已经接受了另一个答案,所以我假设你已经完成了作业,所以我可以 post 我的代码。
n = 19
last_line = ['_'] * (n * 2 - 1)
middle = len(last_line) // 2
for j in range(0, n, 2):
last_line[middle + j] = str(j // 2 + 1)
last_line[middle - j] = str(j // 2 + 1)
for row in range(n):
print(f"{' ' * (n - row)}{''.join(last_line[middle - row:middle + row + 1])}")
代码的前6行构建金字塔的最后一行。最后 2 行打印了其中的一部分。
这会奏效,会给你的作业一个很好的答案。
n = int(input("enter number of rows:"))
r = 0
for i in range(1, int((n+1)/2+1)):
r += 1
for j in range(1, n-i+1):
print(end=' ')
for kk in range(i,0, -1):
if i==1:
print(' '+str(i))
else:
if kk==i:
print(end= ' ')
if kk==1:
print(str(kk), end='')
else:
print(str(kk)+'_', end='')
for ll in range(2,i+1):
if i>1:
print('_'+str(ll), end='')
if i>1:
print()
r += 1
if r > n:
break
for jj in range(1, n-i+1):
print(end=' ')
for k in range(i,0, -1):
if i==1:
print('_'+str(i)+'_', end='')
else:
print('_'+str(k), end='')
for l in range(2,i+1):
if l==2:
print('_'+str(l)+'_',end='')
else:
print(str(l)+'_',end='')
print()
结果:
1
_1_
2_1_2
_2_1_2_
3_2_1_2_3
_3_2_1_2_3_
4_3_2_1_2_3_4
_4_3_2_1_2_3_4_
5_4_3_2_1_2_3_4_5
_5_4_3_2_1_2_3_4_5_
6_5_4_3_2_1_2_3_4_5_6
_6_5_4_3_2_1_2_3_4_5_6_
7_6_5_4_3_2_1_2_3_4_5_6_7
_7_6_5_4_3_2_1_2_3_4_5_6_7_
8_7_6_5_4_3_2_1_2_3_4_5_6_7_8
_8_7_6_5_4_3_2_1_2_3_4_5_6_7_8_
9_8_7_6_5_4_3_2_1_2_3_4_5_6_7_8_9
_9_8_7_6_5_4_3_2_1_2_3_4_5_6_7_8_9_
10_9_8_7_6_5_4_3_2_1_2_3_4_5_6_7_8_9_10