藍橋杯之字母圖形(Python)實現
題目
利用字母可以組成一些美麗的圖形,下面給出了一個例子:
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
這是一個5行7列的圖形,請找出這個圖形的規律,並輸出一個n行m列的圖形。
輸入格式
輸入一行,包含兩個整數n和m,分別表示你要輸出的圖形的行數的列數。
輸出格式
輸出n行,每個m個字符,爲你的圖形。
樣例輸入
5 7
代碼
import string
loop = input().split()
loop = [int(i) for i in loop]
n1 = loop[0]
n2= n3 = loop[1]
letter = list(string.ascii_uppercase)
if n1 <= n2:
for a in range(loop[0]):
points = a
if a ==0:
for b in range(0, n2):
print(letter[b],end='')
else:
print(letter[a],end='')
if points == 1:
for b in range(0,n2):
print(letter[b],end='')
else:
while True:
if points == 0:
break
else:
print(letter[points-1],end='')
points -=1
for b in range(1,n2):
print(letter[b],end='')
n2-=1
print()
else:
for a in range(loop[0]):
points = a
if a == 0:
for b in range(0, n2):
print(letter[b], end='')
else:
print(letter[a], end='')
if points == 1:
for b in range(0, n2):
print(letter[b], end='')
else:
n = 0
while True:
if points == 0:
break
else:
n+=1
if n >= n3:
break
print(letter[points - 1], end='')
points -= 1
for b in range(1, n2):
if n >= n3:
break
print(letter[b], end='')
n+=1
n2 -= 1
print()
分析(這個不能直接複製到藍橋的測試系統上,因爲有其它註釋啥的會直接錯誤)
import string
loop = input().split()
loop = [int(i) for i in loop]
n1 = loop[0]
n2= n3 = loop[1] # n3相當是一堵牆,是用來控制輸出的列數的
letter = list(string.ascii_uppercase) # 這個裏面自動包含了從A到Z所有的字母,沒有必要手打或者用ASCII碼。
if n1 <= n2:# 我們發現,當行數小於或等於列數的時候,輸出出來的正好是我們所想的結果,因爲列數程序可自行控制。
for a in range(loop[0]): # 大循環控制行數
points = a# 列指針
if a ==0:
for b in range(0, n2):
print(letter[b],end='')
else:
print(letter[a],end='')
if points == 1:
for b in range(0,n2):
print(letter[b],end='')
else:
while True:
if points == 0:# 當指針指到A的時候,停止循環。不打印。
break
else:
print(letter[points-1],end='')
points -=1 # 指針退位
for b in range(1,n2):# 打印剩下的部分
print(letter[b],end='')
n2-=1 # 控制從A開始打印的字母數量。
print()
else:# 當行數大於列數的時候,其它思路是不變的,但,此時,n3這堵牆就派上用場了。
for a in range(loop[0]):
points = a
if a == 0:
for b in range(0, n2):
print(letter[b], end='')
else:
print(letter[a], end='')
if points == 1:
for b in range(0, n2):
print(letter[b], end='')
else:
n = 0 # 列數控制指針
while True:
if points == 0:
break
else:
n+=1
if n >= n3:# 當列數控制指針的大小和列數相等的時候跳出循環
break
print(letter[points - 1], end='')
points -= 1
for b in range(1, n2):
if n >= n3:# 此時,這個也是一樣,當列數控制指針的大小和列數相等的時候跳出循環
break
print(letter[b], end='')
n+=1
n2 -= 1
print()
還有一個博主代碼很簡潔,思路也很清晰,如果我的看不懂可以看看他的:https://blog.csdn.net/qq_40730150/article/details/104536839?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task