1 # coding=gbk
2 n = int(input("请输入该正方向的边长:"))
3 print('*'*n)
4 for i in range(n-2):
5     print('*',' '*(n-2),'*')
6 print('*'*n)

首先看需求,打印一个边长为n的正方形,那么如何显示呢?我们可以用*符号来当做图形显示,横着n个*,竖着n个*,中间填充空格,那么就是我们所需要的结果。(这里不考虑显示行间距的问题)。

然后我们就开始程序的设计,既然是正方形,那么第一行肯定是n个*,那就print('*'*n),这就是连续输出n个*。正方形还有竖着的两个边,那么怎么考虑呢?从整体上看,竖着是n个*,那么让其开头一个*,结尾一个*,中间都是空格,以该模式来个n-2行是不是就能实现了呢?(n-2是因为首尾两行都是*),因此有了程序中的for循环,print('*',' '*(n-2),'*'),打出是*     *这种格式,如下图所示。

 

再来看看另一种实现方式:

试想一下,正方形的直观印象,第一行与最后一行的格式是* * * * *这种,而其余的中间行是*        *这种格式,那么我们是不是可以将这两种不同的格式作为两个整体,然后重复使用呢?如上图代码所示,设定a和b变量都是*,因为每行的第一个符号都得是*,进入for循环得出一行的格式,得出a的格式是* * * * *,得出b的格式是*     ,这里要注意的是b的格式并不完整,因此在得到*     ,之后需要使用else再给b格式后面加上*得到*     *这个预期的格式。

分别得到a和b这两种格式,我们来组合整个图形的输出,c = a + '\n' + (b + '\n')*(n-1) + a,第一行格式a+换行+(n-1)个b格式+换行+最后一行格式a,可得出需求的图案。在这里,要注意换行符的使用,也可以写成下图所示的格式。

02-13 21:39