使用 Python 生成以下字母模式

3

期望的模式是这样的

enter image description here

使用此代码

order = int(input("Enter the order : "))
c = ord("A")
d = 1
for i in range(order,0,-1):
    for j in range(i):
        print(" ",end=" ")
    for k in range(1,d+1):
        #c=c-1
        print(chr(c),end=" ")
        c=c+1
    d=d+1
    print()

我正在获取这个模式:
      A 
    B C 
  D E F 
G H I J  
3个回答

2
使用同样的方法,稍微更改第二个内部循环以及更新 c 的方式应该可以解决问题:
order = int(input("Enter the order : "))
c = ord("A")
d = 1
for i in range(order,0,-1):
    for j in range(i):
        print(" ",end=" ")
    for k in range(0, d):         # iter from 0 to number of letters in the row
        print(chr(c - k),end=" ") # backtrack from starting letter
    d=d+1                         # increment d before updating c
    c = c + d                     # update c to be the starting letter of the next row
    print()

返回结果

Enter the order : 4
          A 
        C B 
      F E D 
    J I H G 

1
当你使用print(chr(c))时,你需要反转c的方向,因为你想要按相反的顺序打印字母。这很容易做到,只需要添加几行额外的代码。
首先,c应该从你想要打印的字符的最后一个(按字母顺序)ascii值开始(在特定行上)。在你的for k循环之前,通过说c += d来实现此目的。
然后,由于我们是倒序进行,每次需要将c递减1。我们在你的for k循环的开头添加c -= 1
最后,我们需要将c推回到下一个字母。由于我们打印了d个字母,所以在for k循环之后,只需添加c+=d即可。这最后一部分可能有点令人困惑。例如,其中一行打印的是J I H G。打印此行后,c具有G的ASCII值,但我们希望能够打印J后面的下一个字母,而不是G,这就是为什么我们再次添加d值的原因。
完整的代码如下:
order = int(input("Enter the order : "))
c = ord("A")
d = 1
for i in range(order,0,-1):
    for j in range(i):
        print(" ",end=" ")
    c += d
    for k in range(d):
        c -= 1
        print(chr(c),end=" ")
    c += d
    d += 1
    print()

输出:

Enter the order : 6
            A
          C B
        F E D
      J I H G
    O N M L K
  U T S R Q P

P.S

  1. 不要写 x = x + 1,更符合 Python 风格的是写成 x += 1。对于其他所有数学运算也是如此。将 x = x*3 改写为 x *= 3
  2. for k in range(1, d+1) 可以更简洁地写成 for k in range(d)

谢谢您的回答,还有建议。我是一个新手程序员,所以对缩写并不很熟悉。 - Sajal Vasal

1
这里有一个更简单的方法来创建你的输出。
cols = int(input("Enter the order : "))
end = cols - 1
c = ord('A')
for r in range(cols):
    l = [chr(c+count) for count in range(cols-end)]
    c=c+len(l)
    l.extend(' '*end)
    end = end -1
    l.reverse()
    print(' '.join(l))

输出:

        A
      C B
    F E D
  J I H G
O N M L K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接