2017-01-31 33 views
2

我一直在试图使钻石出向前和向后斜杠的,所以到目前为止,我有这段代码:空心钻在Python递归

def upper_diamond(level,length): 
if level <=length: 
    print(" " * (length - level), end="") 
    print("/", end="") 
    print(" " * 2 * (level-1), end=" ") 
    print("\\") 
    upper_diamond(level + 1,length) 

def lower_diamond(level,length): 


def diamond(length): 
    upper_diamond(1,length) 

diamond(4) 

,当我打印出来这样:

/\ 
/ \ 
/ \ 
/  \ 

我想打一个完整的钻石,使底部被绊倒了我,我怎么做与钻石其余部分的下半部分印?

回答

1

立足关你的代码,你可以复制相同的行为(间隔部分空字符串,以避免开边后改变end)调整偏移:

def upper_diamond (level, length): 
    if level <= length: 
     print(' ' * (length - level), end='') 
     print('/', end='') 
     print(' ' * 2 * (level - 1), end='') 
     print('\\') 
     upper_diamond(level + 1, length) 

def lower_diamond (level, length): 
    if level <= length: 
     print(' ' * (level - 1), end='') 
     print('\\', end='') 
     print(' ' * 2 * (length - level), end='') 
     print('/') 
     lower_diamond(level + 1, length) 

def diamond(length): 
    upper_diamond(1, length) 
    lower_diamond(1, length) 

diamond(4) 

输出:

/\ 
/\ 
/ \ 
/ \ 
\ /
\ /
    \/
    \/ 
+0

有没有添加到代码中,我已经有一个替代的方法是什么? –

+0

@ L.Jones查看更新 – Uriel

+0

非常感谢!最后一部分让我困惑不已,这肯定有帮助。 –

0

你也可以将其简化为一个单一的功能,您可以在其中指定钻石每边的尺寸和字符。而不是打印每一行,使用该函数构建整个字符串然后打印返回的字符串可能会更清晰。

def build_diamond(half_width=4, char_tl='/', char_tr='\\', char_bl='\\', char_br='/'): 
    top_rows = [] 
    bot_rows = [] 
    for i in range(half_width): 
     offset = (half_width - i - 1) 
     top_rows.append(offset * ' ' + (2 * i * ' ').join((char_tl, char_tr))) 
     bot_rows.append(i * ' ' + (2 * offset * ' ').join((char_bl, char_br))) 
    return '\n'.join(top_rows + bot_rows) 

print(build_diamond()) 

结果:

/\ 
/\ 
/ \ 
/ \ 
\ /
\ /
    \/
    \/