【Python】学习笔记 -- CH10. 模块及常用的第三方模块

CH10. 模块及常用的第三方模块

模块的简介

  • 在Python中,一个后缀名为.py的Python文件就是一个模块
  • 模块中可以定义函数、类等
  • 模块也可以避免函数、类、变量等名称相冲突的问题
  • 模块不仅提高了代码的可维护性,同时还提高了代码的可重用性
  • 在给模块命名的时候要求全部使用小写字母,多个单词之间使用下划线进行分隔
  • 如果自定义模块名称与系统内置模块名称相同,那么在导入时会优先导入自定义的模块

模块的分类

  • 系统内置模块:由开发人员编写好的模块,在安装Python解释器时,一同安装到计算机
  • 自定义模块:一个以.py结尾的文件就是一个模块,新建Python文件,实际上就是在新建模块
# my_info.c
name = 'Folin'
time = '2024-09-28 22:15:00'

def info():
    print(f'my_info module was written by {name} at {time}!')
# introduce.py

name = 'Folin'
age = 18

def info():
    print(f'姓名:{name},年龄:{age}')

自定义模块的作用

  • 一是规范代码,将功能相同的函数、类等封装到一个模块中,让代码更易于阅读
  • 另外一个目的与系统内置模块相同,即可以被其他模块调用,提高开发效率

