печать треугольной пирамиды с использованием Python с заданным значением

#python #python-3.x

#python #python-3.x

Вопрос:

Я напечатал треугольную пирамиду следующим образом:

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

Мой код:

 for i in range(1,6):
    for j in range(6-i):
        print(" ", end="")
    for j in range(i):
        print("*", end=" ")
    print()
  

Я хочу напечатать треугольник, подобный этой звездообразной пирамиде:
Если я ввожу 1: печатаю первое изображение, затем, если я ввожу 2, печатаю второе. Я хочу знать фактическую логику.

введите описание изображения здесь

Комментарии:

1. Вы должны напечатать звездочки и пробелы.

2. Важной частью обучения программированию является изучение того, как решать проблемы. Отказываться и запрашивать решение онлайн не способствует этому.

Ответ №1:

Учитывая масштабируемость кода, я определил два параметра, size и layer :

  • size является ли высота треугольника также номерами звездочек внизу
  • layer это слой треугольников, который вы хотите сложить

Вот несколько ключевых точек:

  1. str.center здесь очень полезно. Если мы знаем width , он может автоматически поместить его в середину. итак, с помощью center , если мы вычислим номер звезды и margine между ними. мы можем легко построить треугольник.

  2. реализуйте функцию для создания одного треугольника: сначала выведите top , затем body последний bottom .

  3. составьте отдельные треугольники вместе в одном слое, слой 0 имеет 1 треугольник, слой 1 имеет 2 треугольника… мы можем просто вычислить количество треугольников в текущем слое и объединить их соответствующей строкой, а затем использовать total_width , чтобы снова поместить их в центр.

Вот мое решение:

 from functools import reduce

def generate_triangle(size, width):
    res = []
    # print top
    res.append('*'.center(width))

    # print body
    margin = 1
    for i in range(size - 2):
        res.append(('*'   ' ' * margin   '*').center(width))
        margin  = 2

    # print bottom
    res.append(' '.join('*' * size).center(width))
    return res

def generate_triangles(size, layer):
    width = size * 2 - 1
    total_width = layer * (width   1) - 1
    res = []
    for i in range(layer):
        res  = reduce(lambda x, y: x   [' '.join(y for _ in range(i   1)).center(total_width)],
                      generate_triangle(size, width), [])
    return res
  

тестовый код:

 def triangle_test():
    def print_matrix(matrix):
        for row in matrix:
            print(row)
        print()

    print_matrix(generate_triangles(6, 1))
    print_matrix(generate_triangles(5, 2))
    print_matrix(generate_triangles(4, 4))
  

вывод:

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

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

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

Надеюсь, это поможет вам, и прокомментируйте, если у вас возникнут дополнительные вопросы. : )

Комментарии:

1. Мне не нужен код. Я хочу знать, как это работает. @recnac

2. Я отредактировал свой ответ и добавил ключевой момент моих идей. Если у вас все еще есть какая-то часть, которая не ясна, просто скажите мне @Sabbir