我正在尝试使用Python 3创建由用户选择的字母组成的菱形。因此,如果用户选择“ B”,则菱形为
A
B B
A
如果用户选择“ D”,则菱形为:
A
B B
C C C
D D D D
C C C
B B
A
有人可以帮助我开始吗?到目前为止,我正在考虑如果用户选择D,那么它对应于4,您将使用等式2k-1来确定“正方形”的大小。我还将创建一个包含所有字母的链接列表 所以字母= ['A','B','C','D'....'Z'](或者字典会更好吗?) 所以:
def rhombus(n):
squareSize = 2n-1
for i in range(1,squareSize):
for l in letter:
print l + "/n"
答案 0 :(得分:1)
domochevski的回答很好,但实际上我们不需要这些进口。
def rhombus(char):
A = 64
Z = A + 26
try:
val = ord(char)
if val < A or val > Z:
return None
except:
return None
L = [ ''.join(([chr(x)]*(x-A))) for x in range(A,val+1) ]
L = [' '.join(list(x)) for x in L]
max_len = max(len(x) for x in L)
L = [x.center(max_len) for x in L]
L += L[-2::-1]
return '\n'.join(L)
print(rhombus('Z'))
答案 1 :(得分:1)
打高尔夫球时间\ o /
编辑:code golf当然会有SE,我会像在罗马一样
n=26
for x in range(-n, n):
x = abs(x)
print(' '*x+' '.join([chr(64+n-x) for _ in range(n-x)]))
说明
for x in range(-n, n)
:生成行
' '*x
:在行中每个第一个字母之前生成空格
chr(64+n-x)
:显示字母,并显示chr(65) = "A"
' '.join
:将所有字母之间的三个空格连接起来
for _ in range(n-x)
:将生成正确数量的字母。价值本身是没有用的。
n = 4的输出:
A
B B
C C C
D D D D
C C C
B B
A
答案 2 :(得分:0)
那是一个有趣的问题。这是一些快速而肮脏的方法:
from string import ascii_uppercase
def rhombus(c): # Where c is the chosen character
# Get the position (1-based)
n = ascii_uppercase.find(c.upper()) + 1
if 0 < n <= 26:
# Get the strings for the top of the rhombus without spaces
l = [ascii_uppercase[i] * ((i)+1) for i in range(n)]
# Add in the spaces
l = [' '.join(list(e)) for e in l]
# Align everything
max_len = max(len(e) for e in l)
l = [e.center(max_len) for e in l]
# Get the bottom from the top
l += l[-2::-1]
# Print the rhombus
for e in l:
print(e)
正如我提到的那样,这不是漂亮的代码,但它应该可以工作。