七.python模块(基础)

目录

1. 模块概述

2.创建模块

2.1. 创建模块

2.2. 调用模块并完善主程序

3.math模块

3.1. 冥和对数

3.2. 三角函数

3.3. 舍入函数

4.random模块

5.datetime模块


1. 模块概述

Python中有很多功能强大的模块,这些模块有的存在于Python系统库中,有的存在于第三方库中,这些模块会为我们提供各种各样的功能。

        我们举个例子来形容一下模块,我们在准备一个新房的时候,我们会在里面置备一些物品,例如电饭煲、微波炉、电话、电脑等,电饭煲为我们提供煲饭、煲粥、蒸米饭等功能,微波炉为我们提供低温加热、中温加热、高温加热等功能,手机为我们提供接电话、打电话、存号码等功能、电脑为我们提供编程、查阅资料、网络维护等功能。如果我们再买来一台榨汁机,榨汁机为我们提供了榨果汁、做奶昔、做果酱等功能。

        对于上面的例子,我们可以把电饭煲、微波炉、电话、电脑等最初就在家中准备好的物品看作是内部模块,我们在家中就可以直接使用它们的功能,也就是说我们只要把这个物品拿出来我们就可以使用,而后来买的榨汁机,我们可以看作是我们从第三方库中引入的模块,我们只要从第三方库中买来之后,我们才可以拿出来使用它的一系列功能。我们总结一下,内部模块就是存储在内部可以直接调用的模块,调用了这个模块我们就可以使用它的功能,而第三方库中的模块则是需要我们先下载,下载完之后我们才可以调用来使用。

看下面的示意图:

python模块1

我们再来看一个例子,我们在前面曾多次提到过random模块,在random模块中为我们提供了一系列的功能,我们在这里简单的使用一下这个模块。

1

2

3

import random#从系统库中引入这个模块

test = random.randint(1,10)#使用random模块中的randint()方法

print('生成一个随机数:',test)

输出结果:

1

生成一个随机数: 3

要注意的是,当我们使用模块中的功能时一定要先引入这个模块,如果不引入会出现下面的情况:

1

2

3

4

Traceback (most recent call last):

  File "C:/ts.py", line 2in <module>

    test = random.randint(1,10)#使用random模块中的randint()方法

NameError: name 'random' is not defined

我们在导入了模块名之后就可以使用模块中的所有方法。

下面我们来介绍一下模块的几种调用方式。

       1) import 模块名

这种方式就是我们常用的调用方式,直接调用了模块中的所有方法,我们可以直接在程序中使用。

例如:

python模块2

当我们调用了random之后,我们在使用的时候可以看到它所包含的一系列方法。

       2) import 模块名 as 别名(注意在命名的时候不要使用符号)

1

2

3

import math as t

test = t.cos(2.5)

print(test)

输出结果为:

1

-0.8011436155469337

这种方式等同于给这个模块又取了一个名字,我们可以通过这个别名来使用模块中的方法。

       3) from 模块名 import 函数名

1

2

3

from random import randint

test = randint(1,10)

print(test)

输出结果为:

1

9

这种方式仅仅调用了模块中的一个函数,我们在使用这函数的时候可以直接使用。

如果使用这个模块中的其他方法,则会出现错误信息。


2.创建模块

我们引入的模块通常有三种类型

  1. 一种是系统库中存在的模块,
  2. 一种是第三方模块,
  3. 最后一种就是我们自己定义来的模块。

当我们在写一个程序的时候,为了避免一个主程序的代码过于复杂,我们会将一些函数或功能写在单独的文件中,然后通过主程序调用这些自己定义的模块,我们自己定义的模块注意扩展名要以.py结尾。

本章节我们通过一个发牌游戏来学习自定义模块,题目为:

4个人玩牌,电脑随机将52张牌(不含大小王)发给4个人,在屏幕上显示每位牌手的牌。

问题分析:

1. 52张牌,按梅花0-12,方块13-25,红桃26-38,黑桃39-51顺序编号并存储在pocker列表中(未洗牌之前)。

