【Python编程实践1/3】模块

目录

目标

模块

import

​编辑

代码小结

题目

from...import

随机模块

代码小结

randint函数

骰子大战

choice函数

总结


目标

拧一颗螺丝,只会用到螺丝刀;但是修一台汽车,需要一整套汽修的工具。函数就像螺丝刀,可以帮助我们解决一类问题。那么当我们遇到很多问题时,难道要东拼西凑各种函数来解决吗?

其实,对于很多有关联的问题,Python已经提供了标准的解决方案。这些解决方案,都被封装在了一个叫做模块的东西里面。今天,我们先来了解模块的两种导入方式,并介绍一些常见模块的使用方法。

模块

简单来说,函数是对代码的封装;类是对属性和方法的封装。而模块,则可以看成是一堆函数、类和一些代码封装而成的。

定义 :模块是已经写好的Python文件,以.py结尾。模块可以包含函数、类和一些代码,它们之间的功能是相互关联的。

隐喻:如果把模块比作工具箱,那么函数、类就是里面的螺丝刀、锤子等工具

Python中的模块,大致分为内置模块(安装Python时自带的模块)、第三方模块(有其他开发者所编写,提供给公众免费使用的模块)和自定义模块三种。而我们将主要学习前面两种模块。

今天,我们以内置模块为例,来讲解模块的基本知识。

无论是什么模块,都需要先导入再使用。模块有常用的两种导入方式:**import**和

from...import。下面,我们来学习这两种导入方式之间的差异。

import

前面,我们把模块比作了工具箱,里面有很多函数和类的工具。那么,使用关键词**import**直接导入模块,就相当于我们导入了整个工具箱。

导入datetime模块,使用模块中的类datetime的now()方法,获取了当前的日期时间。

python 复制代码
# 导入模块 datetime
import datetime
# 使用模块datetime中的类datetime的now方法获取当前日期时间,赋值给nowTime
nowTime = datetime.datetime.now()
print(nowTime)

import

关键字import,中文意思是"导入",表明我们要在这里导入模块。

模块名

一个名为**datetime**的模块,用于处理日期和时间。

模块中的类

一个类,表明我们在调用datetime模块里的**datetime类。datetime**类是一个日期时间类,里面提供了一些获取日期时间的方法与属性。注意,很多模块内都有和模块同名的类,注意别混淆了。

datetime类中的方法

一个方法,表明我们要调用的now()方法属于datetime类。该方法,用于获取当前的日期时间。

语法格式

导入"工具箱"的缺点,就是需要先从工具箱内拿出合适的工具。因为,类属于模块,方法属于类。所以,调用模块中类的方法时,需要从大到小层层调用。采用句点表示法的格式:模块名.类名.方法名()。示例中,表示使用datetime模块中datetime类的now()方法。

代码小结

导入模块后,使用模块中的类的方法时,就可以使用这样的格式

当然,我们获取了当前时间后,还能通过各种属性,来获取对应的年月日时分秒。依次使用对应的英文:year、month、day、hour、minute、second

示例中,使用**.year** 属性获取了当前日期的年份;使用**.month**属性获取了当前日期的月份。

题目

获取当前的年份

通过导入 datetime模块,使用 datetime类的now方法,获取当前日期。最后通过year属性,获取当前日期的年份,并格式化输出内容。格式化输出示例:现在是xxxx年。

参考代码

python 复制代码
# 导入模块 datetime
import datetime
# 获取当前日期时间,赋值给nowTime
nowTime = datetime.datetime.now()
# 获取当前日期的年份,赋值给nowYear
nowYear = nowTime.year
# 格式化输出:现在是xxxx年
print(f"现在是{nowYear}年")

运行结果

from...import

其实,在很多时候,我们很难用完工具箱的全部工具。所以,我们在处理问题前,可以先找到合适的工具,再去处理它。也就是说,对于功能强大的模块,我们只需要导入我们要使用的函数或者类就行了。

此时,就需要用到**from...import**语句。

从datetime模块中,导入了类datetime,并使用该类的now()方法,获取了当前的日期时间,并输出。

python 复制代码
# 从模块datetime中,导入类datetime
from datetime import datetime
# 使用类datetime的now方法获取当前日期时间,赋值给nowTime
nowTime = datetime.now()
print(nowTime)

两个关键字

from...import,表示我们从模块中导入一个指定的函数或类。示例中,表示从datetime模块中,导入了datetime类。

模块名

关键字from后的datetime是模块,表示要从模块datetime中导入类或函数。

一个类

关键字import后的datetime是一个类,表示我们是从datetime模块里导入了datetime类。

语法格式

