【问题标题】:Pyramid of asterisks program in PythonPython中的星号程序金字塔
【发布时间】:2011-06-22 03:10:47
【问题描述】:

我用 C++ 编写了一个显示星号金字塔的程序(见下文),现在我想看看它是如何在 Python 中完成的,但这并不像我想象的那么容易。

有没有人试过这个,如果有,你能告诉我有用的代码吗?

提前致谢。

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

【问题讨论】:

  • 到目前为止你有什么,它怎么不工作?
  • 看看这个christmas tree
  • 堆栈溢出是向所有人开放的绝佳资源,但与许多其他互联网论坛一样,它确实有助于了解您在第一次参与时可能会遇到的一些默认规则。例如,请参阅此链接:meta.stackoverflow.com/questions/334822/…

标签: python terminal ascii-art


【解决方案1】:
user_input = input("How many rows do you want to print? \n")
def stars(a):
    size = int(a)
    for i in range(1, size+1):
        print(" "*(size-i),"*"*(i*2-1))
    

stars(user_input)

How many rows do you want to print?
20
                    *
                   ***
                  *****
                 *******
                *********
               ***********
              *************
             ***************
            *****************
           *******************
          *********************
         ***********************
        *************************
       ***************************
      *****************************
     *******************************
    *********************************
   ***********************************
  *************************************
 ***************************************