2. 定义一个洗牌功能,随机产生两个位置索引,交换两个牌的位置,进行100次随机交换,达到洗牌的目的。

3. 发牌时,交换后pocker列表,按顺序加到四个牌手的列表中。

4. 52张牌发给4个人,每人13张,13轮循环,每次循环发给四个人。

5. 每人发一张牌的动作一样,用函数main实现。

6. 发一张牌的动作可以包含两部分:获取花色,获取数值,分别用get_color和get_value实现。

2.1. 创建模块

我们可以采用自定义模块来解决上面的问题,首先我们分析一下我们有几个功能要创建模块,洗牌和发牌这些都是可以放在主程序中的,每张牌的花色和数值我们是可以放在模块中的,那么我们就先来创建2个模块来完成这两个功能。

首先完成获取颜色的模块及其函数:

1

2

3

4

5

6

7

8

9

def get_color(n):

    if n<13:

        return '梅花'

    elif n<26:

        return '方块'

    elif n<39:

        return '红桃'

    else:

        return '黑桃'

模块名为getcolor.py。

接下来创建获取值的模块及其函数:

1

2

3

4

5

6

7

8

9

10

11

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

模块名为getvalue.py。

2.2. 调用模块并完善主程序

调用自己定义的模块,关键代码如下:

1

2

from getcolor import get_color

from getvalue import get_value

完整代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

import random

from getcolor import get_color

from getvalue import get_value

= 52

def gen_pocker(n):

    random.shuffle(n)

    return n

def main():

    List = []  # 代表一副牌,现在表示还没有牌,只是一个牌盒

    for in range(052):

        List.append(i)  # 按顺序往牌盒中放入52张牌

    List = gen_pocker(List)  # 将牌盒中的牌打乱顺序

    List1 = []  # 定义4个牌手

    List2 = []

    List3 = []

    List4 = []

    for in range(052):  # 实现发牌

        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)

main()

输出结果为:

1

2

3

4

5

6

7

8

9

10

11

[483025511034411938813324284335649370

3327111443121509461247144182226322042

457173629215403951623]

牌手1 ['黑桃9''红桃4''方块K''黑桃K''梅花J''红桃8''黑桃2''方块6''红桃K'

'梅花8''方块A''梅花3''方块Q']

牌手2 ['红桃2''黑桃4''红桃9''梅花6''黑桃J''红桃Q''梅花A''红桃7''红桃1'

'梅花Q''方块1''梅花4''红桃5']

牌手3 ['方块8''黑桃Q''梅花9''黑桃7''梅花K''黑桃8''梅花1''黑桃5''方块5'

'方块9''红桃A''红桃6''方块7']

牌手4 ['黑桃3''黑桃6''梅花7''方块4''红桃J''红桃3''梅花2''方块2''黑桃1',

 '黑桃A''梅花5''方块3''方块J']

在这个题中,我们采用的是导入模块的第三种方式,直接引入模块的函数功能,如果我们采用第一种导入模式的时候,注意使用方式要加上模块名,例如:

1

2

import getcolor

print(getcolor.get_color(2))

一定要注意模块名的添加。


3.math模块

Python的math模块为我们提供了一系列关于数学方面的功能,可以帮助我们进行指数、对数、平方根、三角函数等运算。

3.1. 冥和对数

我们在求某个数的平方根或者是平方和又或者是幂运算的时候,往往要借助math模块。

取对数运算:math.log(x[,底数]),这种方式会返回一个以基数为底的x的对数,如果省略底数就是以2为底。

例如:

1

2

3

4

5

import math

= math.log(144,12)

= math.log(36,6)

print(a)

print(b)

输出结果为:

1

2

2.0

2.0

取平方根运算:math.sqrt(x),返回x的平方根。

例如:

1

2

3

4

5

import math

= math.sqrt(16)

= math.sqrt(256)

print(a)

print(b)

输出结果为:

1

2

4.0

16.0

取幂运算:pow(x,y),返回的是x的y次幂。

例如:

1

2

3

4

5

import math

= math.pow(2,4)

= math.pow(10,3)

print(a)

print(b)

输出结果为:

1

2

16.0

