打印一个边长为n的正放形

 1 方法一:
 2 n = int(input('输入边长:'))
 3 for i in range(1, n+1):
 4     for j in range(1, n+1):
 5         if i == 1 or j == 1 or i == n or j == n:
 6             print('*', end=' ')
 7         else:
 8             print(' ', end=' ')
 9     print()
10 
11 
12 输入边长:8
13 * * * * * * * * 
14 *                 * 
15 *                 * 
16 *                 * 
17 *                 * 
18 *                 * 
19 *                 * 
20 * * * * * * * *
 1 方法二: 我自己写的,有点啰嗦,for循环会影响执行效率
 2 n = 6
 3 for j in range(n):
 4     if j == 0 or j == n-1:
 5         for i in range(n):
 6             print('*',end=' ')
 7     else:
 8         for i in range(n):
 9             if i >0 and i < n-1:
10                 print(' ',end=' ')
11             else:
12                 print('*',end=' ')
13     print()
14 
15 
16 * * * * * * 
17 *            * 
18 *            * 
19 *            * 
20 *            * 
21 * * * * * * 

注:以上两种,就是分开处理首行和末行

方法三:
n = 5 
for i in range(n):
    if i % n == 0 or i % (n-1) == 0:
        print('*' * n)
    else:
        print('*' + ' ' *  (n-2) +  '*')

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

# i == 0 或 i== 4的时候,正好是首行,末行,所以, i =0 时,取模 n =0
# i= 4时 ,i到了第五行了, 此时 i= n-1 所以可以作为条件 判断是否是第五行。
1 方法四:
2 
3 n = 5 
4 print('*' * n) # 第一行
5 for i in range(n-2):
6     print('*' + ' ' * (n-2) + '*')
7 print('*' * n)  # 最后一行

 

 1 方法5:
 2 n = 5
 3 e = -(n//2) # -2
 4 for i in range(e,n+e): # 【-2,2】
 5     if i == e or i == n+e-1:
 6         print('*'*n)
 7     else:
 8         print('*' + ' '*(n-2) + '*')
 9 
10 *****
11 *      *
12 *      *
13 *      *
14 *****
15 
16 #  用到了对称性解决问题,只不过体现不出来

 

posted @ 2018-08-01 22:27  JerryZao  阅读(313)  评论(0编辑  收藏  举报