我正在尝试创建一个反向三角形:
0123456789
012345678
01234567
0123456
012345
01234
0123
012
01
0
我很近。这是我现在拥有的代码:
for e in range (10, 0, -1):
for d in range (10-e):
print (' ', end = ' ')
for d in range (e):
e = e - 1
print (e, end = ' ')
print()
,输出为:
9876543210
876543210
76543210
6543210
543210
43210
3210
210
10
0
请帮助:)
这是一种有趣的方法。
from string import digits
triangle = 'n'.join(digits[:10-i].rjust(10) for i in range(10))
print(triangle)
似乎您对此表示赞成:
for i in range(10):
print(' ' * i + ''.join(map(str, range(0, 10 - i))))
0123456789
012345678
01234567
0123456
012345
01234
0123
012
01
0
运行一个循环从0到9。在每次迭代时,找出要相应打印多少个空间和数字。随着i
的增加,打印空间的数量增加。相应地,要打印的数字数量减少。
实现此目的的更简单方法将是创建一个自定义功能:
- 正确使用
str.format
基于 - 使用
str.join
在范围内创建一个数字字符串
n
合理了字符串这是使用 Generator表达式的示例函数:
def print_triange(n):
for i in range(n):
print('{:>{}}'.format(''.join(str(j) for j in range(n-i)), n))
# ^ To right justify the string
也可以使用map
AS来实现:
def print_triange(n):
for i in range(n):
print('{:>{}}'.format(''.join(map(str, range(n-i))), n))
样本运行:
>>> print_triange(10)
0123456789
012345678
01234567
0123456
012345
01234
0123
012
01
0
几乎,您必须在第六行中打印d
而不是e
:
for e in range (10, 0, -1):
for d in range (10 -e):
print (' ', end='')
for d in range (e):
e = e - 1
print (d, end='')
print()
您可以使用一个空字符串作为print
'S end
参数。
使用嵌套列表综合的单线,而无需使用map
或import
:
print('n'.join([''.join([str(j) for j in range(10-i)]).rjust(10,' ') for i in range(10)]))
0123456789
012345678
01234567
0123456
012345
01234
0123
012
01
0