2017-01-31 35 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()) 

結果:

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