2013-01-02 96 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並嘗試自己理解它。但是 - 我會提供一些關於代碼的具體信息......祝你好運。 –