0

このフォーラムで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
*
**
***
****
*****   
******
*******
********
*********
**********
***********
************

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

*
**
***
****

最初の三角形の後に印刷されます。私の目標は、各三角形の横に印刷することです。

4

1 に答える 1

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
于 2013-01-02T16:24:18.210 に答える