反向数字三角形

时间:2018-02-19 23:03:23

标签: python python-3.x

我正在尝试创建一个这样的反向三角形:

    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

请帮忙:)

5 个答案:

答案 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)

使用嵌套列表推导而不使用mapimport的单行内容:

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