5 回答

TA貢獻1824條經(jīng)驗 獲得超8個贊
打印第一行后a,值已從 65 更改,這就是為什么您只會增加字母,直到您處于特殊字符的字符代碼處。保持固定并使用循環(huán)變量來計算正確的字母:
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

TA貢獻1784條經(jīng)驗 獲得超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()

TA貢獻1852條經(jīng)驗 獲得超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:])
但我不相信列表理解是否值得。

TA貢獻1829條經(jīng)驗 獲得超9個贊
您沒有在每次迭代時重置 a 的值,i也沒有在最后一個循環(huán)中使用 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 并開始打印相應(yīng)的 ascii 字符。

TA貢獻1856條經(jīng)驗 獲得超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()
添加回答
舉報