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

Python-第10章-模块及常用的第三方模块-含源码 使用win+R打开运行窗口,输入cmd,直接写pip install requests。当导入到其他模块里面,我不想执行,就使用慈航代码。新建python package,写英文。pip uninstall 模块名称。pip install 模块名称。 阅读详情

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
%S秒00~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')

在这里插入图片描述

Python与CH9329硬件模块:绕过游戏检测的自动化脚本实战 本文详细介绍了如何使用Python与CH9329硬件模块开发绕过游戏检测的自动化脚本。通过硬件级模拟USB HID设备,结合串口通信和pyautogui图像识别,实现高效稳定的游戏自动化操作,特别适用于《英雄联盟》等严格检测软件模拟的游戏。 阅读详情

相关推荐

Windows下高效部署llama.cpp:从环境配置到模型量化的完整指南

本文提供了一份详尽的Windows系统下部署llama.cpp的完整指南。内容涵盖从Python环境配置、使用CMake与MinGW编译工具链的搭建,到编译llama.cpp项目、获取并转换模型为GGUF格式,以及执行模型量化和基础推理测试的全过程。指南旨在帮助开发者在普通Windows电脑上,无需高端显卡,仅凭CPU即可高效运行大语言模型,并重点解决了部署过程中常见的环境与编译错误。

weixin_28841265的博客 878

Python学习 第10章-模块及常用的第三方模块

• requests模块、openpyxl模块、pdfplumber模块、Numpy模块、Pandas模块、Matplotlib模块、PyEcharts库、PIL库、jieba库、Pyinstaller模块等。> 包是一个分层的目录结构,相当于文件夹,将一组功能相近的模块组织在同一个包下。> 在Python中一个.py的文件就是一个模块> 模块的作用。示例10-24PIL模块-图像的颜色交换。示例10-25jieba模块-中文分词。示例10-11random模块的使用。示例10-12time模块的使用。

efan1982的专栏 488

数字IC后端时钟树综合实战:OCC电路优化与时钟树平衡策略

本文深入探讨了数字IC后端设计中时钟树综合的关键挑战,重点分析了OCC电路时钟树优化的必要性。通过实战案例,详细阐述了如何通过手动干预、时钟分组与分段长树等策略,避免工具自动平衡导致的时序违例和资源浪费,从而有效实现时钟树平衡并提升设计质量。

weixin_29306261的博客 325

模块(module)py

一般而言,在python中,xxx.py文件就可以认为是一个模块。一个模块一般是用来存放和管理一类功能的一个文件。:文件夹,用来管理和存放模块,将相关功能的模块放在一个文件夹中注意:普通文件可以当包,但真正的包,存在一个__init__.py文件。一旦导入了这个包,会自动执行该包中的初始化文件。

ANCHG_的博客 462

UR5 机械臂手眼标定(Eye-in-Hand)实战:OpenCV 求解 AX=XB,误差 < 2mm

本文详细介绍了UR5机械臂在Eye-in-Hand配置下的手眼标定实战,通过OpenCV实现高精度标定,最终达到误差小于2mm的工业级精度要求。文章涵盖了标定基础原理、环境搭建、数据采集策略、核心算法实现及误差分析与优化,为视觉机械臂的自主抓取提供了实用指南。

weixin_31476015的博客 293

Dynamics CRM证书更换

  Dynamics CRM产品一般有两种认证方式。第一种是基于声明的内部访问也就是无证书单纯用账号密码验证。第二种就是联合身份认证,需要安装网站证书。   对于联合身份认证的情况因为需要安装证书,而且证书是有一个一年的有效期,所以运维人员每年都需要进行证书更换的操作。以下就是更换证书的方法及过程。 证书根据申请方式一般也分两种,第一种是自建证书,这种证书是没有机构认证的所以安装上之后网站因为没...

bzpfly的博客 877

Python中的内置的模块 和第三方的模块

1.Python内置模块和第三方模块 内置模块: Python中,安装好了Python后,本身就带有的库,就叫做Python的内置的库。 内置模块,也被称为Python的标准库。 Python 2.x的在线库函数查询,可以去这里: The Python Standard Library 第三方库: 而非Python本身自带的库,就是所谓的第三方的库

Ritsu的小黑屋 1万+

auboi5 + d435i 使用easy handeye进行标定时,遇到相关问题记录。

