打印一个边长为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 #  用到了对称性解决问题,只不过体现不出来

 

转载于:https://www.cnblogs.com/JerryZao/p/9404346.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值