5.模块和包,随机模块和数学模块

模块

什么是模块?(Module)
Python 模块本质也是一个 Python 文件,以 .py 结尾。通常我们把一组相关的函数和类组织在同一个文件中,以方便管理和使用。
模块名区分大小写!

模块的作用 :
1、实现代码重用,同时可避免名称冲突,相同的函数名和类名可以同时存在于不同的模块中
2、分解大型系统程序,控制程序的复杂度
3、增强代码的可维护性,模块的修改可作用于调用其的客户程序

模块的分类:
1)系统内置模块:Python提供的模块,如os,sys,logging,math等。
2)第三方模块/库:我们也可以安装和使用第三方模块。
python中通过pip/pip3管理工具来安装第三方模块。通常,第 三方库都会在python官网上注册,如果你要安装一个第三方库, 必须先知道该库的名称,可以在官网或者pypi上搜索,注册后的 第三方库通常的安装命令是: pip3 install 模块名 如果不能识别pip3命令,则在操作系统环境变量path中加入:python安装目录\Sctripts
3)用户自定义模块

sys.modules ----Python模块的管理者
sys.modules是一个全局字典,该字典是python启动后就加载在内存中。每当程序员导入新的模块,sys.modules都将记录这些模块。字典sys.modules对于加载模块起到了缓冲的作用。当某个模块第一次导入,字典sys.modules将自动记录该模块。当第二次再导入该模块时,python会直接到字典中查找,从而加快了程序运行的速度。 字典sys.modules具有字典所拥有的一切方法,可以通过这些方法了解当前的环境加载了哪些模块

image.png

dir()函数----查看模块信息
dir() 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。导入模块后可以使用dir(模块名)查看模块中的所有对象列表。

help()函数--查看模块或函数的使用帮助

模块的导入方式1
1)import 模块名 如果要调用模块中的某个成员,则使用: 模块名.函数名() 或 模块名.变量名

image.png

模块的导入方式2
2)from math import * 从模块中导入该模块的所有函数,这是:如果要使用模块中的某个成员,则直接使用:函数名() 或 变量名
image.png

但如果一次性导入模块过多,会导致变量名冲突的问题存在
模块的导入方式3
3)from 模块名 import 指定成员1,成员2.... 如果调用这些成员,则使用:函数名() 或 变量名,只加载你需要的变量
image.png

4)用户自定义模块的路径问题
问题描述:模块aboutFile.py在D://而程序代码P_useFiles.py在c盘的用户桌面下
解决方法:用户程序中配置sys.path

包的基本概念

包的引入:
一个大型系统中往往包含多个模块。为了更好地管理这些模块和避免模块名之间的冲突,我们可以将多个模块按类分放在不同的包里。 Python 中的包本质就是一个文件夹,且该文件夹下存在 init.py 文件。

最简单的情况下,只需要一个空的 init.py 文件即可。当然它也可以执行包的初始化代码。当导入包或者包中的模块时init.py会被执行。
包的下面可以继续包含子包,没有层次限制,这类似文件夹下有子文件夹。
包名是区分大小写的。

image.png

image.png

image.png

image.png

数学模块

math模块:
Python的math模块提供了许多对浮点数的数学运算函数
cmath模块:
Python的cmath模块提供了一些用于复数的数学运算函数


image.png

image.png

image.png
1
import math
def x(n):
    #输入:整数n
    #输出:返回根据数学公式和n算出来的X值
    t=0#计数器
    for i in range(1,n+1):#用循环来计算数学累积
        t+=1/(math.sqrt(i+math.sqrt(i+1)))
    return t
def main():  #main作为程序的入口名
    n=int(input('请输入整数n: '))
    print('x(n)的结果是',x(n))
if __name__ == '__main__':#如果程序独立运行我就调用main
    main()
外部也可以调用了
import p_qiuXn
print(p_qiuXn.x(10))
print(p_qiuXn.main())
image.png

image.png
>>> import math #求公约数的方法
>>> math.gcd(100,50)
50
def GCD(a,b):#这里是算法描述,原理
    if a>b:
        a,b=b,a
    r=1
    while r!=0:
        r=a%b
        a=b
        b=r
    return a

def findGCD():   #这里是入口,主代码
    x=int(input('请输入第1个整数: '))
    y=int(input('请输入第2个整数: '))
    print('它们的最大公约数是',GCD(x,y))
if __name__=='__main__':
    findGCD()

随机模块

image.png
image.png
image.png
import random
n=int(input('请输入抽奖次数: '))
for i in range(n):
    a=random.randint(1,10001)
    print('随机数是',a,end=' | ')  #end=''不换行
    if a==1:
        print('你中了特等奖')
    elif a<=101:
        print('你中了一等奖')
    elif a<=2101:
        print('你中了二等奖')
    elif a<=7101:
        print('你中了三等奖')
    else:
        print('没中')
image.png
import random
def biggerNum(s,x):
    num=0 #初始化计算器
    for i in range(len(s)):
        if s[i]>x:
            num+=1  #统计s里面比X大的数
    return num
def main():
    x=random.randint(0,100)
    s=[]
    for j in range(10):
        s.append(random.randint(0,100))
    bN=biggerNum(s,x)#调用函数
    print('随机序列:',s)
    print('随机参考值:',x)
    print('序列中比参考值大的有%d个'%bN)
if __name__=='__main__':
    main()
image.png

生成颜色的模式
import turtle,random
turtle.ht()#隐藏小乌龟
turtle.shape('turtle')#修改turtle形状为小乌龟

n=random.randint(5,20)#生成5到20之间的随机数,也就是盖印个数
used=[]#用于存储产生过印记的点
for i in range(n):
    while True:
        x=random.randint(-10,10)#随机生成x
        y=random.randint(-10,10)#随机生成y
        if [x,y] in used:#如果这个位置盖过章了
            continue#继续循环,产生while的x,y
        break#如果当前随机数点没盖过章,则退出循环
    used.append([x,y])#将当前的加入到used中,记录该点盖过章了
    turtle.pu()
    turtle.goto(x*30,y*30) #到x*30,y*30的绘图点去,放大
    turtle.color(random.random(),random.random(),random.random())#产生随机颜色,rgb模式
    turtle.stamp()#盖下脚印
turtle.done()
#16进制颜色模式
import turtle,random
turtle.ht()#隐藏小乌龟
turtle.shape('turtle')#修改turtle形状为小乌龟
#c16存储16进制中用法哦的所有数字的字符形式
c16=['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F']
n=random.randint(5,20)#生成5到20之间的随机数,也就是盖印个数
used=[]#用于存储产生过印记的点
for i in range(n):
    while True:
        x=random.randint(-10,10)#随机生成x
        y=random.randint(-10,10)#随机生成y
        if used.count(x*20+y)==1:#如果这个位置盖过章了
            continue#继续循环,产生while的x,y
        break#如果当前随机数点没盖过章,则退出循环
    used.append(x*20+y)#将当前的加入到used中,记录该点盖过章了
    turtle.pu()
    turtle.goto(x*30,y*30) #到x*30,y*30的绘图点去,放大
   

   #颜色部分的处理
    rancolor='#'#表示本次雄安乌龟盖印使用的颜色
    for x in range(6):
        rancolor=rancolor+c16[random.randint(0,15)]
    turtle.color(rancolor)

    turtle.stamp()#盖下脚印
turtle.done()

你可能感兴趣的:(5.模块和包,随机模块和数学模块)