2013-01-02 57 views
0

我想再次询问本次论坛中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

制定兄弟姐妹的规则是什么? – japreiss

+0

您是否要求我们为您编写代码?如果是这样,你会在别处找到更好的帮助。但是,如果您的代码存在特定问题,请重新解释您的问题以解决该问题。 –

+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 
+0

我很抱歉,但我真的没有得到上面的代码,因为我真的是新的python ...然而,编辑我的帖子,因为我可以制作兄弟姐妹,但我无法在彼此旁边打印出来,总是在之后,有没有什么方法可以利用连接使三角形彼此打印? –

+0

你好,抱歉打扰你,但我利用你的代码: A = INT( “?输入数字” 输入()) K = A/3 T = AK Y = A-(K * 2 ) print'\ n'.join([''。在xrange(1,a + 1)]]中为i [x'(t)]中的[['*'*(i-(y * sib))+''*(ai) ) 但它工作正常,但是,我不明白这一行: print'\ n'.join([''.join(line)for line in [['*'*(i-(y * sib))+''*(ai)为兄弟姐妹在xrange(t)]为i在xrange(1,a + 1)]]) –

+0

@AilenSamsonLaguda嗨,我很高兴我的代码为你工作,但很抱歉我现在不能向你解释,所涉及的功能都非常基本,只能将它们以复杂的方式组合在一起。我建议如果你对python如此陌生,你应该接受你不理解代码并将其用作“魔术”或学习python并尝试自己理解它。但是 - 我会提供一些关于代码的具体信息......祝你好运。 –