目录
一、模块的导入与使用
1.模块的导入
2.模块的使用
二、包的使用
1.包
2.包的使用
三、常见的标准库
1.random的运用举例
2.random小游戏
(1)石头剪刀布
(2)猜大小
3.re
4.time库的使用
5.turtle库的使用
6.socket库的使用
一、模块的导入与使用
1.模块的导入
- 模块就好比是工具包,要想使用这个工具包中的工具,就需要导入import这个模块
- 每一个以扩展名py结尾的python源代码文件都是一个模块
- 在模块中定义的全局变量、函数,都是模块能够提供给外界直接使用的工具
优点:提高代码的复用性
2.模块的使用
首先,新建一个Python文件my_module.py,编写内容如下:
author = '-17'
def add(a,b):
return a+b
def total(*args):
'''
参数a:接收一个列表
return a列表中每个元素的平方和
'''
result = 0
for i in args:
result = result + i**2
return result
新建另一Python文件code4-30-module.py,
# 方法1
import my_module
result = my_module.add(3,4)
print(result)
print(my_module.author)
# 方法2
from my_module import add,author
result = add(3,4)
print(result)
print(author)
# 方法3
from my_module import *
result = add(3,4)
print(result)
print(author)
# 用法4
from my_module import add as f # 把add改名为f
result = f(3,4)
二、包的使用
1.包
- 包是Python模块的一种组织形式,将多个模块组合在一起,形成一个大的Python工具库。
- 包通常是一个拥有__init__.py文件的目录,它定义了包的属性和方法。
2.包的使用
新建一个包,并编写Python如下:
新建另一Python文件,调用包中的函数
from my_package import my_math,my_card # 法1
from my_package import * # 法2
result = my_math.total(1,2,3)
print(result)
my_card.menu()
三、常见的标准库
模块 | 用途 |
os | os模块提供了许多与操作系统交互的函数,例如创建、移动和删除文件和目录,以及访问环境变量等 |
sys | sys 模块提供了与 Python 解释器和系统相关的功能,例如解释器的版本和路径,以及与 stdin、stdout 和 stderr 相关的信息。 |
time | time 模块提供了处理时间的函数,例如获取当前时间、格式化日期和时间、计时等。 |
datetime | datetime 模块提供了更高级的日期和时间处理函数,例如处理时区、计算时间差、计算日期差等 |
random | random 模块提供了生成随机数的函数,例如生成随机整数、浮点数、序列 |
math | math 模块提供了数学函数,例如三角函数、对数函数、指数函数、常数等。 |
re | re模块提供了正则表达式处理函数,可以用于文本搜索、替换、分割等。 |
json | json 模块提供了JSON 编码和解码函数,可以将 Python 对象转换为JSON格式,并从JSON 格式中解析出 Python 对象。 |
urllib | urlib 模块提供了访问网页和处理 URL的功能,包括下载文件、发送POST请求、处理cookies等。 |
1.random的运用举例
import random
# 随机数
a = random.random() # 随机小数,0-1之间
print(a)
a = random.randint(1,100) # 范围是1-100的随机整数
print(a)
# 获取列表中的随机元素
list1 = [1,2,3,4,5,6]
print(list1[random.randint(0,len(list1)-1)])
# 直接获取序列中的元素
print(random.choice(list1))
print(random.choice('hello'))
# 获取字母的ascii
print(ord('A'),ord('Z'))
# 生成一个随机字母组成的列表
a = []
n = 5
for i in range(20):
s = ''
for j in range(n):
t = random.randint(65, 90)
s += chr(t)
a.append(s)
print(a)
# 将列表顺序打乱
random.shuffle(list1)
print(list1)
运行结果:
0.16955544251560006
67
2
6
l
65 90
['SPYLS', 'CFBTM', 'ZYKYN', 'VTWCP', 'SSGLO', 'KMCKX', 'FTUVT', 'KLBDC', 'CLUIU', 'XHMIL', 'SARHS', 'WZPTI', 'AVEHU', 'JLIWJ', 'ETHRI', 'GELRK', 'JIFHI', 'XVOQA', 'QJBKO', 'SRQUV']
[5, 2, 4, 6, 1, 3]
2.random小游戏
(1)石头剪刀布
import random
def game1(): # 石头剪刀布
player_score,computer_score = 0,0
for i in range(3):
player = input('请输入石头剪刀布:')
computer = random.choice(['石头','剪刀','布'])
print('电脑出:',computer)
if player==computer:
player_score+=1
computer_score+=1
elif (player=='石头' and computer=='剪刀') or (player == '剪刀' and computer == '布') or (player == '布' and computer == '石头'):
player_score+=1
else:
computer_score+=1
print('玩家得分:%d,电脑得分:%d'%(player_score,computer_score))
if player_score==computer_score:
print('平局')
elif player_score>computer_score:
print('玩家赢')
else:
print('电脑赢')
game1()
测试结果:
请输入石头剪刀布:剪刀
电脑出: 剪刀
玩家得分:1,电脑得分:1
请输入石头剪刀布:剪刀
电脑出: 布
玩家得分:2,电脑得分:1
请输入石头剪刀布:石头
电脑出: 剪刀
玩家得分:3,电脑得分:1
玩家赢
(2)猜大小
def guess_number(): # 猜数字
num = random.randint(1,100)
while True:
player = int(input('请输入你猜的数字:'))
if player==num:
print('猜中了!')
break
elif player>num:
print('猜大了~')
else:
print('猜小了~')
guess_number()
测试结果:
请输入你猜的数字:50
猜小了~
请输入你猜的数字:75
猜小了~
请输入你猜的数字:85
猜大了~
请输入你猜的数字:80
猜大了~
请输入你猜的数字:78
猜大了~
请输入你猜的数字:76
猜中了!
3.re
- 正则表达式处理
- 可以用于文本搜索、替换、分割等
模式 | 描述 |
\w | 匹配字母数字及下划线 |
\W | 匹配非字母数字下划线 |
\s | 匹配任意空白字符,等价于[\t\n\r\f] |
\S | 匹配任意非空字符 |
\d | 匹配任意数字,等价于[0-9] |
\D | 匹配任意非数字 |
\A | 匹配字符串开始 |
\Z | 匹配字符串结束,如果存在换行,只匹配到换行前的结束字符串 |
\z | 匹配字符串结束 |
\G | 匹配最后匹配完成的位置 |
\n | 匹配一个换行符 |
\t | 匹配一个制表符 |
^ | 匹配字符串的开头 |
$ | 匹配字符串的末尾 |
. | 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符 |
[...] | 用来表示一组字符,单独列出:[amk]匹配‘a’,'m',或‘k’ |
[^...] | 不在[]中的字符:[^abc]匹配除了a,b,c之外的字符 |
* | 匹配0个或多个的表达式 |
+ | 匹配1个或多个的表达式 |
? | 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式 |
{n} | 精确匹配n个前面表达式 |
{n,m} | 匹配n到m次由前面的正则表达式定义的片段,贪婪方式 |
a|b | 匹配a或b |
( ) | 匹配括号内的表达式,也表示一个组 |
import re
result = re.match(r'\d+','12131551')
print(result)
result = re.match(r'\w+','a8/')
print(result)
result = re.match(r'\s+',' cy')
print(result)
result = re.match(r'\s+$',' cy')
print(result)
result = re.match(r'\S+',' cy')
print(result)
result = re.match(r'^code\d-\d-\w+$','code9-4-re')
print(result)
# []区间,可选列表
result = re.match(r'^[abcd]+$','cy')
print(result)
result = re.match(r'^abc{2}$','abcc')
print(result)
result = re.match(r'^a|b$','abc')
print(result)
运行结果:
<re.Match object; span=(0, 8), match='12131551'>
<re.Match object; span=(0, 2), match='a8'>
<re.Match object; span=(0, 2), match=' '>
None
None
<re.Match object; span=(0, 10), match='code9-4-re'>
None
<re.Match object; span=(0, 4), match='abcc'>
<re.Match object; span=(0, 1), match='a'>
应用举例:
# 身份证号验证
result = re.match(r'^\d{6}((20[012][01234])|(1[89]\d\d))\d{7}(\d|X)$','12345620001234567X')
print(result)
# 手机号验证
result = re.match(r'^1\d{10}$','12345678912')
print(result)
运行结果:
<re.Match object; span=(0, 18), match='12345620001234567X'>
<re.Match object; span=(0, 11), match='12345678912'>
4.time库的使用
import time
t = time.time() # 时间戳:从1970年开始到现在为止,过了几秒
print(t)
t = time.localtime() # 结构化的时间
print(t)
print(t.tm_year,type(t.tm_year))
s = time.strftime('%Y-%m-%d %H:%M:%S',t) # %H:小时,%M:分钟,%S:秒
print(s)
运行结果:
1714567275.1523554
time.struct_time(tm_year=2024, tm_mon=5, tm_mday=1, tm_hour=20, tm_min=41, tm_sec=15, tm_wday=2, tm_yday=122, tm_isdst=0)
2024 <class 'int'>
2024-05-01 20:41:15
5.turtle库的使用
例1:
import turtle
pen = turtle.Turtle()
pen.speed(0)
for i in range(100):
pen.forward(100+i)
pen.right(61)
input()
运行结果:
例2:数字时钟
import turtle,time
from my_package import my_tools
pen = turtle.Turtle()
pen.backward(200)
pen.speed(0)
while True:
time.sleep(1)
times = my_tools.get_time()
pen.clear()
pen.write(times,font=("Arial",40,"normal"))
input()
运行结果:
6.socket库的使用
新建一个Python文件“server.py”,代码如下:
import socket
# 创建socket对象
sk = socket.socket()
# 绑定IP和端口号
sk.bind(("0.0.0.0",8995))
# 设置监听
sk.listen(5)
# 等待客户端连接
conn,addr = sk.accept()
print(conn)
print(addr)
while True:
accept_data = conn.recv(1024)
print('收到客户端发送的消息:',accept_data.decode('utf8'))
send_data = '收到!'
conn.send(send_data.encode('utf8'))
新建一个Python文件“client.py”,代码如下:
import socket
# 创建socket对象
sk = socket.socket()
# 连接服务器
sk.connect(("127.0.0.1",8995))
while True:
send_data = input('请输入你要发送的内容:')
# 发送数据到服务器
sk.send(send_data.encode('utf8'))
# 等待服务器的响应
accept_data = sk.recv(1024)
# 打印服务器的响应
print('接收到服务器的响应:',accept_data.decode('utf8'))
先运行server.py文件,再运行client.py文件,否则会报错,运行结果如下:
client客户端:
请输入你要发送的内容:hello -17
接收到服务器的响应: 收到!
请输入你要发送的内容:你好
接收到服务器的响应: 收到!
server服务器:
收到客户端发送的消息: hello -17
收到客户端发送的消息: 你好