如何根据下面的源代码在 python 中制作三角形 x

How to make triangle x in python from source code below

大家好我想问问大家... 像这样... 我想做一个三角形 X 或 *,如下所示:

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

我的算法是这样的:

for y:=1 to i do
    for x:=1 to j do
       for j-x to 1 do write(' ');
       for i to 2*(x-1)+1 do write('*');

任何人都可以告诉我 python 的源代码如何像上面的 pascal 一样? 感谢您的回答

我这里有一些代码可以做到这一点,也许这可以帮助你 :)

def pascals_triangle(order):
    """
    :brief:         Compute the line of pascal's triangle with order 'order'
                    |       line          | order |
                    |---------------------|-------|
                    |         1           |   0   |
                    |       1   1         |   1   |
                    |     1   2   1       |   2   |
                    |    1   3   3   1    |   3   |
                    | 1   4   6   4   1   |   4   |
    :param order:   order of the line in pascal's triangle 
                    (starting with 0, which returns just [1])
    :return:        a list of the pascal's triangle line of order 'order'
    """
    line = [1]
    for k in xrange(order):
        line.append(line[k] * (order - k) / (k + 1))
    return line

你可以简单地这样做:

def triangle(lines):
    for i in range(lines):
        print(' '*(lines-i) + '*'*(i*2+1))

triangle(5)

按预期输出

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

这是一个可能的解决方案:

def print_pascals_triangle(levels, debug_char=None):
    triangle = []

    for order in range(levels):
        line = [debug_char] if debug_char is not None else [1]
        for k in range(order):
            if debug_char is None:
                value = line[k] * (order - k) / (k + 1)
                line.append(value)
            else:
                line.append(debug_char)
        triangle.append(line)

    def format_row(row):
        return ' '.join(map(str, row))

    triangle_width = len(format_row(triangle[-1]))
    for row in triangle:
        print(format_row(row).center(triangle_width))

如果你想要真正的帕斯卡三角形,你可以这样使用它:

for level in range(1, 8):
    print_pascals_triangle(level)
    print('-' * 80)

你会得到:

1
--------------------------------------------------------------------------------
 1 
1 1
--------------------------------------------------------------------------------
  1  
 1 1 
1 2 1
--------------------------------------------------------------------------------
   1   
  1 1  
 1 2 1 
1 3 3 1
--------------------------------------------------------------------------------
    1    
   1 1   
  1 2 1  
 1 3 3 1 
1 4 6 4 1
--------------------------------------------------------------------------------
      1      
     1 1     
    1 2 1    
   1 3 3 1   
  1 4 6 4 1  
1 5 10 10 5 1
--------------------------------------------------------------------------------
       1        
      1 1       
     1 2 1      
    1 3 3 1     
   1 4 6 4 1    
 1 5 10 10 5 1  
1 6 15 20 15 6 1
--------------------------------------------------------------------------------

否则,您可以用其他字符伪造数字,如下所示:

for level in range(1, 8):
    print_pascals_triangle(level, debug_char='*')
    print('-' * 80)

你会得到这个:

*
--------------------------------------------------------------------------------
 * 
* *
--------------------------------------------------------------------------------
  *  
 * * 
* * *
--------------------------------------------------------------------------------
   *   
  * *  
 * * * 
* * * *
--------------------------------------------------------------------------------
    *    
   * *   
  * * *  
 * * * * 
* * * * *
--------------------------------------------------------------------------------
     *     
    * *    
   * * *   
  * * * *  
 * * * * * 
* * * * * *
--------------------------------------------------------------------------------
      *      
     * *     
    * * *    
   * * * *   
  * * * * *  
 * * * * * * 
* * * * * * *
--------------------------------------------------------------------------------