我正在尝试创建一个这样的反向三角形:
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
请帮忙:)
答案 0 :(得分:3)
这是一种有趣的方法。
from string import digits
triangle = '\n'.join(digits[:10-i].rjust(10) for i in range(10))
print(triangle)
答案 1 :(得分:2)
好像你过度复杂了:
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
的增加,要打印的空格数会增加。相应地,打印的位数减少。
答案 2 :(得分:2)
实现此目的的更简单方法是创建自定义函数:
n
str.format
右对齐字符串
str.join
这是使用生成器表达式的示例函数:
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
答案 3 :(得分:0)
几乎,你必须在第6行打印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
的{{1}}参数使用空字符串。
答案 4 :(得分:0)
使用嵌套列表推导而不使用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