前言:本文《打印图形》专练的编写是为了帮助学生进一步理解掌握循环嵌套算法的设计编写,重点是学会分析循环变量之间的关系
文章目录- 1、矩形
- 2、直角三角形1
- 3、直角三角形2
- 4、直角三角形3
- 5、直角三角形4
- 6、等腰三角形1
- 7、等腰三角形2
- 8、菱形三法(三种方法都得会)
- 9、圆形
1、矩形
打印图形如下 ****** ****** ****** ****** ****** ******
标程如下:
for i in range(6):
for j in range(6):
print("*",end="")
print()
2、直角三角形1
打印图形如下 * ** *** **** ***** ******
提示:本题外层循环变量取值建议从1开始,如从0开始,那么内层循环则需从-1开始数
for i in range(1,7):
for j in range(i):
print("*",end="")
print()
3、直角三角形2
打印图形如下 ****** ***** **** *** ** *
提示:列出内外循环变量的关系
| i | j |
|---|---|
| 1 | 6 |
| 2 | 5 |
| 3 | 4 |
| 4 | 3 |
| 5 | 2 |
| 6 | 1 |
从上表中可以看出j=7-i,代码如下
for i in range(1,7):
for j in range(7-i):
print("@",end="")
print()
4、直角三角形3
打印图形如下
*
**
***
****
*****
******
提示:本题仍然是打印6行“ * ”,但是每行先要打印空格,再打印“ * ”,故代码框架如下:
for i in range(1,7):
#循环打印空格
for k in range(_____):
print(" ",end="")
#循环打印*
for j in range(_____):
print("*",end="")
print()
再列出内外循环变量的关系
| i | 空格k | 星号j |
|---|---|---|
| 1 | 5 | 1 |
| 2 | 4 | 2 |
| 3 | 3 | 3 |
| 4 | 2 | 4 |
| 5 | 1 | 5 |
| 6 | 0 | 6 |
从上表中可以看出:
k=6-i
j=i
故代码如下:
for i in range(1,7):
#循环打印空格
for k in range(6-i):
print(" ",end="")
#循环打印*
for j in range(i):
print("*",end="")
print()
5、直角三角形4
打印图形如下
******
*****
****
***
**
*
列出内外循环变量的关系
| i | 空格k | 星号j |
|---|---|---|
| 1 | 0 | 6 |
| 2 | 1 | 5 |
| 3 | 2 | 4 |
| 4 | 3 | 3 |
| 5 | 4 | 2 |
| 6 | 5 | 1 |
从上表中可以看出:
k=i-1
j=7-i
故代码如下:
for i in range(1,7):
#循环打印空格
for k in range(i-1):
print(" ",end="")
#循环打印*
for j in range(7-i):
print("*",end="")
print()
6、等腰三角形1
打印图形如下
*
***
*****
*******
*********
***********
再列出内外循环变量的关系
| i | 空格k | 星号j |
|---|---|---|
| 1 | 5 | 1 |
| 2 | 4 | 3 |
| 3 | 3 | 5 |
| 4 | 2 | 7 |
| 5 | 1 | 9 |
| 6 | 0 | 11 |
从上表中可以看出:
k=6-i
j=2*i-1
故代码如下:
for i in range(1,7):
#循环打印空格
for k in range(6-i):
print(" ",end="")
#循环打印*
for j in range(2*i-1):
print("*",end="")
print()
7、等腰三角形2
打印图形如下
***********
*********
*******
*****
***
*
列出内外循环变量的关系
| i | 空格k | 星号j |
|---|---|---|
| 1 | 0 | 11 |
| 2 | 1 | 9 |
| 3 | 2 | 7 |
| 4 | 3 | 5 |
| 5 | 4 | 3 |
| 6 | 5 | 1 |
从上表中可以看出:
k=i-1
j=13-2*i
故代码如下:
for i in range(1,7):
#循环打印空格
for k in range(i-1):
print(" ",end="")
#循环打印*
for j in range(13-2*i):
print("*",end="")
print()
8、菱形三法(三种方法都得会)
打印图形如下
*
***
*****
*******
*********
***********
*********
*******
*****
***
*
方法一:: 图中可以看出k和j关于第6行对称,列出内外循环变量的关系
| i | 空格k | 星号j | abs(i-6) |
|---|---|---|---|
| 1 | 5 | 1 | 5 |
| 2 | 4 | 3 | 4 |
| 3 | 3 | 5 | 3 |
| 4 | 2 | 7 | 2 |
| 5 | 1 | 9 | 1 |
| 6 | 0 | 11 | 0 |
| 7 | 1 | 9 | 1 |
| 8 | 2 | 7 | 2 |
| 9 | 3 | 5 | 3 |
| 10 | 4 | 3 | 4 |
| 11 | 5 | 1 | 5 |
从上表中可以看出得出关系式:
k=abs(i-6)
j=11-2*abs(i-6)
故代码如下:
for i in range(1,12):
#循环打印空格
for k in range(abs(i-6)):
print(" ",end="")
#循环打印*
for j in range(11-2*abs(i-6)):
print("*",end="")
print()
方法二:因为菱形是对称图形,因此考虑将循环遍历i也取对称值-5至5(range(-5,6)),由此列出内外循环变量的关系
| i | 空格k | 星号j |
|---|---|---|
| -5 | 5 | 1 |
| -4 | 4 | 3 |
| -3 | 3 | 5 |
| -2 | 2 | 7 |
| -1 | 1 | 9 |
| 0 | 0 | 11 |
| 1 | 1 | 9 |
| 2 | 2 | 7 |
| 3 | 3 | 5 |
| 4 | 4 | 3 |
| 5 | 5 | 1 |
从上表中可以看出:
k=abs(i)
j=11-2*abs(i)
故代码如下:
for i in range(-5,6):
#循环打印空格
for k in range(abs(i)):
print(" ",end="")
#循环打印*
for j in range(11-2*abs(i)):
print("*",end="")
print()
方法三:曼哈顿距离:标明两个点在标准坐标系上的绝对轴距总和,例如在平面上,坐标(x1,y1)的i点与坐标(x2,y2)的j点的曼哈顿距离为:
d(i,j)=|X1-X2|+|Y1-Y2|
不难看出,菱形中所有点至中心点(6,6)的曼哈顿距离均小于等于5
标程如下:
for i in range(1,12):
for j in range(1,12):
if(abs(i-6)+abs(j-6)<=5):
print("*",end="")
else:
print(" ",end="")
print()
提示:根据“曼哈顿距离”也可打印出等腰三角形,请同学们自行尝试
9、圆形题目描述:打印一个半径为50的" * "圆形。(勿须使用matplotlib模块来绘图)
提示:与“曼哈顿距离”原理类似
标程如下:
for i in range(1,100):
for j in range(1,100):
if((i-50)**2+(j-50)**2<=50**2):
print("*",end="")
else:
print(" ",end="")
print()
提示:如果屏幕显示不下圆形可以把字体调小,但是打印出来大家可能会看到一个不那么圆滑的“椭圆”(手动滑稽),这是因为“ * ”的输出码(字形码)并非正方形而是一个长方形点阵,而且行与行之间也有一定的间隙。
Python中有专门的绘图库如matplotlib来进行绘图,后续教学中会进行讲解。



