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 # 用到了对称性解决问题,只不过体现不出来