我要打印此图案
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循环中,但我无法纠正它。有人可以帮忙吗?预先感谢。
答案 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:])
但我不确定列表理解是否值得。