为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

料青山看我应如是 2022-10-18 14:57:18
我想打印这个图案         1        12A       123BA      1234CBA     12345DCBA    123456EDCBA   1234567FEDCBA  12345678GFEDCBA 123456789HGFEDCBA12345678910IHGFEDCBA我的这种模式的代码:n=11a=65for 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]^_`abcd12345678910efghijklm我认为问题在于最后一个 for 循环,但我无法纠正它。有人可以帮忙吗?提前致谢。
查看完整描述

5 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

打印第一行后a,值已从 65 更改,这就是为什么您只会增加字母,直到您处于特殊字符的字符代码处。保持固定并使用循环变量来计算正确的字母:


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


查看完整回答
反对 回复 2022-10-18
?
青春有我

TA贡献1784条经验 获得超8个赞

这是一个小的改进。


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()


查看完整回答
反对 回复 2022-10-18
?
小怪兽爱吃肉

TA贡献1852条经验 获得超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:])

但我不相信列表理解是否值得。


查看完整回答
反对 回复 2022-10-18
?
PIPIONE

TA贡献1829条经验 获得超9个赞

您没有在每次迭代时重置 a 的值,i也没有在最后一个循环中使用 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 字符。


查看完整回答
反对 回复 2022-10-18
?
呼唤远方

TA贡献1856条经验 获得超11个赞

我真的很亲近:


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()


查看完整回答
反对 回复 2022-10-18
  • 5 回答
  • 0 关注
  • 131 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信