首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Alphabet在PYTHON中获得此模式

使用Alphabet在PYTHON中获得此模式
EN

Stack Overflow用户
提问于 2019-11-19 16:00:25
回答 3查看 306关注 0票数 2

想要的模式是

使用此代码

代码语言:javascript
复制
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()

我得到了这样的模式:

代码语言:javascript
复制
      A 
    B C 
  D E F 
G H I J  
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-11-19 16:24:18

使用同样的方法,稍微改变您的第二个内部循环以及更新c的方式应该是这样的:

代码语言:javascript
复制
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()

返回

代码语言:javascript
复制
Enter the order : 4
          A 
        C B 
      F E D 
    J I H G 
票数 2
EN

Stack Overflow用户

发布于 2019-11-19 16:23:28

当你print(chr(c))的时候,你基本上需要反转c移动的方向,因为你想用相反的顺序打印字母。这很容易,只需再多几行就可以完成。

首先,c应该从您要打印的字符(按字母顺序)的最后(按字母顺序)开始(在该特定行上)。这是通过在c += d循环之前说for k来完成的。

然后,由于我们正在倒退,我们需要每次减少1 c。我们在c -= 1循环的开头添加for k

最后,我们需要将c推回下一个字母。因为我们打印了d字母,所以我们只在for k循环之后添加c += d。最后一点可能会让人有点困惑。例如,打印的行之一是J I H G。打印这一行后,c的ascii值为G,但我们希望能够在J之后打印下一个字母,而不是G,这就是为什么我们再次添加d的原因。

完整的代码是

代码语言:javascript
复制
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()

输出:

代码语言:javascript
复制
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,更多的是节奏曲,比如x += 1。这是所有其他数学运算的情况。x = x*3可以重写为x *= 3
  2. for k in range(1, d+1)可以写得更简洁一些,如for k in range(d)
票数 1
EN

Stack Overflow用户

发布于 2019-11-19 16:54:10

这里有一个更简单的方法来创建您的输出。

代码语言:javascript
复制
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))

输出:

代码语言:javascript
复制
        A
      C B
    F E D
  J I H G
O N M L K
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58938182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档