4. 自定义 Triangle 模块
编写一个模块 Triangle,包含以下三个函数:
isValid(side1, side2, side3): 输入三条边长度,判断是否组成三角形;
perimeter(side1, side2, side3): 输入三条边长度,求三角形周长;
area(side1, side2, side3): 输入三条边长度,求三角形面积。
自行设计主程序验证模块是否编写正确。
(1)大致思路
①isValid(side1, side2, side3)
先判断三边长度是否为大于零的数值,如果假则返回false。再通过对三条边进行两边之和是否大于第三边。如都满足则返回true,否则返回false。
②perimeter(side1, side2, side3)
直接返回三边长度之和即可
③area(side1, side2, side3)
可以通过海伦公式计算面积并返回:
其中,p为半周长,a,b,c分别为三边长度。
(2)代码实现
Triangle.py:
在模块文件中定义三角形的各个函数。
# 判断能否构成三角形 def isValid(a, b, c): if a <= 0 or b <= 0 or c <= 0: return False if a+b <= c: return False if a+c <= b: return False if c+b <= a: return False return True # 获取周长函数 def perimeter(a, b, c): return a+b+c # 获取面积函数 def area(a, b, c): # 海伦公式 p = (a+b+c)/2 return (p*(p-a)*(p-b)*(p-c))**0.5
主函数:
# 引入自定义三角形模块 import Triangle # 获取输入 a = eval(input("Please input the first number: ")) b = eval(input("Please input the second number: ")) c = eval(input("Please input the third number: ")) if Triangle.isValid(a, b, c): # 如果是三角形则计算周长和面积 print(a, b, c, "can form a triangle") print("The circumference of the triangle is", Triangle.perimeter(a, b, c)) print("The area of the triangle is", Triangle.area(a, b, c)) else: # 输出不能组成三角形的信息 print(a, b, c, "cannot form a triangle")
首先引入三角形模块,获取了三边长度的输入之后对三边长度进行判断,如果不能构成三角形,则给出提示信息。如果能构成三角形则给出提示信息的同时输出三角形的周长和面积。
(3)运行并测试
①如果输入的数据不能构成三角形,则给出提示:
5. 海龟绘图
自学 Python 自带的 turtle 模块,完成以下两个任务:
1)仔细阅读代码 exp2.5_example.py 并运行,回答以下问题:
A. 运行代码后,你看到了什么?
运行代码后可以看到一个小人发射出爱心的图形:
B. 解释以下函数的含义:
up(), down(), goto(), circle(), forward(), right(), left(), speed()
①up()
将画笔抬起,移动时不画线
②down()
将画笔落下,移动时画线
③goto()
goto(x, y=None)
其中,x为一个数值或数值对/向量,y为可缺省的一个数值。
如果 y 缺省,x 应为一个表示坐标的数值对或 Vec2D 类对象 (例如 pos() 返回的对象).
此函数将海龟移动到一个绝对坐标。如果画笔已落下将会画线。不改变海龟的朝向。
例如:
tp = turtle.pos()
tp
(0.00,0.00)
turtle. goto (60,30)
turtle.pos()
(60.00,30.00)
④circle()
turtle.circle(radius, extent=None, steps=None)
参数
radius:一个数值,表示半径
extent – 一个可缺省数值表示作图角度
steps – 一个可缺省整型数,表示做多边形边数
绘制一个 radius 指定半径的圆。圆心在海龟左边 radius 个单位;extent 为一个夹角,用来决定绘制圆的一部分。如未指定 extent则绘制整个圆。如果 radius 为正值则朝逆时针方向绘制圆弧,否则朝顺时针方向。最终海龟的朝向会依据 extent 的值而改变。
圆实际是以其内切正多边形来近似表示的,其边的数量由 steps 指定。如果未指定边数则会自动确定。此方法也可用来绘制正多边形。
a. 若extent和steps都缺省则直接做完整的圆:
import turtle turtle.circle(100) turtle.done()
b.若steps缺省则做不完整的圆,extend值表示做圆的所对圆心角:
import turtle turtle.circle(100,270) turtle.done()
c. 若都不缺省,则做以steps为边数的,以extend为角度的多边形
⑤forward()
forward(distance)
distanc为一个数值 (整型或浮点型)。表示海龟前进 distance 指定的距离,方向为海龟的朝向。
例如:
turtle.position() (0.00,0.00) turtle.forward(25) turtle.position() (25.00,0.00)
⑥right()
right(angle) angle为一个数值 (整型或浮点型)
海龟右转angle个单位。
例如:
turtle.heading() 22.0 turtle.right(45) turtle.heading() 337.0
⑦left()
turtle.left(angle) angle为一个数值 (整型或浮点型)
turtle.heading() 22.0 turtle.left(45) turtle.heading() 67.0
⑧speed()
speed(speed=None)
参数:speed为一个 0~10 范围内的整型数或速度字符串
如果设置海龟移动的速度为 0~10 表示的整型数值。如未指定参数则返回当前速度。
如果输入数值大于 10 或小于 0.5 则速度设为 0。速度字符串与速度值的对应关系如下:
“fastest”: 0 最快 “fast”: 10 快 “normal”: 6 正常 “slow”: 3 慢 “slowest”: 1 最慢
速度值从 1 到 10,画线和海龟转向的动画效果逐级加快。
例如:
turtle.speed() 3 turtle.speed(‘normal’) turtle.speed() 6 turtle.speed(9) turtle.speed() 9
2)用 turtle 模块作出一幅你满意的画。
我们要通过Python自带的turtle包画一个八卦的样子:
①首先定义画笔,并进行填充
import turtle turtle.speed(10) turtle.pensize(4) turtle.color('black', 'black') turtle.begin_fill()
②画出右侧中间的圆
# 右侧中圆 turtle.circle(50, 180)
③画出左侧大圆
# 左侧大圆 turtle.circle(100, 180)
④画出左侧中圆
# 左侧中圆 turtle.left(180) turtle.circle(-50, 180) turtle.end_fill() turtle.color('white', 'white') turtle.begin_fill()
⑤画出上面的小圆
# 下小圆 turtle.left(90) turtle.penup() turtle.backward(70) turtle.pendown() turtle.left(90) turtle.circle(15) turtle.end_fill()
⑦画出右侧大圆
# 右大圆 turtle.right(90) turtle.up() turtle.backward(65) turtle.right(90) turtle.down() turtle.circle(100, 180) turtle.done()
运行并展示最终效果如下