1000.0

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)

看下面的例子:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

import math

= math.sin(30)

= math.cos(30)

= math.tan(30)

= math.asin(0.6)

= math.acos(0.6)

= math.atan(0.6)

= math.degrees(2 * math.pi)

= math.radians(360 / math.pi)

print(a)

print(b)

print(c)

print(d)

print(e)

print(f)

print(g)

print(h)

输出结果为:

1

2

3

4

5

6

7

8

-0.9880316240928618

0.15425144988758405

-6.405331196646276

0.6435011087932844

0.9272952180016123

0.5404195002705842

360.0

2.0

需要注意的是我们在Python里使用math.pi来表示‘π’。

3.3. 舍入函数

math模块中还提供了几个函数帮助我们进行舍入操作。

math.ceil(x):返回大于x或等于x的最小整数。

math.floor(x):返回小于x或等于x的最大整数。

同时在Python中有一个内置函数round(x)为我们提供四舍五入的操作。

代码如下:

1

2

3

4

5

6

7

8

9

import math

= math.ceil(3.5)

= math.floor(3.5)

= round(3.5)

= round(3.4)

print(a)

print(b)

print(c)

print(d)

输出结果为:

1

2

3

4

4

3

4

3

4.random模块

在前面我们曾多次提到过random模块,在这节将详细的介绍一下random模块的用法。random模块主要为我们提供一些生成随机数的功能,下面表格总结了random模块中几个常用函数。

函数名 功能

random.random()

生成一个[0,1)的实数。

random.randint(a,b)

生成一个[a,b]的数字,包含a和b。

random.randrange(a,b)

生成一个[a,b)的数字,包含a,不包含b。

random.shuffle(x)

把序列x打乱。

random.choice(x)

从x中返回一个随机项,x需要是一个可变序列。

random.uniform(a,b)

生成一个a,b之间的浮点数,区间可以是浮点数。

4.1. random.random()

生成一个0-1的随机浮点数,看下面的例子:

1

2

3

4

5

6

7

import random

= random.random()

= random.random()

= random.random()

print(a)

print(b)

print(c)

输出结果为:

1

2

3

0.787965560268062

0.20524486179856316

0.8732074424182436

我们可以看出返回的浮点数的值和位数都不一定相同。

4.2. random.randint(a,b)

我需要注意randint和randrange的区别,randint是包含a和b,后面会提到的randrange是不含a和b的。

我们可以通过测试来看一下是否包含上下限,代码如下:

1

2

3

4

5

6

7

import random

= random.randint(1,3)

= random.randint(1,3)

= random.randint(1,3)

print(a)

print(b)

print(c)

输出结果为:

1

2

3

3

1

2

我们可以看出是包含a和b的值的。

4.3. random.randrange(a,b)

我们主要通过测试来看一下这种方法是否包含a和b的值,看下面代码:

1

2

3

4

5

6

7

8

9

import random

= random.randrange(1,3)

= random.randrange(1,3)

= random.randrange(1,3)

= random.randrange(1,3)

print(a)

print(b)

print(c)

print(d)

输出结果为:

1

2

3

4

2

2

1

2

通过测试结果我们可以看出只有1和2,是不包含下界3的,大家也可以自己尝试一下运行一下。

4.4. random.shuffle(x)

random.shuffle(x)函数我们在第二节中使用过,它可以将一个序列进行重新排序,但是需要注意,它只针对于可改变的序列,因此它常被用于打乱列表中的元素。

1

2

3

4

5

import random

= ['d','o','t','c','p','p']

print('打乱前的列表:',a)

random.shuffle(a)

print('打乱后的列表:',a)

输出结果为:

1

2

打乱前的列表: ['d''o''t''c''p''p']

打乱后的列表: ['c''d''p''p''t''o']

4.5. random.choice(x)

random.choice(x)可以返回一个序列中的一个随机元素,它的使用方式如下:

1

2

3

4

5

6

7

import random

= ['d','o','t','c','p','p']

= 'dotcpp'

= ('d','o','t','c','p','p')

print(random.choice(a))

print(random.choice(b))

