1.模块概述
举个例子来形容一下模块,我们在准备一个新房的时候,我们会在里面置备一些物品,例如电饭煲、微波炉、电话、电脑等,电饭煲为我们提供煲饭、煲粥、蒸米饭等功能,微波炉为我们提供低温加热、中温加热、高温加热等功能,手机为我们提供接电话、打电话、存号码等功能、电脑为我们提供编程、查阅资料、网络维护等功能。如果我们再买来一台榨汁机,榨汁机为我们提供了榨果汁、做奶昔、做果酱等功能。
我们可以把电饭煲、微波炉、电话、电脑等最初就在家中准备好的物品看作是内部模块,我们在家中就可以直接使用它们的功能,也就是说我们只要把这个物品拿出来我们就可以使用,而后来买的榨汁机,我们可以看作是我们从第三方库中引入的模块,我们只要从第三方库中买来之后,我们才可以拿出来使用它的一系列功能。
我们总结一下,内部模块就是存储在内部可以直接调用的模块,调用了这个模块我们就可以使用它的功能,而第三方库中的模块则是需要我们先下载,下载完之后我们才可以调用来使用。
import random#从系统库中引入这个模块
test = random.randint(1,10)#使用random模块中的randint()方法
print('生成一个随机数:',test)
当我们使用模块中的功能时一定要先引入这个模块,如果不引入会出现下面的情况:
1.1 模块的调用方式
a、 import 模块名
这种方式就是我们常用的调用方式,直接调用了模块中的所有方法,我们可以直接在程序中使用。
当我们调用了random之后,我们在使用的时候可以看到它所包含的一系列方法。如下图。
b、 import 模块名 as 别名
import math as t
test = t.cos(2.5)
print(test)
这种方式等同于给这个模块又取了一个名字,我们可以通过这个别名来使用模块中的方法。
c、 from 模块名 import 函数名
这种方式仅仅调用了模块中的一个函数,我们在使用这函数的时候可以直接使用。
from random import randint
test = randint(1,10)
print(test)
总结:
一般来说我们会采用第三种方式去使用某一种方法,避免我们的程序中因为变量名和模块中的名字相同而出现错误
2.自定义模块
- 我们引入的模块通常有三种类型,一种是系统库中存在的模块,一种是第三方模块,最后一种就是我们自己定义来的模块。
- 当我们在写一个程序的时候,为了避免一个主程序的代码过于复杂,我们会将一些函数或功能写在单独的文件中,然后通过主程序调用这些自己定义的模块,我们自己定义的模块注意扩展名要以.py结尾。
发牌游戏来学习自定义模块 : 4个人玩牌,电脑随机将52张牌(不含大小王)发给4个人,在屏幕上显示每位牌手的牌。 分析:
- 52张牌,按梅花0-12,方块13-25,红桃26-38,黑桃39-51顺序编号并存储在pocker列表中(未洗牌之前)。
- 定义一个洗牌功能,随机产生两个位置索引,交换两个牌的位置,进行100次随机交换,达到洗牌的目的。
- 发牌时,交换后pocker列表,按顺序加到四个牌手的列表中。
- 52张牌发给4个人,每人13张,13轮循环,每次循环发给四个人。
- 每人发一张牌的动作一样,用函数main实现。
- 发一张牌的动作可以包含两部分:获取花色,获取数值,分别用get_color和get_value实现。
2.1 创建模块
首先完成获取颜色的模块及其函数:【 模块名为getcolor.py】
def get_color(n):
if n<13:
return '梅花'
elif n<26:
return '方块'
elif n<39:
return '红桃'
else:
return '黑桃'
接下来创建获取值的模块及其函数:【getvalue.py】
def get_value(n):
if n==0 or n==13 or n==26 or n==39:
return 'A'
elif n==12 or n==25 or n==38 or n==51:
return 'K'
elif n==11 or n==24 or n==37 or n==50:
return 'Q'
elif n==10 or n==23 or n==36 or n==49:
return 'J'
else:
return n%13
2.2 调用模块
import random
from getcolor import get_color
from getvalue import get_value
n = 52 # 一共52张牌
def gen_pocker(n):
random.shuffle(n)
return n
def main():
List = [] # 代表一副牌,现在表示还没有牌,只是一个牌盒
List1 = [] # 定义4个牌手
List2 = []
List3 = []
List4 = []
# 洗牌
for i in range(0, 52):
List.append(i) # 按顺序往牌盒中放入52张牌
List = gen_pocker(List) # 将牌盒中的牌打乱顺序
# 发牌
for i in range(0, 52): # 实现发牌
if i < 13: # 打乱后的前13张牌发给牌手1,实现牌手1手牌中如何含有花色和数字
List1.append(get_color(List[i]) + str(get_value(List[i])))
elif i < 26:
List2.append(get_color(List[i]) + str(get_value(List[i])))
elif i < 39:
List3.append(get_color(List[i]) + str(get_value(List[i])))
else:
List4.append(get_color(List[i]) + str(get_value(List[i])))
# 显示牌
print(List)
print("牌手1", List1)
print("牌手2", List2)
print("牌手3", List3)
print("牌手4", List4)
if __name__ == '__main__':
main()
在这个题中,我们采用的是导入模块的第三种方式,直接引入模块的函数功能。
3.math模块
Python的math模块为我们提供了一系列关于数学方面的功能,可以帮助我们进行指数、对数、平方根、三角函数等运算。
3.1 幂和对数
我们在求某个数的平方根或者是平方和又或者是幂运算的时候,往往要借助math模块。
- 取对数运算
math.log(x[,底数]),这种方式会返回一个以基数为底的x的对数,如果省略底数就是以2为底。
import math
a = math.log(144,12)
b = math.log(36,6) # 6^2=36
print(a)
print(b)
- 取平方根运算
math.sqrt(x),返回x的平方根。
import math
a = math.sqrt(16)
b = math.sqrt(256)
print(a)
print(b)
- 取幂运算
pow(x,y),返回的是x的y次幂。
import math
a = math.pow(2,4)
b = math.pow(10,3)
print(a)
print(b)
3.2 三角函数
三角函数的使用和上面的用法类似。
三角正弦值:math.sin(x)
三角余弦值:math.cos(x)
三角正切值:math.tan(x)
弧度的反正弦:math.asin(x)
弧度的反余弦:math.acos(x)
弧度的反正切:math.atan(x)
如果是将弧度转换为角度或者将角度转换为弧度,采用下面的用法。
弧度转角度:math.degress(x)
角度转弧度:math.radinans(x)
import math
a = math.sin(30)
b = math.cos(30)
c = math.tan(30)
d = math.asin(0.6)
e = math.acos(0.6)
f = math.atan(0.6)
g = math.degrees(2 * math.pi)
h = math.radians(360 / math.pi)
print(a)
print(b)
print(c)
print(d)
print(e)
print(f)
print(g)
print(h)
需要注意的是我们在Python里使用math.pi来表示‘π’。
3.3 舍入函数
- math.ceil(x):返回大于x或等于x的最小整数。
- math.floor(x):返回小于x或等于x的最大整数。
- 同时在Python中有一个内置函数round(x)为我们提供四舍五入的操作。
import math
a = math.ceil(3.5) # 返回大于x或等于x的最小整数。
b = math.floor(3.5) #返回小于x或等于x的最大整数。
c = round(3.5)
d = round(3.4)
print(a)
print(b)
print(c)
print(d)
- math模块中的函数只适用于整数和浮点数
- 如果是复数的话我们要采用cmath模块
- math模块是系统内置的模块,在设计到数学运算的时候我们可以直接进行引入并使用。
4.random模块
random模块主要为我们提供一些生成随机数的功能,下面表格总结了random模块中几个常用函数。
4.1 random.random()
import random
# random.random() 生成一个[0,1)的实数。
a = random.random()
b = random.random()
c = random.random()
print(a)
print(b)
print(c)
返回的浮点数的值和位数都不一定相同。
4.2 random.randint(a,b)
randint是包含a和b,相当于【】,可以取到a和b
import random
a = random.randint(1,3)
b = random.randint(1,3)
c = random.randint(1,3)
print(a)
print(b)
print(c)
4.3 random.randrange(a,b)
import random
a = random.randrange(1,3)
b = random.randrange(1,3)
c = random.randrange(1,3)
d = random.randrange(1,3)
print(a)
print(b)
print(c)
print(d)
通过测试结果我们可以看出只有1和2,是不包含下界3的
4.4 random.shuffle(x)
它可以将一个序列进行重新排序,但是需要注意,它只针对于可改变的序列,因此它常被用于打乱列表中的元素。
import random
a = ['d','o','t','c','p','p']
print('打乱前的列表:',a)
random.shuffle(a)
print('打乱后的列表:',a)
4.5 random.choice(x)
random.choice(x)可以返回一个序列中的一个随机元素
import random
a = ['d','o','t','c','p','p']
b = 'dotcpp'
c = ('d','o','t','c','p','p')
print(random.choice(a))
print(random.choice(b))
print(random.choice(c))
4.6 random.uniform(a,b)
用于生成指定范围内的随机浮点数
import random
a = random.uniform(1.1,3.3)
b = random.uniform(5,6)
c = random.uniform(100,200)
print(a)
print(b)
print(c)
5.datetime模块
当我们在Python中需要使用到时间的时候,有两个关于时间的模块,分别是time和datetime。
- time模块偏底层,在部分函数运行的时候可能会出现不同的结果,
- 而datetime模块提供了高级API,使用起来更为方便,我们通常在使用的时候会涉及到包含时间和日期的datetime、只包含日期的date以及只包含时间的time
5.1 datetime
5.1.1 datetime.datetime.now()
import datetime
t = datetime.datetime.now()#返回当前日期及时间
print(t)
5.1.2 date()
import datetime
t = datetime.datetime.now()#返回当前日期及时间
print(t.date())#输出当前的日期
5.1.3 time()
import datetime
t = datetime.datetime.now()#返回当前日期及时间
print(t.time())#输出当前的时间
5.1.4 utctimetuple()
返回UTC时间元组
import datetime
t = datetime.datetime.now()#返回当前日期及时间
print(t.utctimetuple())#输出当前的日期
5.2 date
date对象是日期的专属对象,语法格式如下:
datetime.date(year,month,day) #参数分别代表年月日。
5.2.1 datetime.date.today()
import datetime
t = datetime.date.today()#返回当前日期
print(t)
5.2.2 datetime.date.fromtimestamp()
import datetime
import time
c = time.time()#返回当前的时间戳
print('当前的时间戳为:',c)
t = datetime.date.fromtimestamp(c)#与时间戳对应的日期
print('当前时间戳对应的日期为:',t)
这个例题中我们先引入了time模块中的方法,time模块中的time.time()能返回当前时间戳,然后我们使用上面的方法可以返回与时间戳对应的日期。
5.3 time
time类中包含了一整天的信息,语法结构如下:
datetime.time(hour,moniute,second,microsecond,tzinfo=None)
import datetime
t = datetime.time(19,42,34,12)
print(t)
由于datetime模块中封装了time模块,所以我们使用datetime模块可以保证数据更为精确,在使用过程中也可以穿插着time模块中的部分功能,例如暂停time.sleep()等方法。
6.第三方模块
6.1 安装
6.1.1 cmd中安装
在安装第三方模块之前我们可以先进行查看,看看我们计算机中已安装的第三方模块有哪些,首先要进入cmd界面,快捷进入方式,按左下角的win+r,然后输入cmd并回车,进入下面的页面,然后输入pip list查看。
第三方模块的下载,下载命令为:
pip install 模块名
当我在下载的时候出现下面图中的问题:
也就是说我的pip版本过低,需要让我更新一下pip的版本,那么我们就输入python -m pip install --upgrade pip进行pip的更新,更新如下图:
这样就显示我们已经安装成功并可以使用该模块中的一些功能。
6.1.2 Pycharm中安装
在Pycharm中安装第三方插件就简单了很多,我们直接点击Pycharm的左上角【File】键,然后在里面找到并打开【Settings】,进入如下页面,然后我们可以进行模块的下载,点击最右边的‘+’按钮, 点击下面的按钮到最后显示安装成功即可。
这里的【demo】是 我建立的项目
6.1.3 Pycharm实例中安装
6.2 卸载
卸载命令:
pip uninstall numpy