如何在python中打印以下模式?

时间:2020-04-22 08:55:06

标签: python python-3.x

我要打印此图案

         1
        12A
       123BA
      1234CBA
     12345DCBA
    123456EDCBA
   1234567FEDCBA
  12345678GFEDCBA
 123456789HGFEDCBA
12345678910IHGFEDCBA

我对此模式的代码:

n=11
a=65
for i in range(1,n):
    for j in range(1,n-i):
        print(end=' ')
    for j in range(1,i+1):
        print(j,end='')
    for j in range(i-1,0,-1):
        ch=chr(a)
        print(ch,end='')
        a=a+1
    print()

但这是打印:

         1
        12A
       123BC
      1234DEF
     12345GHIJ
    123456KLMNO
   1234567PQRSTU
  12345678VWXYZ[\
 123456789]^_`abcd
12345678910efghijklm

我认为问题出在最后一个for循环中,但我无法纠正它。有人可以帮忙吗?预先感谢。

5 个答案:

答案 0 :(得分:3)

在打印第一行后,a的值从65更改了,这就是为什么直到使用特殊字符的字符代码之前,您都会得到递增的字母的原因。使其保持固定,并使用loop变量将正确的字母括起来:

n=11
a = 65
for i in range(1,n):

    for j in range(1,n-i):
        print(end=' ')
    for j in range(1,i+1):
        print(j,end='')
    for j in range(i-1,0,-1):
        ch=chr(a+j-1)    # Note the change here
        print(ch,end='')

    print()

此打印

         1
        12A
       123BA
      1234CBA
     12345DCBA
    123456EDCBA
   1234567FEDCBA
  12345678GFEDCBA
 123456789HGFEDCBA
12345678910IHGFEDCBA

答案 1 :(得分:3)

这是一个小改进。

n=11
a=65
for i in range(1,n):
    for j in range(1,n-i):
        print(end=' ')
    for j in range(1,i+1):
        print(j,end='')
    for j in range(i-2,-1,-1):
        if i != 1:
            ch=chr(a+j)
            print(ch,end='')
    print()

答案 2 :(得分:1)

我真的很亲密:

n=11
a=65
for i in range(1,n):
    a=65+i-2 # a need to actually end on char A
    for j in range(1,n-i):
        print(end=' ')
    for j in range(1,i+1):
        print(j,end='')
    for j in range(i-1,0,-1):
        ch=chr(a)
        print(ch,end='')
        a=a-1 # here we substract so we go backward!
    print()

答案 3 :(得分:1)

您没有在i的每次迭代中重置a的值,也没有在最后一个循环中使用j的值。

n=11

for i in range(1,n):
    a=64  #note this is inside loop now and the value was reduced by 1
    for j in range(1,n-i):
        print(end=' ')
    for j in range(1,i+1):
        print(j,end='')
    for j in range(i-1,0,-1):
        ch=chr(a+j)  #note the change here
        print(ch,end='')
        a=a+1
    print()

由于您的a从未被重置为65,因此该值超过90,并开始打印相应的ascii字符。

答案 4 :(得分:1)

我喜欢这样:

letters="IHGFEDCBA"
lines = 11
for i in range(lines,-1,-1):
    print(i*' ' + ''.join([str(num) for num in range(1, lines-i)]) + letters[i:])

但我不确定列表理解是否值得。