【问题标题】:Draw Unfilled squares & triangles in Python在 Python 中绘制未填充的正方形和三角形
【发布时间】:2013-04-16 20:14:26
【问题描述】:

我有绘制实心正方形的代码:

for i in range(0,n):
    print(n*"*")

哪些打印(显然取决于 n 的值):

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

还有一个实心三角形:

for i in range(1,n+1):
    print((n-(n-i)) * "*")

哪些打印(也取决于 n):

*
**
***
****

但我不确定如何调整这些来绘制这样的正方形:

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

或者像这样的三角形:

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

这样每个缺失的星号都被一个空白字符(即空格)替换 主要背景无关紧要。我只需要能够根据用户的输入绘制这四样东西。

【问题讨论】:

    标签: python for-loop python-3.x


    【解决方案1】:

    对于广场:

    import sys
    
    for i in range(n):
        for j in range(n):
            if i == 0 or j == 0 or i == n - 1 or j == n - 1:
                sys.stdout.write("*")
            else:
                sys.stdout.write(" ")
        print("")
    

    n = 5 的输出:

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

    对于三角形:

    import sys
    
    for i in range(n):
        for j in range(i+1):
            if j == 0 or j == i or i == n - 1:
                sys.stdout.write("*")
            else:
                sys.stdout.write(" ")
        print("")
    

    n = 5 的输出:

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

    请注意,我使用 sys.stdout.write 而不是 print 以避免额外的空格或换行符。

    【讨论】:

    • import sys放在文件的开头
    【解决方案2】:

    这是三角形的解决方案,有点棘手,你可以自己找出矩形。

    >>> for i in range(0,n+2):
            if i in [0,n+1]:
                    print (i+1)*"*"
            else:
                    print("*" + (" "*(n-1-(n-i))) + "*")
    
    
    *
    **
    * *
    *  *
    *   *
    *    *
    *******
    

    【讨论】:

      【解决方案3】:

      对于三角形:

      In [26]: def hollow_tri(n):
         ....:     print "*"
         ....:     for i in xrange(2,n):
         ....:         print "*{0}*".format(" "*(i-2))
         ....:     print "*"*n
         ....:     
      
      In [27]: hollow_tri(8)
      *
      **
      * *
      *  *
      *   *
      *    *
      *     *
      ********
      
      In [28]: hollow_tri(4)
      *
      **
      * *
      ****
      

      对于方形:

      In [29]: def hollow_square(n):
          print "*"*n
          for i in xrange(2,n):
              print "*{0}*".format(" "*(n-2))
          print "*"*n
         ....:     
      
      
      
      In [30]: hollow_square(4)
      ****
      *  *
      *  *
      ****
      
      
      
      
      In [31]: hollow_square(8)
      ********
      *      *
      *      *
      *      *
      *      *
      *      *
      *      *
      ********
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-08
        • 2014-01-01
        • 2021-10-31
        相关资源
        最近更新 更多