Python中的空心菱形与递归

时间:2017-01-31 00:52:59

标签: 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)

当我打印出来时就是这样:

   / \
  /   \
 /     \
/       \

我想制作一个完整的钻石并使底部部分难以理解,如何用钻石的其余部分制作下半部分?

2 个答案:

答案 0 :(得分: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)

输出:

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

答案 1 :(得分: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())

结果:

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