0

I would like to ask again the help of the Python experts in this forum. The task is to create a program that will return a triangle pattern. However, there must be a siblings.

Sample input:

Input an Integer:
9

Sample Output:

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

The code that I have so far is:

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

When I run this code the output is:

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

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

*
**
***
****

It prints after the first triangle, my goal is to print it beside each triangle..

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 回答