2013-04-16 103 views
0

我的代码来绘制一个填充的正方形:绘制未填充的正方形和三角形在Python

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

它打印(显然依赖于n的值):

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

而一个实心三角:

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

哪个打印(也依赖于N):

* 
** 
*** 
**** 

但我不知道该如何去适应这些画这样一个正方形:

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

或者这样一个三角形:

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

所以每个缺失的星号是通过更换空白字符(即一个空间) 主要背景是无关紧要的。我只需要能够根据用户输入来绘制这四件事情。

回答

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而不是打印来避免多余的空格或换行符。

+0

这是否在python 3中工作?它说“名称”系统没有定义“ – jevans

+0

你必须导入SYS才能正常工作。 – Ecliptica

+0

把'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))) + "*") 


* 
** 
* * 
* * 
* * 
* * 
******* 
+0

谢谢,真的很好。 – jevans

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) 
******** 
*      * 
*      * 
*      * 
*      * 
*      * 
*      * 
********