print(random.choice(c))

输出结果为:

1

2

3

o

d

p

4.6. random.uniform(a,b)

用于生成指定范围内的随机浮点数,代码如下:

1

2

3

4

5

6

7

import random

= random.uniform(1.1,3.3)

= random.uniform(5,6)

= random.uniform(100,200)

print(a)

print(b)

print(c)

输出结果为:

1

2

3

2.5802656579509087

5.977193880181603

141.03779834775494

 


5.datetime模块

当我们在Python中需要使用到时间的时候,有两个关于时间的模块,分别是timedatetime。time模块偏底层,在部分函数运行的时候可能会出现不同的结果,而datetime模块提供了高级API,使用起来更为方便,我们通常在使用的时候会涉及到包含时间和日期的datetime、只包含日期的date以及只包含时间的time,本节我们就对这三种方法进行学习。

1. datetime

datetime的使用方法为:

1

datetime.dateto,e(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None*, fold=0)

其中year,month和day是不能缺少的,tzinfo为时区参数,可以为None或其他参数,其余参数的范围如下:

MINYEAR <= year <= MAXYEAR,

1 <= month <= 12,

1 <= day <= number of days in the given month and year,

0 <= hour < 24,

0 <= minute < 60,

0 <= second < 60,

0 <= microsecond < 1000000,

fold in [0, 1].

下面讲几种常用的方法:

       1) datetime.datetime.now()

返回当前的日期和时间。

代码如下:

1

2

3

import datetime

= datetime.datetime.now()#返回当前日期及时间

print(t)

输出结果为:

1

2020-02-01 19:18:59.926474

       2) date()

返回当前时间的日期。

代码如下:

1

2

3

import datetime

= datetime.datetime.now()#返回当前日期及时间

print(t.date())#输出当前的日期

输出结果:

1

2020-02-01

       3) time()

返回当前的时间对象。

代码如下:

1

2

3

import datetime

= datetime.datetime.now()#返回当前日期及时间

print(t.time())#输出当前的时间

输出结果为:

1

19:22:10.948940

       4) utctimetuple()

返回UTC时间元组。

代码如下:

1

2

3

import datetime

= datetime.datetime.now()#返回当前日期及时间

print(t.utctimetuple())#输出当前的日期

输出结果为:

1

2

time.struct_time(tm_year=2020, tm_mon=2, tm_mday=1, tm_hour=19, tm_min=23, tm_sec=29, tm_wday=5

tm_yday=32, tm_isdst=0)

2. date

date对象是日期的专属对象,语法格式如下:

1

datetime.date(year,month,day),参数分别代表年月日。

date类中的常用功能有2种:

       1) datetime.date.today()

这种用法直接返回了当前的日期,代码如下:

1

2

3

import datetime

= datetime.date.today()#返回当前日期

print(t)

输出结果为:

1

2020-02-01

       2) datetime.date.fromtimestamp()

这种方式返回与时间戳对应的日期,代码如下:

1

2

3

4

5

6

import datetime

import time

= time.time()#返回当前的时间戳

print('当前的时间戳为:',c)

= datetime.date.fromtimestamp(c)#与时间戳对应的日期

print('当前时间戳对应的日期为:',t)

输出结果为:

1

2

当前的时间戳为: 1580556848.3161435

当前时间戳对应的日期为: 2020-02-01

在这个例题中我们先引入了time模块中的方法,time模块中的time.time()能返回当前时间戳,然后我们使用上面的方法可以返回与时间戳对应的日期。

3. time

time类中包含了一整天的信息,语法结构如下:

1

datetime.time(hour,moniute,second,microsecond,tzinfo=None)

最后一个时区可以省略,看下面例子:

1

2

3

import datetime

= datetime.time(19,42,34,12)

print(t)

输出结果为:

1

19:42:34.000012

4. 总结

由于datetime模块中封装了time模块,所以我们使用datetime模块可以保证数据更为精确,在使用过程中也可以穿插着time模块中的部分功能,例如暂停time.sleep()等方法。

猜你喜欢

转载自blog.csdn.net/qq_58602552/article/details/143314599