如何将4个三角形循环放在一起制作一个"钻石"?

时间:2014-04-28 09:20:17

标签: python python-2.7 while-loop

我想制作这个“钻石”:

********************
*********  *********
********    ********
*******      *******
******        ******
*****          *****
****            ****
***              ***
**                **
*                  *
*                  *
**                **
***              ***
****            ****
*****          *****
******        ******
*******      *******
********    ********
*********  *********
********************

我可以制作使用while循环制作钻石的4个三角形:

x = 10
while 0 < x < 11:
    print '%10s' % ('*' * x),
    x = x - 1
    print

x = 0
while x < 11:
    print '%10s' % ('*' * x),
    x = x + 1
    print

x = 10
while 0 < x < 11:
    print '%0s' % ('*' * x),
    x = x - 1
    print

x = 0
while x < 11:
    print '%0s' % ('*' * x),
    x = x + 1
    print

我可以将这4个循环组合在一起制作钻石吗?或者我必须采用不同的方式吗?

2 个答案:

答案 0 :(得分:6)

我建议你使用字符串格式化(你可以试验参数):

a = range(0,20,2)+range(20,-1, -2)

for i in a:
    print '{:*^30}'.format(' '*i)

[OUTPUT]
******************************
**************  **************
*************    *************
************      ************
***********        ***********
**********          **********
*********            *********
********              ********
*******                *******
******                  ******
*****                    *****
******                  ******
*******                *******
********              ********
*********            *********
**********          **********
***********        ***********
************      ************
*************    *************
**************  **************
******************************

上面代码的作用是首先创建一个列表a,其中包含每行的空格数。然后,字符串格式化为长度30列表中的每个元素打印一行({:*^30}的30个部分,其居中^,并在*的任一侧填充。希望有所帮助。

或只是为了好玩:单行:

for i in range(1,20,2)+range(19,-1, -2):print '{:*^30}'.format(' '*i)

答案 1 :(得分:1)

一种非常简单的方法是使用两个循环:

def diamond(n):
    for i in range(n, 0, -1):
        print '*' * i + (' ' * (n-i) * 2) + '*' * i
    for i in range(1, n+1):
        print '*' * i + (' ' * (n-i) * 2) + '*' * i