解决办法:在easy_handeye默认的 calibrate.launch 文件中move group 的默认值为 "manipulator",但针对每个人的机械臂,这个值需要更改。以aubo_i5为例,需要将其改为"manipulator_i5",或者自己编写launch文件时,传入参数move group的值,便能顺利解决问题!easy_handeye_calibration_server 进程出现崩溃。

weixin_61025092的博客 957

Python内置模块和第三方模块

Python的强大之处在于他有非常丰富和强大的标准库和第三方库(模块),几乎你想实现的任何功能都有相应的Python库支持,就类似于C#中的类库亦或JAVA的jar包,前端中的JS库。 使用模块有什么好处 其实模块化这个概念在任何的编程语言中都是存在的,可以想象一下,如果一直在一个文件里面编写的代码,那么代码会越来越长,后期很难维护和升级...

weixin_34245169的博客 424

告别License烦恼:手把手教你用VS Code+Cppcheck搭建免费的MISRA-C代码检查环境

本文详细介绍了如何使用VS Code和开源工具Cppcheck搭建免费的MISRA-C代码检查环境,帮助开发者规避商业工具的高额License费用。通过四步环境搭建和实战技巧,实现高效的代码静态检查,提升嵌入式开发的安全性和可靠性。

weixin_42523326的博客 246

安卓讲课笔记1.1 安装Android Studio

1. 能安装配置Android Studio; 2. 能创建安卓虚拟机(AVD); 3. 能创建简单安卓应用

howard2005的专栏 3334

Python加CH9329模块实现云顶之弈自动刷局数

