0

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

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

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

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

还有一个实心三角形:

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

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

*
**
***
****

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

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

或者像这样的三角形:

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

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

4

3 回答 3

3

对于广场:

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 以避免额外的空格或换行符。

于 2013-04-16T20:25:21.350 回答
2

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

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


*
**
* *
*  *
*   *
*    *
*******
于 2013-04-16T20:23:53.410 回答
1

对于三角形:

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)
********
*      *
*      *
*      *
*      *
*      *
*      *
********
于 2013-04-16T20:29:52.430 回答