模块的导入

  • 模块编写完成就可以被其他模块进行调用并使用被调用模块中的功能
  • import导入方式的语法结构:import 模块名称 [as 别名]
  • from … import 导入方式的语法结构:from 模块名称 import 变量/函数/类/*
import my_info

print(my_info.name)
my_info.info()


import my_info as a

print(a.name)
print(a.time)

from my_info import name

print(name)

from my_info import *

my_info.info()

  • 导入模块中具有同名的变量和函数,后导入的会将之前导入的进行覆盖
from introduce import *
from my_info import *

info() # my_info 后导入,info为my_info.info()

import introduce
import my_info

introduce.info()
my_info.info()

'''
my_info module was written by Folin at 2024-09-28 22:15:00!
姓名:Folin,年龄:18
my_info module was written by Folin at 2024-09-28 22:15:00!
'''

Python中的包

  • 含有__init__.py文件的文件夹(目录)
  • 可以避免模块名称相冲突的问题

admin

__init__.py

my_admin.py

test_package_import.py

# package_test\admin\__init__.py
print('Author: Folin')
print('learing Python package')
# package_test\admin\my_admin.py
def info():
    print('大家好,我叫Folin,今年18岁!')

name = 'Folin'
# package_test\test_package_import.py
import admin.my_admin as a  # 包名.模块名

a.info()

print('-'*50)
from admin import my_admin as b

b.info()
# __init__.py中的信息打印只会执行一次

print('-'*50)
from admin.my_admin import info

info()

print('-'*50)
from admin.my_admin import *

print(name)

'''
Author: Folin
learing Python package
大家好,我叫Folin,今年18岁!
--------------------------------------------------
大家好,我叫Folin,今年18岁!
--------------------------------------------------
大家好,我叫Folin,今年18岁!
--------------------------------------------------
Folin
'''

主程序运行

  • 以主程序运行,在该模块被导入到其他模块时,该__main__中的代码将不会被执行
if __name__ == '__main__':
    pass
  • 代码示例

module_a.py

module_b.py

# module_a.py
print('Welcome to Nanjing')
name = 'Folin'
print(name)
# module_b.py

import module_a

执行结果:

PS D:\2_Demolight\python\study-plan\single-files> & C:/Python312/python.exe d:/2_Demolight/python/study-plan/single-files/package_test/module_b.py
Welcome to Nanjing
Folin
  • 主程序运行
# module_a.py
# print('Welcome to Nanjing')
# name = 'Folin'
# print(name)

# 主程序
if __name__ == '__main__':
    print('Welcome to Nanjing')
    name = 'Folin'
    print(name)
# module_b.py

import module_a
# module_a中的打印输出将不会被执行

执行结果:

PS D:\2_Demolight\python\study-plan\single-files> & C:/Python312/python.exe d:/2_Demolight/python/study-plan/single-files/package_test/module_b.py
PS D:\2_Demolight\python\study-plan\single-files> 

Python中常用的内置模块

  • 在安装Python解释器时与解释器一起安装进来的模块被称为系统内置模块,也被称为标准模块或标准库
标准库名称功能描述
os与操作系统和文件相关操作有关的模块
re用于在Python的字符串中执行正则表达式的模块
random用于产生随机数的模块
json用于对高维数据进行编码和解码的模块
time与时间相关的模块
datetime与日期时间相关的模块,可以方便的显示日期并对日期进行计算

random模块

  • random模块是Python中用于产生随机数的标准库
函数名称功能描述
seed(x)初始化给定的随机数种子,默认为当前系统时间
random()产生一个[0.0, 1.0)之间的随机小数
randint(a, b)生成一个[a, b]之间的整数
randrange(m, n, k)生成一个[m, n)之间步长为k的随机整数
uniform(a, b)生成一个[a, b]之间的随机小数
choice(seq)从序列中随机选择一个元素
shuffle(seq)将序列seq中元素随机排列,返回打乱后的序列
import random

# 设置随机数的种子
random.seed(10)
print(random.random()) # [0, 1)
print(random.random())

print('-'*40)
random.seed(10)
print(random.randint(1, 100)) # [1, 100]

print('-'*40)
for i in range(10):
    print(random.randrange(1, 10, 3))

print('-'*40)
print(random.uniform(1, 100))

print('-'*40)
lst = [i for i in range(1, 11)]
print(random.choice(lst))
print(random.choice(lst))

print('-'*40)
print(lst)
random.shuffle(lst)
print(lst)

'''
0.5714025946899135
0.4288890546751146
----------------------------------------
74
----------------------------------------
1
4
4
7
1
1
4
4
4
7
----------------------------------------
81.25126013057475
----------------------------------------
1
9
----------------------------------------
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[5, 4, 7, 1, 3, 9, 10, 2, 6, 8]
'''

time模块

  • time模块是Python中提供的用于处理时间的标准库,可以用来进行时间处理、时间格式化和计时等
函数名称功能描述
time()获取当前时间戳
localtime(sec)获取指定时间戳对应的本地时间的struct_time对象
ctime()获取当前时间戳对应的易读字符串
strftime()格式化时间,结果为字符串
strptime()提取字符串的时间,结果为struct_time对象
sleep(sec)休眠sec秒
格式化字符串日期/时间取值范围
%Y年份0001~9999
%m月份01~12
%B月名January~December
%d日期01~31
%A星期Monday~Sunday
%H小时(24小时制)00~23
%I小时(12小时制)01~12
%M分钟00~59
%S00~59
import time

now = time.time()
print(now)

obj = time.localtime() # 默认当前时间
print(obj)

print(time.ctime())

# 日期时间格式化
print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))
print(time.strftime('%Y %B %A %H:%M:%S', time.localtime()))

print(time.strptime('2024-10-14', '%Y-%m-%d'))

time.sleep(5)
print('Hello Python')

'''
1728918297.6053212
time.struct_time(tm_year=2024, tm_mon=10, tm_mday=14, tm_hour=23, tm_min=4, tm_sec=57, tm_wday=0, tm_yday=288, tm_isdst=0)
Mon Oct 14 23:04:57 2024
2024-10-14 23:04:57
2024 October Monday 23:04:57
time.struct_time(tm_year=2024, tm_mon=10, tm_mday=14, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=288, tm_isdst=-1)
Hello Python
'''

datetime模块

  • datetime模块可以更方便的显示日期并对日期进行运算
类名功能描述
datetime.datetime表示日期时间的类
datetime.timedelta表示时间间隔的类
datetime.date表示日期的类
datetime.time表示时间的类
datetime.tzinfo时区相关的类
datetime类
from datetime import datetime

cur_datetime = datetime.now()
print('当前的系统时间为:',cur_datetime)

# datetime是一个类,手动创建这个类的对象
dt = datetime(2024, 10, 20, 20, 45, 30)
print('dt的数据类型:',type(dt))
print('dt所表示的日期时间:', dt)
print(f'年:{dt.year}, 月:{dt.month}, 日:{dt.day}')

# 比较两个日期的大小
labor_day = datetime(2025, 5, 1, 0, 0, 0)
national_day = datetime(2025, 10, 1, 0, 0, 0)
print('2025年5月1日比2025年10月1日早吗? ', labor_day < national_day)

# datetime类型与字符串进行转换
now_dt = datetime.now()
now_dt_str = now_dt.strftime('%Y/%m/%d %H:%M:%S')
print('now_dt的数据类型:', type(now_dt), 'nowdt所表示的数据:', now_dt)
print('now_dt_str的数据类型:', type(now_dt_str), 'now_dt_str所表示的数据:', now_dt_str)

# 字符串转换为datetime类型
str_dt = '2026年11月11日 11点11分11秒'
dt3 = datetime.strptime(str_dt, '%Y年%m月%d日 %H点%M分%S秒')
print('str_dt的数据类型:', type(str_dt), 'str_dt所表示的数据:', str_dt)
print('dt3的数据类型:', type(dt3), 'dt3所表示的数据:', dt3)

'''
前的系统时间为: 2024-10-20 21:47:17.923766
dt的数据类型: <class 'datetime.datetime'>
dt所表示的日期时间: 2024-10-20 20:45:30
年:2024, 月:10, 日:20
2025年5月1日比2025年10月1日早吗?  True
now_dt的数据类型: <class 'datetime.datetime'> nowdt所表示的数据: 2024-10-20 21:47:17.923766
now_dt_str的数据类型: <class 'str'> now_dt_str所表示的数据: 2024/10/20 21:47:17      
str_dt的数据类型: <class 'str'> str_dt所表示的数据: 2026年11月11日 11点11分11秒      
dt3的数据类型: <class 'datetime.datetime'> dt3所表示的数据: 2026-11-11 11:11:11
'''
timedalta类
from datetime import datetime, timedelta

# 创建两个datetime类的对象,相减可以得到timedelta对象
delta1 = datetime(2025, 2, 5) - datetime(2024, 10, 20)
print('delta1的数据类型:', type(delta1), 'delta1所表示的数据', delta1)
print('2024年10月20日之后的第108天是:', datetime(2024, 10, 20) + delta1)

# 创建timedelta对象
td1 = timedelta(10) # 10天
print(td1)

td2 = timedelta(10,10) # 10天10秒
print(td2)

'''
delta1的数据类型: <class 'datetime.timedelta'> delta1所表示的数据 108 days, 0:00:00
2024年10月20日之后的第108天是: 2025-02-05 00:00:00
10 days, 0:00:00
10 days, 0:00:10
'''

第三方模块的安装与卸载

  • 第三方模块由全球Python爱好者、程序员、各行各业的专家进行开发并进行维护
  • 安装第三方模块的语法:pip install 模块名称
    • 使用其他镜像源安装:pip install 模块名 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
  • 卸载第三方模块的语法:pip uninstall 模块名称
  • 升级pip命令的语句结构:python -m pip install --upgrade pip

常用的第三方模块

requests

  • 被称为requests库,是用于处理HTTP(Hypertext Transfer Protocol超文本传输协议)请求的第三方库,该库在爬虫程序中应用非常广泛。
  • 使用requests库中的get()函数可以打开一个网络请求,并获取一个Response响应对象。响应结果中的字符串数据可以通过响应对象的text属性获取,响应结果中除了有字符串数据也有二进制数据,响应结果中的二进制数据可以通过相应对象的content属性获取
# 获取景区推荐的天气预报
import re

import requests

# 浏览器网页
url = 'https://www.weather.com.cn/weather40d/101190101.shtml'
rsp = requests.get(url) # 打开浏览器并打开网址
rsp.encoding = 'utf-8' # 设置编码格式,支持中文
# print(rsp.text) # rsp相应对象,对象名.属性名

'''
<span class="name">三亚</span>
<span class="weather">小雨</span>
<span class="wd">25/30℃</span>
<span class="zs">适宜</span>
'''

city = re.findall('<span class="name">([\u4e00-\u9fa5]*)</span>', rsp.text)
weather = re.findall('<span class="weather">([\u4e00-\u9fa5]*)</span>', rsp.text)
wd = re.findall('<span class="wd">(.*)</span>', rsp.text)
zs = re.findall('<span class="zs">([\u4e00-\u9fa5]*)</span>', rsp.text)
# print(city)
# print(weather)
# print(wd)
# print(zs)

lst = []
for a,b,c,d in zip(city, weather, wd, zs):
    lst.append([a,b,c,d])

print(lst)
for item in lst:
    print(item)

'''
[['景区', '天气', '气温', '旅游指数'], ['三亚', '小雨', '25/30℃', '适宜'], ['九寨沟', '多云转小雨', '12/23℃', '适宜'], ['大理', '多云转小雨', '12/21℃', '适宜'], ['张家界', '小雨', '11/17℃', '适宜'], ['桂林', '多云', '19/27℃', '适宜'], ['青岛', '小雨转阴', '13/17℃', '适宜']]
['景区', '天气', '气温', '旅游指数']
['三亚', '小雨', '25/30℃', '适宜']
['九寨沟', '多云转小雨', '12/23℃', '适宜']
['大理', '多云转小雨', '12/21℃', '适宜']
['张家界', '小雨', '11/17℃', '适宜']
['桂林', '多云', '19/27℃', '适宜']
['青岛', '小雨转阴', '13/17℃', '适宜']
'''
import requests

# 爬取百度logo图片
url = 'https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png'
rsp = requests.get(url)

# 保存到本地
with open('./baidu_logo.png', 'wb') as file:
    file.write(rsp.content)

openpyxl

  • openpyxl模块是用于处理Excel文件的第三方库
  • 可以对Excel文件中的数据进行写入和读取
函数/属性名称功能描述
load_workbook(filename)打开已存在的表格,结果为工作簿对象
workbook.sheetnames工作簿对象的sheetnames属性,用于获取所有工作表的名称,结果为列表类型
sheet.append(lst)向工作表中添加一行数据,新数据接在工作表已有数据的后面
workbook.save(excelname)保存工作簿
Workbook()创建新的工作簿对象
# weather.py
import re

import requests

def get_html():
    # 浏览器网页
    url = 'https://www.weather.com.cn/weather40d/101190101.shtml'
    rsp = requests.get(url) # 打开浏览器并打开网址
    rsp.encoding = 'utf-8' # 设置编码格式,支持中文
    # print(rsp.text) # rsp相应对象,对象名.属性名
    return rsp.text

'''
<span class="name">三亚</span>
<span class="weather">小雨</span>
<span class="wd">25/30℃</span>
<span class="zs">适宜</span>
'''
def parse_html(html_str):
    city = re.findall('<span class="name">([\u4e00-\u9fa5]*)</span>', html_str)
    weather = re.findall('<span class="weather">([\u4e00-\u9fa5]*)</span>', html_str)
    wd = re.findall('<span class="wd">(.*)</span>', html_str)
    zs = re.findall('<span class="zs">([\u4e00-\u9fa5]*)</span>', html_str)
    # print(city)
    # print(weather)
    # print(wd)
    # print(zs)

    lst = []
    for a,b,c,d in zip(city, weather, wd, zs):
        lst.append([a,b,c,d])
    return lst

# test_module_openpyxl.py
import openpyxl

import weather

html = weather.get_html() # 发请求,获取响应结果
lst = weather.parse_html(html) # 解析数据

# 创建一个新的excel工作簿
workbook = openpyxl.Workbook()
# 在Excel工作簿中创建工作表
sheet = workbook.create_sheet('景区天气')
# 向工作表中添加数据

for item in lst:
    sheet.append(item)

workbook.save('景区天气.xlsx')

# test_module_openpyxl_read.py
import openpyxl

# 打开工作簿
workbook = openpyxl.load_workbook('景区天气.xlsx')
# 选择要操作的工作表
sheet = workbook['景区天气']
# 表格数据是二维列表,先遍历的是行,后遍历的是列
lst = []
for row in sheet.rows:
    sublst = []
    for cell in row:
        sublst.append(cell.value)
    lst.append(sublst)

for item in lst:
    print(item)

'''
['景区', '天气', '气温', '旅游指数']
['三亚', '多云', '22/31℃', '适宜']
['九寨沟', '多云转小雨', '8/20℃', '适宜']
['大理', '晴', '5/22℃', '适宜']
['张家界', '中雨转小雨', '15/23℃', '一般']
['桂林', '多云', '23/31℃', '适宜']
['青岛', '多云', '15/20℃', '适宜']
'''

pdfplumber

  • pdfplumber可用于从PDF文件中读取内容
import pdfplumber

with pdfplumber.open('Python3.12.4基础内容.pdf') as pdf:
    for page in pdf.pages: # 遍历页
        print(page.extract_text())
        print(f'-------第{page.page_number}页结束-------')
        if page.page_number >= 6:
            break

Numpy

  • 是Python数据分析方向和其他库的依赖库,用于处理数组、矩阵等数据
# 利用numpy模块对图片进行灰度处理
import matplotlib.pyplot as plt
import numpy as np

# 读取图片
n1 = plt.imread('baidu_logo.png')
# 三维数组,最高维度表示图像的高,次高维度表示图像的宽,最低维表示[R, G, B]颜色
print(type(n1), n1) # png通道数不同,后面dot计算会有差别
plt.imshow(n1)

# 编写一个灰度的公式
n2 = np.array([0.299, 0.587, 0.114])
# 将数组n1(RGB)颜色值与数组n2(灰度公式固定值),进行点乘运算
x = np.dot(n1[..., :3], n2)
# 传入数组,显示灰度
plt.imshow(x, cmap='gray')

# 显示图像
plt.show()

在这里插入图片描述
在这里插入图片描述

Pandas and Matplotlib

  • pandas是基于numpy模块扩展的一个非常重要的数据分析模块,使用pandas读取Excel数据更加的方便
  • Matplotlib是用于数据可视化的模块,使用Matplotlib.pyplot可以非常方便的绘制饼图、柱形图、折线图等
import matplotlib.pyplot as plt
import pandas as pd

df = pd.read_excel('JD手机销售数据.xlsx')
print(df)
# 解决中文乱码
plt.rcParams['font.sans-serif']=['SimHei']
# 设置画布大小
plt.figure(figsize=(10, 6))
labels=df['商品名称']
y=df['北京出库销量']
# print(labels)
# print(y)

# 绘制饼图
plt.pie(y, labels=labels, autopct='%1.1f%%', startangle=90)
# 设置x, y轴刻度
plt.axis('equal')
plt.title('2028年1月北京各手机品牌出库量占比图')
# 显示出来
plt.show()

'''
         商品名称  北京出库销量  上海出库销量  广州出库销量  天津出库销量  苏州出库销量  沈阳出库销量  杭州出库销量
0    荣耀V40轻奢版     747     666     578     284     246     156     152
1  OPPO Reno5     149     100     115      82      63      37      40
2       荣耀X10      88      69      81      48      43      29      29
3     Redmi 9      84      64      75      53      35      13      23
4  Redmi K30S      56      39      51      27      16       9       7
5      OPPOA8      48      45      42      18      22       5      12
'''

在这里插入图片描述

PyEcharts

  • PyEcharts是由百度开源的数据可视化库,它对流行图支持度比较高,它给用户提供了30多种图形,如柱形渐变图、K线周期图等
  • 中文帮助文档:https://pyecharts.org/#/zh-cn/
  • PyEcharts的使用可以分四个步骤实现:
    1. 导入pyecharts包
    2. 找到相应图形模板
    3. 准备相应数据
    4. 对图表进行个性化修饰
from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker

# 示例
'''
c = (
    Pie()
    .add("", [list(z) for z in zip(Faker.choose(), Faker.values())])
    .set_global_opts(title_opts=opts.TitleOpts(title="Pie-基本示例"))
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
    .render("pie_base.html")
)
'''
lst = [['荣耀V40轻奢版', 747], ['OPPO Reno5', 149], ['荣耀X10', 88],
        ['Redmi 9', 84], ['Redmi K30S', 56], ['OPPOA8', 48]]
c = (
    Pie()
    .add("", lst)
    .set_global_opts(title_opts=opts.TitleOpts(title="2028年北京手机出库量占比图"))
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
    .render("2028年1月北京各手机品牌出库量占比图.html")
)


2028年1月北京各手机品牌出库量占比图.html

PIL and jieba

  • PIL是用于图像处理的第三方库,它支持图像存储、处理和现实等操作
    • 安装:pip install pillow
# 图像颜色交换

from PIL import Image

# 加载图片
im = Image.open('baidu_logo.png')
# print(type(im), im)
# <class 'PIL.PngImagePlugin.PngImageFile'> <PIL.PngImagePlugin.PngImageFile image mode=RGBA size=540x258 at 0x290DEDF84D0>

# 提取RGB图像的颜色通道,返回结果是图像的副本
r, g, b, a = im.split()
# print(r)
# print(g)
# print(b)
# print(a)
'''
<PIL.Image.Image image mode=L size=540x258 at 0x181E7E6A180>
<PIL.Image.Image image mode=L size=540x258 at 0x181E7E6B830>
<PIL.Image.Image image mode=L size=540x258 at 0x181E7E6BD40>
<PIL.Image.Image image mode=L size=540x258 at 0x181E8048620>
'''

# 合并通道
om = Image.merge(mode='RGBA', bands=(r,b,g,a))
om.save('new-baidu_logo.png')

在这里插入图片描述

  • jieba是Python中用于对中文进行分词的模块,它可以将一段中文文本分隔成中文词组的序列
import jieba

# 读取文本
with open('万古神帝第2章.txt', 'r', encoding='utf-8') as file:
    s = file.read()
# print(s)

# 分词
lst = jieba.lcut(s)
# print(lst)

# 去重
set1 = set(lst)
# print(set1)

# 统计词,字数大于2的词
d = {}
for item in set1:
    if len(item) >= 2:
        d[item] = 0
# print(d)

# 统计原列表中词出现的次数
for item in lst:
    if item in d:
        d[item] = d.get(item) + 1

# 使用新列表记录统计结果,方便排序
new_lst = []
for item in d:
    new_lst.append([item, d[item]])

new_lst.sort(key=lambda  x:x[1], reverse=True)
print(new_lst[0:21])

'''
[['印记', 44], ['神武', 44], ['开启', 31], ['张若尘', 28], ['王子', 15], ['没有', 12], ['祭祀', 10], ['一个', 9], ['林妃', 9], ['十六岁', 8], ['郡王', 7], ['白色', 7], ['晶石', 6], ['武道', 5], ['眉心', 5], ['大典', 5], ['化为', 5], ['一位', 5], ['依旧', 5], ['只是', 5], ['王后', 4]]
'''

PyInstaller

  • 第三方库PyInstaller可以在Windows操作系统中将Python源文件打包成.exe的可执行文件。还可以在Linux和Mac OS操作系统中对源文件进行打包操作
  • 打包语法结果为:pyinstaller -F 源文件文件名
  • 注意事项:在进行文件打包是,需要打包的文件尽量不要有中文,而且需要打包的文件路径也尽量不要有中文,路径中包含中文有可能会导致打包失败。

实战

实战1

  • 模拟高铁售票系统
    • 假设高铁一节车厢的座位数有6行,每行5列,每个作为初始显示“有票”,用户输入座位位置(如:4,3)后,按回车,则该座位显示为“已售”,使用到第三方模块prettytable
import prettytable as pt


# 显示坐席
def show_ticket(row_num):
    tb = pt.PrettyTable() # 创建一张表格
    # 设置标题(表格头)
    tb.field_names = ['行号','座位1','座位2','座位3','座位4','座位5']
    # 遍历有票
    for i in range(1, row_num+1):
        lst = [f'第{i}行', '有票', '有票', '有票', '有票', '有票']
        tb.add_row(lst)
    print(tb)

# 订票
def order_ticket(row_num, row, col):
    tb = pt.PrettyTable()
    # 设置标题
    tb.field_names = ['行号','座位1','座位2','座位3','座位4','座位5']
    for i in range(1, row_num+1):
        if int(row) == i:
            lst = [f'第{i}行', '有票', '有票', '有票', '有票', '有票']
            lst[int(col)] = '已售'
            tb.add_row(lst)
        else:
            lst = [f'第{i}行', '有票', '有票', '有票', '有票', '有票']
            tb.add_row(lst)
    print(tb)

if __name__ == '__main__':
    row_num = 6
    show_ticket(row_num)

    # 售票
    choose_num=input('请输入您选择的坐席:如4,3表示第四排第三列:')
    row,col = choose_num.split(',')
    order_ticket(row_num, row, col)

    
'''
+-------+-------+-------+-------+-------+-------+
|  行号 | 座位1 | 座位2 | 座位3 | 座位4 | 座位5 |
+-------+-------+-------+-------+-------+-------+
| 第1行 |  有票 |  有票 |  有票 |  有票 |  有票 |
| 第2行 |  有票 |  有票 |  有票 |  有票 |  有票 |
| 第3行 |  有票 |  有票 |  有票 |  有票 |  有票 |
| 第4行 |  有票 |  有票 |  有票 |  有票 |  有票 |
| 第5行 |  有票 |  有票 |  有票 |  有票 |  有票 |
| 第6行 |  有票 |  有票 |  有票 |  有票 |  有票 |
+-------+-------+-------+-------+-------+-------+
请输入您选择的坐席:如4,3表示第四排第三列:3,3
+-------+-------+-------+-------+-------+-------+
|  行号 | 座位1 | 座位2 | 座位3 | 座位4 | 座位5 |
+-------+-------+-------+-------+-------+-------+
| 第1行 |  有票 |  有票 |  有票 |  有票 |  有票 |
| 第2行 |  有票 |  有票 |  有票 |  有票 |  有票 |
| 第3行 |  有票 |  有票 |  已售 |  有票 |  有票 |
| 第4行 |  有票 |  有票 |  有票 |  有票 |  有票 |
| 第5行 |  有票 |  有票 |  有票 |  有票 |  有票 |
| 第6行 |  有票 |  有票 |  有票 |  有票 |  有票 |
+-------+-------+-------+-------+-------+-------+
'''

实战2

  • 推算几天后的日期
    • 编写一个程序,输入开始日期和间隔天数,可以推算出结束日期,使用内置的datetime模块
import datetime


def input_date():
    start_date = input('请输入开始日期(如20281001)后按回车:')
    date_str = start_date[0:4] + '-' + start_date[4:6] + '-' + start_date[6:]
    # 类型转换
    dt = datetime.datetime.strptime(date_str, '%Y-%m-%d')
    return dt

if __name__ == '__main__':
    date = input_date()
    print(date)
    in_day = eval(input('请输入间隔天数:'))
    date = date + datetime.timedelta(days=in_day)
    print('推算的日期是:', date)

'''
请输入开始日期(如20281001)后按回车:20250304
2025-03-04 00:00:00
请输入间隔天数:10
推算的日期是: 2025-03-14 00:00:00
'''

实战3

  • 词云图
    • 使用Python第三方库jieba与wordcloud实现关键词的词云图
import jieba
from wordcloud import WordCloud

# 读取文本
with open('万古神帝第2章.txt', 'r', encoding='utf-8') as file:
    s = file.read()

# 中文分词
lst = jieba.lcut(s)

# 排除词
stopword = ['化为', '一位', '依旧', '没有', '一个']

txt = ''.join(lst)
# 词云图
wordcloud = WordCloud(background_color='white', font_path='msyh.ttc', stopwords=stopword,
                      width=800, height=600)
# 有txt生成词云图
wordcloud.generate(txt)
# 保存图片
wordcloud.to_file('万古神帝第2章词云图.png')

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值