前言 现在的LOL活动是又氪又肝,各种代币宝典之类的太费肝了。所以我就想搞个云顶自动刷局数的脚本。 流程大概如下: 一开始我打算直接用pyautogui这个模块控制鼠标和键盘实现这个功能: 但是LOL在这方面好像有防备,在客户端上面可以控制鼠标移动,但是控制鼠标点击的时候,它没反应。而且到了游戏内时候,直接无法用pyautogui模块控制鼠标移动,也无法控制鼠标点击。这也就是为什么要用CH9329这个硬件模块了(某宝加邮费总共23块不到,外加一个CH340 USB转TTL模块,如果自己没有,

qiximenghu的博客 1万+

SAP VC 可配置物料超级BOM简介

在有些业务中比如:汽车、笔记本、电脑、电梯等产品中,其中组成产品的型号个框架是确认的 ,但是框架内部的BOM是可变的,在客户下销售订单的时候,选取对应的组件 ,让后通过MRP的计算优生产线对这样的销售订单提供生产。这个时候我们需要选择我们需要的内存和硬盘的型号,还记得我们前面创建的特征值对应的吗,A对应的8G、B对应16G、X对应1T硬盘、Y对应2T硬盘,这里我们填写对应的值,我们这里选择16G的内存和2T的硬盘,B和Y。3、当我们选择了可配置物料的生产模式时,基本上就选择了按单生产的生产模式了。

我小时候很黑的博客 1万+

Python与CH9329模块:云顶之弈自动刷局神器

Python与CH9329模块:云顶之弈自动刷局神器 【下载地址】Python加CH9329模块实现云顶之弈自动刷局数 本资源文件提供了一个使用Python和CH9329模块实现《云顶之弈》自动刷局数的脚本。该脚本旨在帮助玩家自动完成游戏中的对局,节省时间和精力 ...

gitblog_06572的博客 643

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【亲测免费】 Python加CH9329模块实现云顶之弈自动刷局数

Python加CH9329模块实现云顶之弈自动刷局数 【下载地址】Python加CH9329模块实现云顶之弈自动刷局数 本资源文件提供了一个使用Python和CH9329模块实现《云顶之弈》自动刷局数的脚本。该脚本旨在帮助玩家自动完成游戏中的对局,节省时间和精力 ...

gitblog_06509的博客 801

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Python在Windows下操作CH341DLL

1 #! /usr/bin/env python 2 #coding=utf-8 3 import os 4 import time 5 from ctypes import * 6 7 class USBI2C(): 8 ch341 = windll.LoadLibrary("CH341DLL.dll") 9 def __init__(se...

weixin_30613343的博客 2674

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

python 实现控制 CH348 的 GPIO 引脚

CH348 是一种常用的 USB 转多路 UART/GPIO 模块,常用于嵌入式系统和 IoT 设备中。通过 Python 控制 CH348 的 GPIO 可以实现对硬件设备的读写操作。CH348 的 GPIO 控制命令通常通过特定的指令集发送。以下是一个简单的示例,假设我们有一个 GPIO 引脚,可以通过发送特定的命令来设置其状态。以上是一个简单的示例,展示了如何使用 Python 控制 CH348 的 GPIO 引脚。同样,可以通过发送特定的命令来读取 GPIO 引脚的状态。完成操作后,关闭串口连接。

luthane的博客 964

Python笔记 Ch.10 模块

常用: 模块引入: import: 这个基本上与Java相同, 就不多说了 import模块只会被导入一次, 不会出现C++中的递归include的情况 通配符 * 如: from modname import * 导入这个模块中的所有内容 from … import: 用于引用模块的一部分(如某个函数) from modname import name1[, name2[, ... nameN] 与直接import的区别 所以首选from方法 __name__属性 前头讲过了: 当模块直接运行自身时

Janus 198

小白的Python入门之访问CH341的I2C

再用platform.architecture()[0]来判断python解释器是64位还是32位的从而得到DLL文件名dll_name,因为将调用的DLL的位数也必须得对上否则会报错;注意这里还有一个“r”前缀,是为了避免路径字符串出现转义符出现解释冲突,比如“\note”的“\n”就是换行符,有了“r”做前缀解释器就不会迷糊了。注意,定义无符号数8bit数据类型的数组,不能用array模块,要用ctypes.c_ubyte,而且清零数组最高效的就是用memset。语言编写的动态链接库中的函数,并操作。

qq_15084199的博客 1864

arduino+ZE08-CH2O甲醛模块,输出甲醛含量

arduino版本的结合ZE08-CH2O甲醛模块,输出甲醛含量

knighthood2001 4657

CH347 USB 高速桥接板使用教程

CH347 USB 高速桥接板使用教程 1. 项目介绍 CH347 USB 高速桥接板是基于沁恒CH347芯片设计的一款调试利器,支持高速USB,可以实现USB to UART,USB to SPI,USB to I2C,USB JTAG,USB to GPIO等功能。该项目旨在提供一个简单易用的工具,帮助开发者快速进行硬件调试和通信。 主要特性 高速USB:支持480Mbps高速模式。 多功能...

gitblog_00972的博客 1624

chatgpt赋能python:Python中的ch:了解全球最流行的编程语言

ch是Python中一个重要的功能模块,可以帮助优化代码的速度和内存使用情况。一般来说,Python中代码执行效率会比其他编程语言的执行效率慢很多,因为Python会在运行时进行类型检查和内存分配等操作。而ch则正式为了解决这个问题而诞生的,可以使得Python中的代码执行速度大幅度提升。通俗一点地说,ch就像是一种专门的“加速器”,可以帮助Python更快地运行。本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc。

boRRjxBZRf的博客 1057

PYTHON+CH347读写25系列flash

1、程序写的很粗糙,只是跑通了读写。2、关于CH347,需要有CH347DLLA64.DLL动态库的支持,可以从官网上下。3、手头没有BK7231,没有去调烧写BK7231。4、博通集成家的芯片一般都是要SPI烧写,如果BK7231调通了,其他应该也差不多。就是如果MCU如何进入SPI 烧写模式方法不同,FLASH型号不同,可能就很难搞了。

weixin_44067125的博客 2113

【Python】学习笔记 -- CH8. 函数及常用的内置函数

超详细的Python学习笔记,Python入门知识总结

我是麻瓜喔的博客 871

python语言中ch用法_Python学习笔记02(Ch07-Ch10)

Chapter07 用户输入和while 循环input()age = input("How old are you?")print(age)#默认为字符串age =int(age)print(age)#强制类型转换whilecurrent_number = 1while current_number <= 5:print(current_number)current_number+= 1自...

weixin_35032509的博客 1715

CH11_模块和包

模块和包

赋能智能制造,驱动人才未来! 856
上一篇: 【Python】学习笔记 -- CH9. 面向对象程序设计
下一篇: 【Python】学习笔记 -- CH11. 文件及IO操作
我是麻瓜喔
博客等级 码龄7年 110粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值