Python中的字母金字塔程序
有一个程序需要用户输入一个字母。使用嵌套循环来生成一个像这样的金字塔形状:
A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
ABCDCBA
ABCBA
ABA
A
这个图案应该延伸到用户输入的字符。例如,之前的图案是输入E或e时的结果。
这是我目前的进展,几乎能生成这个图案,但在菱形的右下角有一些小缺陷。
L=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
letter=raw_input('Enter letter:')
g=letter.upper()
if g in L:
f=L.index(g)
a=f+1
for k in range(a,0,-1):
b=L[:a-k+1]
d=L[:a-k]
L3=[x for x in d]
e=L3[::-1]
print ' '*k + '%s'%''.join(b) + '%s'%''.join(e)
for k in range(a):
d=L[:a-1-k]
b=L[:a-k-1]
L3=[x for x in b]
e=L3[::-1]
print ' '*(k+2) + '%s'%''.join(d) + '%s'%''.join(e)
我得到的结果是这样的:
A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
ABCDDCBA
ABCCBA
ABBA
AA
2 个回答
0
先打印出一半的金字塔,然后把这个数组反转过来,最后打印出来的时候不要打印最后一个元素(现在变成第一个元素了)。
1
可能有不同的方法可以高效地完成这个任务,但这里有一个简单易懂的解决方案(基本的循环)
letter = raw_input('Enter Input: ')
if (len(letter) == 1):
if (letter.isalpha()):
# Retrieve the positon of the input letter
pos = ord(letter.upper()) - 64
# Prints upper part of the diamond
for i in range(1, pos + 1):
# Prints leading spaces for upper pyramid
for j in range(pos - i, 0, -1):
print(" "),
# Print numbers
# 2 for loops to print ascending and descending letters in a single row
for j in range(0, i):
print(chr(65+j)),
for j in range(i-1 , 0, -1):
print(chr(64+j)),
print
# Prints lower part of the diamond, This is just the reverse of the upper one
for i in range(pos -1 , 0, -1):
# Print leading space for lower pyramid
for j in range(pos - i, 0, -1):
print(" "),
for j in range(0, i):
print(chr(65+j)),
for j in range(i-1 , 0, -1):
print(chr(64+j)),
print
else:
print 'input a letter from the alphabet only'
else:
print 'enter one letter only'