上节课我们讲了Python中的内置函数。除了内置函数外,还有很多非常有用的函数都放在一些内置标准库中,我们需要引入这些库后才可以使用,这里我们挑一些非常常用的内置库给大家讲解。我们正式进入这节课的内容吧。
一、math库
从math库的名字,我们就可以看出来这里面的函数都是跟数学计算相关的函数。很多时候我们做一些计算的时候需要引入math库。考虑到部分函数超出小学和初中阶段知识的范围,我这里做一些简单的讲解。
1.1math库中的常量
在math库中定义了几个数学上的常量,分别是math.pi、math.、math.inf、math.nan。我们分别介绍一下这几个常量。
math.pi就是圆周率,数学上写作π,在数学课上老师让大家记忆π≈3.14,在Python中它的精度高一些,取值为3.
importmathmath.pi3.
math.是自然对数,对数的概念在高中数学上会讲到,这里做一个了解。在数学上写作,≈2.。在Python中取值为2.281828459
importmathmath.2.281828459
math.inf是无穷大,无穷大的概念在大学高等数学里面会讲到,数学上写做∞,它不是一个我们正常看到的数字。math.nan代表非合法浮点数,也是一个抽象的数。这两个常量仅仅做一个了解,它们的类型都是浮点数。
importmathmath.infinftyp(math.inf)classfloatmath.nannantyp(math.nan)classfloat
1.2floor()函数和cil()函数
floor()函数和cil()函数分别对应我们数学上学到的取近似值的“去尾法”和“进一法”,参数为一个浮点数,返回值为一个整数。
importmathmath.floor(3.8)3math.floor(3.2)3math.cil(3.8)4math.cil(3.2)4
在解决实际问题时,我们经常需要用到“去尾法”和“进一法”。比如说船的荷载重量÷体重=限载人数,我们需要去尾;水果数量÷每筐放的水果数量=需要筐子的数量,我们需要进一。
1.3sqrt()函数
sqrt()函数可以计算一个数的平方根,平方根是初中数学的知识。如果小学阶段接触到这个知识,可以理解为已知一个正方形的面积,求正方形的边长。比如,面积为9㎡的正方形,边长是3m;面积为3㎡的正方形,边长≈1.m。
我们看具体的使用:
importmathmath.sqrt(4)2.0math.sqrt(2)1.
1.4radians()函数和dgs()函数
了解这两个函数之前,我们先要了解一下弧度的概念。在小学和初中阶段,一个角的大小我们都是使用角度表示的。一周是°,一条直线是°,直角是90°……角的大小还有另一种单位,叫做弧度。在弧度制中,一周是2π,一条直线是π,直角是π/2。radians()函数时将角度转换为弧度、dgs()函数是将弧度转换为角度。
我们看具体的使用:
importmathmath.radians(90)1.math.radians()3.math.dgs(math.pi).0math.dgs(math.pi/2)90.0
1.5sin()函数、cos()函数和tan()函数
这三个函数分别叫正弦、余弦、正切,都是三角函数。初中的同学在数学课可能已经学过这个函数,没学过的不要紧,这里做一个简单的介绍。
一个直角三角形,一个角的大小相同的情况下,三条边之间的比值也是固定的。与角相对的直角边称为对边、与角相邻的直角边称为邻边、与直角相对的边称为斜边
sin()-正弦:对边与斜边长度的比值
cos()-余弦:邻边与斜边长度的比值
tan()-正切:对边与邻边长度的比值
这三个函数的使用非常简单,但是要注意,参数是角的弧度值,不是角度值。如果我们知道的是角度,还要使用radians()函数做转换。
importmathmath.sin(math.radians(30))0.math.cos(math.radians(30))0.math.tan(math.radians(30))0.
这三个函数在有数学基础,并且熟练掌握turtl画图的情况下,可以画出很多复杂漂亮的图形。
math库中除了以上函数外,还有pow()函数与内置函数pow()完全相同,fabs()函数可以计算绝对值,与内置函数abs()的区别在于math库中的fabs()的返回值永远为浮点数。其他关于求阶乘、最小公约数、最大公倍数等等函数使用较少这里不做讲解了,有兴趣的同学可以自己查看官方文档。还有求对数、自然对数等等超出初中阶段数学知识太多,这里也不做讲解了。
二、random库
random库是一个用于生成随机数的内置库,当我们程序中需要使用到随机取一个数的值的时候,我们就需要用到这个库。随机数有很多种不同的取法,分别使用不同的函数来实现。这里面我们来做一个介绍。
2.1random()函数
random()函数可以生成一个0.0到1.0之间的随机小数。我们看一下它的使用:
importrandomasrr.random()0.r.random()0.
每次使用得到的随机数都不一样。
2.2randint()函数
randint()函数可以生成一个区间在a和b两个数之间的随机整数。函数需要给两个参数,开始值和结束值。随机数的取值范围包含开始值和结束值。我们看它的使用方法:
importrandomasrr.randint(1,10)5r.randint(1,10)5r.randint(1,10)4r.randint(1,10)7
2.3randrang()函数
randrang()函数可以在a和b之间以一定步长取随机整数。函数必须给两个参数,起始值和结束值,第三个参数步长为可选参数,默认值为1。随机数的取值范围包含开始值不包含结束值。我们看它的用法:
importrandomrandom.randrang(0,,10)20random.randrang(0,,10)70random.randrang(0,,10)40
2.4uniform()函数
uniform()函数可以生成在区间a和b之间的随机浮点数。函数需要给定两个参数,起始值和结束值。随机数的取值范围包含开始值和结束值。我们看它的使用方法:
importrandomrandom.uniform(1,)63.29831379003random.uniform(1,)47.39random.uniform(1,)49.68
2.5choic()函数
choic()函数可以从序列中随机选取元素。函数的参数为一个可迭代对象。我们看它的用法:
importrandoma=[2,3,4,5,6,7,8]random.choic(a)2random.choic(a)7random.choic(a)3
2.6shuffl()函数
shuffl()函数可以将序列进行随机打乱次序。函数的参数为一个列表。我们看它的用法:
importrandoma=[2,3,4,5,6,7,8]random.shuffl(a)print(a)[2,7,3,4,8,6,5]random.shuffl(a)print(a)[7,6,3,4,5,8,2]
2.7sd()函数
sd()函数可以生成一个随机数的种子,我们生成随机数可以不生成种子,系统会自动以系统时间作为种子。如果我们指定了随机数种子,种子相同的情况下生成的随机数也相同。我们看具体的例子:
importrandomrandom.sd(1)#种子为1random.random()0.random.sd(2)#种子为2random.random()0.956034289random.sd(1)#种子为1random.random()0.
从上面的代码中我们可以看出,当种子相同时,生成的随机数也是相同的。
三、综合应用实例
刚刚讲了这么多,我们结合随机库、海龟画图和函数递归调用,可以画出非常漂亮的画。而且程序每次运行后画出来的画都不一样哦!我们来看一下樱花树的例子:
importrandomimportturtl__Pn=turtl.Pn()#“画树”函数#参数分别是树枝长度、画笔dft(branchLn,t):if(branchLn3):if(8=branchLnandbranchLn=12):if(random.randint(0,2)==0):t.pncolor(snow)ls:t.pncolor(lightcoral)t.pnsiz((branchLn/3))lif(branchLn8):if(random.randint(0,1)==0):t.pncolor(snow)ls:t.pncolor(lightcoral)t.pnsiz((branchLn/2))ls:t.pncolor(sinna)t.pnsiz((branchLn/10))t.forward(branchLn)a=(1.5*(random.random()))t.right((20*a))b=(1.5*(random.random()))t(branchLn-10*b,t)t.lft((40*a))t(branchLn-10*b,t)t.right((20*a))t.pnup()t.backward(branchLn)t.pndown()#绘制树下花瓣,参数分别是画板数、画笔dfptal(m,t):foriinrang(m):a=(-*(random.random()))b=(10-20*(random.random()))t.pnup()t.forward(b)t.lft(90)t.forward(a)t.pndown()t.pncolor(lightcoral)t.circl(1)t.pnup()t.backward(a)t.right(90)t.backward(b)dfmain():t=turtl.Pn()__Pn.hidturtl()t.spd(0)turtl.bgcolor(what)t.lft(90)t.pnup()t.backward()t.pndown()t.pncolor(sinna)t(60,t)ptal(,t)turtl.don()main()
四、课后思考题
1、编程题
编写一个猜数字的游戏。程序随机生成一个1到之间的整数。用户输入一个整数,根据用户输入输入的数字并提示“猜大了”或者“猜小了”。用户输入正确答案时提示“恭喜你猜对了”,程序运行结束。
2、编程题
使用海龟画图在屏幕的任意位置画五角星,五角星的个数为20个。五角星每条边的长度为30到80之间的随机数;五角星的线条颜色为红色(d)、绿色(gn)、*色(yllow)、紫色(violt)、蓝色(blu)、紫罗兰(purpl)、麦*色(what)、橙色(orang)中的随机一种颜色。
五、上节课思考题答案
1、C
2、错(返回值类型是元组,不是列表)
3、参考代码:
dftransit(licns):last=licns[-1]turn(last!=1andlast!=6)licnss=[省A,省A,省A,省A,省A,省A]trans=list(filtr(transit,licnss))print(trans)
4、参考代码:
dfdoubl(n):turn2*ns=list(map(int,input().split()))ds=list(map(doubl,s))print(ds)