【讨论】:

    【解决方案2】:
    n=4
    m = (2*n)-2
    for i in range(0, m):
        for j in range(0, m):
           print(end=" ")
        m = m - 1 # decrementing m after each loop
        for j in range(0, i + 1):
        # printing full Triangle pyramid using stars
           print("* ", end=' ')
    print(" ")  
    
    
      *   
     *  *   
    *  *  *   
    



    【讨论】:

      【解决方案3】:

      如果你喜欢列表推导:

      > n = 5
      > print("\n".join((i*"*").center(n*2) for i in range(1, n*2, 2)))
      
          *
         ***
        *****
       *******
      *********
      

      【讨论】:

        【解决方案4】:
        $ cat tree.py
        def line(n, i):
            line = ''
            for j in range(n - i - 1):
                line += ' '
            for j in range(2 * i + 1):
                line += '*'
            for j in range(n - i - 1):
                line += ' '
            return line
        
        def tree(n):
            for i in range(n):
                line_ = line(n, i)
                print(line_)
        
        def run():
            tree(3)
        
        if __name__ == '__main__':
            run()
        $ python3 tree.py 
          *  
         *** 
        *****
        $ _
        

        【讨论】:

          【解决方案5】:
          #!/usr/bin/python
          for i in range(1,6):
           for j in range(1,i+1):
             print "*",
           print
          
          O/P: 
          ===
          *
          * *
          * * *
          * * * *
          * * * * *
          
          2) 
          #!/usr/bin/python
          for i in range(1,6):
           for j in range(1,7-i):
             print "*",
           print
          
          O/P:
          * * * * *
          * * * *
          * * *
          * *
          *
          
          3)
          #!/usr/bin/python
          for i in range(1,6):
           for j in range(1,6-i):
             print "",
           for k in range(1,i+1):
            print "*",
           print
          
          O/P:
          
              *
             * *
            * * *
           * * * *
          * * * * *
          
          4)
          #!/usr/bin/python
          for i in range(1,6):
           for j in range(1,1+i):
             print "",
           for k in range(1,7-i):
            print "*",
           print
          
          O/P:
           * * * * *
            * * * *
             * * *
              * *
               *
          5) 
          #!/usr/bin/python
          for i in range(1,6):
           for j in range(1,6-i):
             print "",
           for k in range(1,i+1):
            print "*",
           print
          for i in range(1,5):
           for j in range(1,1+i):
             print "",
           for k in range(1,6-i):
            print "*",
           print
          
          
          O/P:
              *
             * *
            * * *
           * * * *
          * * * * *
           * * * *
            * * *
             * *
              *
          

          【讨论】:

            【解决方案6】:

            你也可以画钻石

            def pyramid(r):
                for i in range(r):
                    print ("  "*(r-i-1) + "*"*(2*i+1))
                for i in range(r-1,-1,-1):
                    print ('  '*(r-i-1) + "*"*(2*i+1))
            
            n=int(input("Enter no of rows:"))
            pyramid(n)
            
            pyramid(10)
            
                              *
                            * * *
                          * * * * *
                        * * * * * * *
                      * * * * * * * * *
                    * * * * * * * * * * *
                  * * * * * * * * * * * * *
                * * * * * * * * * * * * * * *
              * * * * * * * * * * * * * * * * *
            * * * * * * * * * * * * * * * * * * *
            * * * * * * * * * * * * * * * * * * *  
              * * * * * * * * * * * * * * * * *
                * * * * * * * * * * * * * * *
                  * * * * * * * * * * * * *
                    * * * * * * * * * * *
                      * * * * * * * * *
                        * * * * * * *
                          * * * * *
                            * * *
                              *
            >>> 
            

            【讨论】:

              【解决方案7】:
              Pyramid, Inverted Pyramid and Diamond Rhombus in Python:
              
              Pyramid
              
              i=1
              j=5
              while i<=5:
               print((j*' ')+i*'* ')
               j=j-1
               i=i+1
              
              
              
              
                   * 
                  * * 
                 * * * 
                * * * * 
               * * * * *
              
              
              Inverted Pyramid
              
              i=1
              j=5
              while i<=5:
               print((i*' ')+j*'* ')
               j=j-1
               i=i+1
              
               * * * * * 
                * * * * 
                 * * * 
                  * * 
                   * 
              
              Diamond Rhombus
              
              i=1
              j=5
              while i<=5:
               print((j*' ')+i*'* ')
               while j<=5 & i==5:
                print(((j+1)*' ')+(5-j)*'* ')
                j=j+1
               j=j-1
               i=i+1
              
              
              
                   * 
                  * * 
                 * * * 
                * * * * 
               * * * * * 
                * * * * 
                 * * * 
                  * * 
                   * 
              

              【讨论】:

                【解决方案8】:

                虽然我对 python 非常陌生,但我是这样解决的:

                k=int(input("Enter the number of rows"))
                for i in range(1,k):
                    print(' '*(k-i),'* '*(i))
                
                      * 
                     * * 
                    * * * 
                   * * * * 
                  * * * * * 
                 * * * * * * 
                * * * * * * * 
                


                【讨论】:

                  【解决方案9】:
                  def pyramid(row):
                         for n in range(row):
                                print(' '*(n+1)+' '*(2*(row-n))+'x'+'x'*(2*n+1))
                  
                  pyramid(row=8)
                  

                  【讨论】:

                    【解决方案10】:

                    我会建议以下功能:

                    def pyramid(rows=8):
                        pyramid_width = rows * 2
                        for asterisks in range(1, pyramid_width, 2):
                            print("{0:^{1}}".format("*" * asterisks, pyramid_width))
                    

                    然后尝试:

                    pyramid()
                    

                    或与:

                    pyramid(4)
                    

                    【讨论】:

                      【解决方案11】:

                      或者你可以试试:

                      def pyramid(size=8):
                          for i in range(size):
                              row = '*'*(2*i+1)
                              print row.center(2*size)
                      

                      【讨论】:

                        【解决方案12】:

                        这段代码不是很pythonic,但它是可读的。查看 Hugh Bothewell 对紧凑型金字塔绘图功能的回答:

                        def drawPyramid(rows):
                          result = ''
                        
                          for i in xrange(rows):
                            row = ''
                            row += ' ' * (rows - i - 1)
                            row += '*' * (2 * i + 1)
                        
                            result += row + '\n'
                        
                          return result
                        
                        print drawPyramid(20)
                        

                        【讨论】:

                        • 谢谢!尽管这与我的问题无关,但我注意到“pythonic”这个词,我很好奇。是否有一本关于如何编写更 Pythonic 的代码的好书(或指南)?写更多 Python 可能是答案,但我想我会问。 :) 我似乎尝试在 Python 中编写的所有内容总是像我在尝试使用类 C 语言进行编码一样,而且我认为这就是我遇到一些麻烦的部分原因,只是一个猜测。再次感谢!
                        【解决方案13】:
                        def pyramid(rows=8):
                            for i in range(rows):
                                print ' '*(rows-i-1) + '*'*(2*i+1)
                        
                        pyramid(8)
                               *
                              ***
                             *****
                            *******
                           *********
                          ***********
                         *************
                        ***************
                        
                        pyramid(12)
                                   *
                                  ***
                                 *****
                                *******
                               *********
                              ***********
                             *************
                            ***************
                           *****************
                          *******************
                         *********************
                        ***********************
                        

                        【讨论】:

                        • 哇,print ' '*(rows-i-1) + '*'*(2*i+1) 这行肯定有很多作用!这真是太酷了。 :) ...而我在程序中“做”的变量是......没想到那样使用它。感谢您的回复,非常感谢!
                        【解决方案14】:

                        你可以像这样使用字符串乘法:

                        >>> for i in range(size):
                        ...     print '%s%s'%(' '*(size-(i-1)),'*'*((i*2)-1))
                        ...
                        

                        【讨论】:

                          猜你喜欢
                          • 1970-01-01
                          • 2015-03-30
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          相关资源
                          最近更新 更多