Python的三角兄弟姐妹

时间:2013-01-02 15:42:11

标签: python

我想再次请教这个论坛的Python专家的帮助。任务是创建一个返回三角形图案的程序。但是,必须有一个兄弟姐妹。

示例输入:

Input an Integer:
9

示例输出:

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

到目前为止我的代码是:

a = int(input("Input a number? "))

k=a/3
t=a-k
y=a-(k*2)

for i in range(a + 1):
    print '*' * i

for i in range(t + 1):
    print '*' * i

for i in range(y + 1):
    print '*' * i

当我运行此代码时,输​​出为:

Input a number: 12
*
**
***
****
*****   
******
*******
********
*********
**********
***********
************

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

*
**
***
****

它打印在第一个三角形之后,我的目标是在每个三角形旁边打印..

1 个答案:

答案 0 :(得分:2)

制作你的三角形。

def make_triangle(size, siblings, step): 
    return [['*' * (i-(step*sib)) + ' ' * ((size-(step*sib)) - ((i-(step*sib)) if (i-(step*sib) > 0) else 0)) for sib in xrange(siblings)] for i in xrange(1, size+1)]

输出:

>>> for i in make_triangle(9,3,3):
    print ''.join(i)


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

或者你可以将它全部保留在函数中:

def make_triangle(size, siblings, step): 
    return '\n'.join([''.join(line) for line in [['*' * (i-(step*sib)) + ' ' * ((size-(step*sib)) - ((i-(step*sib)) if (i-(step*sib) > 0) else 0)) for sib in xrange(siblings)] for i in xrange(1, size+1)]])

>>> print make_triangle(9,3,3)
*                        
**                     
***                  
****     *          
*****    **        
******   ***      
*******  ****  *  
******** ***** ** 
******************

如果你想在它们之间留一个空格:

def make_triangle(size, siblings, step): 
    return '\n'.join([' '.join(line) for line in [['*' * (i-(step*sib)) + ' ' * ((size-(step*sib)) - ((i-(step*sib)) if (i-(step*sib) > 0) else 0)) for sib in xrange(siblings)] for i in xrange(1, size+1)]])

>>> print make_triangle(9,3,3)
*                          
**                       
***                    
****      *           
*****     **         
******    ***       
*******   ****   *  
********  *****  ** 
********* ****** ***

为了好玩(你可以看到非常好的功能):

>>> print make_triangle(13,5,2)
*                                                                
**                                                           
***           *                                           
****          **                                       
*****         ***         *                          
******        ****        **                       
*******       *****       ***       *             
********      ******      ****      **           
*********     *******     *****     ***     *    
**********    ********    ******    ****    **   
***********   *********   *******   *****   ***  
************  **********  ********  ******  **** 
************* *********** ********* ******* *****

更有趣:

>>> print make_triangle(13,5,2)[::-1]
***** ******* ********* *********** *************
 ****  ******  ********  **********  ************
  ***   *****   *******   *********   ***********
   **    ****    ******    ********    **********
    *     ***     *****     *******     *********
           **      ****      ******      ********
            *       ***       *****       *******
                     **        ****        ******
                      *         ***         *****
                                 **          ****
                                  *           ***
                                               **
                                                *

补充:对其工作原理的一些解释:

这是代码以更基本的形式所做的事情:

def make_triangle(size, siblings, step): 
    out_list = []
    for i in xrange(1, size+1):
        in_list = []
        for sib in xrange(siblings):
            if i-(step*sib) > 0: 
                in_list.append('*' * (i-(step*sib)) + ' ' * ((size-(step*sib)) - (i-(step*sib))))
            else:
                in_list.append('*' * (i-(step*sib)) + ' ' * (size-(step*sib))
        out_list.append(in_list)
    line_list = []
    for in_list in out_list:
        line_list.append(' '.join(in_list))
    result = '\n'.join(line_list)
    return result