因为**from...import,相当于从工具箱拿出了工具。所以,当调用模块中的类时,无需附加模块名作为前缀,直接使用类名作为前缀即可,即类名.方法名()。示例中,表示使用了datetime类的now()**方法。

也就是说,使用**import导入模块,是导入整个模块,在调用时需要模块前缀。而使用from...import**导入模块时,是导入模块的类或函数,在调用时可以直接使用函数或类的方法。以后,我们要使用模块时,可以根据自己的需要选择合适的导入方式。

随机模块

前面,我们以处理日期时间的datetime模块为例,讲解了模块的两种导入方式。下面,我们再介绍一个常用的内置模块 -- 随机模块

导入random模块,使用模块中uniform函数,生成了一个0到1随机数并输出。

python 复制代码
# 导入模块 random
import random
# 使用模块random中的uniform函数生成随机数,并赋值给randomNum
randomNum = random.uniform(0,1)
print(randomNum)

导入模块

使用import的方式,导入整个随机模块random。

使用模块中的函数

因为导入了整个模块,所以使用其中的函数时,需要模块名作为前缀,即**模块名.函数名()的格式。示例中,uniform函数用于产生指定范围随机浮点数。比如,random.uniform(0,1)**表示生成0到1的随机浮点数。

代码小结

当我们要导入模块并使用模块的函数时,就可以使用这样的格式:

random模块内不仅有生成随机浮点数的函数,还有生成随机整数,实现随机抽取等一系列函数。图中展示了random模块中这几个常用的函数。

下面,我们再来简单介绍下**randintchoice**函数的用法。

randint函数

random模块的**randint函数,可以产生指定范围的随机整数。整数的范围,由randint函数中的参数决定。示例中,random.randint(1,7)**表示生成1到7的随机整数,包括整数1和7。

骰子大战

通过关键字import导入random模块。

分两次使用该模块下的randint()函数,生成1到6之间的随机整数。

第一次,将结果赋值给变量player,作为玩家的点数;

第二次,将结果赋值给变量computer,作为电脑的点数。

最后通过if-elif-else语句判断玩家和电脑的输赢:

如果,player大于computer,则输出"玩家胜利,电脑弱爆了"

如果,player等于computer,则输出"平局,再来一盘"

否则,输出"电脑胜利,决战到天亮!"

参考代码

python 复制代码
# 导入模块 random
import random
# 生成1到6的随机整数,赋值给player
player = random.randint(1,6)
# 生成1到6的随机整数,赋值给computer
computer = random.randint(1,6)

print(f"玩家丢出{player}点")
print(f"电脑丢出{computer}点")

# 通过if-elif-else语句判断玩家和电脑的输赢
if player > computer:
    print("玩家胜利,电脑弱爆了")
elif player == computer:
    print("平局,再来一盘")
else:
    print("电脑胜利,决战到天亮!")

运行结果1 (结果不止1种)

运行结果2 (结果不止1种)

choice函数

random模块的**choice函数,可以从序列中随机选取一个元素。示例中,random.choice(option)**表示从列表option中,随机选取一个元素。

其实,无论是内置模块,还是第三方模块,导入的方式都是一样的。今天,我们使用的内置模块,是Python自带的,具有较高的通用性。

下次,我们将进一步学习由个人组织开发,个性化较高的第三方模块

总结

相关推荐
FreakStudio43 分钟前
全网最适合入门的面向对象编程教程:50 Python函数方法与接口-接口和抽象基类
python·嵌入式·面向对象·电子diy
redcocal2 小时前
地平线秋招
python·嵌入式硬件·算法·fpga开发·求职招聘
artificiali2 小时前
Anaconda配置pytorch的基本操作
人工智能·pytorch·python
RaidenQ3 小时前
2024.9.13 Python与图像处理新国大EE5731课程大作业,索贝尔算子计算边缘,高斯核模糊边缘,Haar小波计算边缘
图像处理·python·算法·课程设计
花生了什么树~.3 小时前
python基础知识(六)--字典遍历、公共运算符、公共方法、函数、变量分类、参数分类、拆包、引用
开发语言·python
Trouvaille ~3 小时前
【Python篇】深度探索NumPy(下篇):从科学计算到机器学习的高效实战技巧
图像处理·python·机器学习·numpy·信号处理·时间序列分析·科学计算
爆更小小刘3 小时前
Python基础语法(3)下
开发语言·python
哪 吒3 小时前
华为OD机试 - 第 K 个字母在原来字符串的索引(Python/JS/C/C++ 2024 E卷 100分)
javascript·python·华为od
憨憨小白4 小时前
Python 的集合类型
开发语言·python·青少年编程·少儿编程
白杆杆红伞伞4 小时前
01_快速入门
python·pandas