当前位置: 首页 > article >正文

python基础语法(4) ----- 学习笔记分享

目录

Python 使用库 以及 实战的一些案例

1. 标准库

1.1 认识标准库

1.2 使用import导入模块

1.3 代码示例:日期及结算

1.4 代码示例:字符串操作

1.5 代码示例 : 文件查找工具

2. 第三方库

2.1 认识第三方库

2.2 使用pip

2.3 代码示例:生成二维码

(1) 使用搜索引擎,确定使用哪个库

(2) 查看qrcode文档

2.4 代码示例:操作excel

(1) 安装xlrd

(2) 编写代码

2.5 代码示例:"程序猿鼓励师"

(1) 安装第三方依赖

(2) 准备音频文件

(3) 编写代码

3. 综合案例:学生管理系统

需求说明

功能:

创建入口函数

4. 后续拓展

4.1 python cookbook

4.2 awesome-python

4.3 500 Lines or Less


Python 使用库 以及 实战的一些案例

就是是别人已经写好了的代码,可以让我们直接拿来用

按照库的来源,可以大致分成两大类

  • 标准库 : python自带的库,只要安装了python就可以直接使用

  • 第三方库 : 其他人实现的库,要想使用,需要额外安装

1. 标准库

1.1 认识标准库

在python官方文档上可以看到这些库的内容

The Python Standard Library — Python 3.10.16 documentation

简单来说,主要是这些部分:

  • 内置函数(如print \ input等)

  • 内置类型(针对int \ str \ bool \ list \ dict等)

  • 文本处理

  • 时间日期

  • 数学计算

  • 文件目录

  • 数据存储(操作数据库,数据序列化等)

  • 加密解密

  • 操作系统相关

  • 并发编程相关(多进程 \ 多线程 \ 协程 \ 异步)

  • 网络编程相关

  • 多媒体相关(音频处理 \ 视频处理)

  • 图形化界面相关

  • ......

1.2 使用import导入模块

使用import可以导入标准库的一个模块

import [模块名]
1.3 代码示例:日期及结算

输入任意的两个日期,计算两个日期之间隔了多少天

  • 使用import语句导入标准库中的datetime模块

  • 使用datetime.datetime构造两个日期,参数使用年, 月, 日这样的格式

  • 两个日期对象相减,即可得到日期的差值

import datetime
date1 = datetime.datetime(2006, 3, 30)
date2 = datetime.datetime(2025, 1, 26)
print(date2 - date1)

1.4 代码示例:字符串操作

字符串是python的内置类型,字符串的很多方法不需要导入额外的模块,即可直接使用

(1) 翻转单词顺序

输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变,为简单起见,标点符号和普通字母一样处理

  • 使用 str 的 split 方法进行字符串切分,指定 空格 为分隔符,返回结果是一个列表

  • 使用列表的 reverse 方法进行逆序

  • 使用 str 的 join 方法进行字符串拼接,把列表中的内容进行合并

def reverseWords(s: str) :
    tokens = s.split(' ')
    tokens.reverse()
    return ' '.join(tokens)
​
print(reverseWords('I am a student Damn it!'))

(2) 旋转字符串

给定两个字符串,s和goal,如果在若干次旋转操作之后,s能变成goal,那么返回True.

s的旋转操作就是将s的最左边的字符移动到最右边

例如,若s = 'abcde' ,在旋转一次后结果就是'bcdea'

  • 使用 len 求字符串的长度,如果长度不相同,则一定不能旋转得到

  • 将 s 和自己进行拼接,然后直接使用in方法来判定goal是否是s + s的子串

def rotate(s,goal):
    return len(s) == len(goal) and goal in s + s
​
print(rotate('abcdf','cdeab'))

(3) 统计是给定字符串前缀的字符串数目

给你一个字符串数组words和一个字符串s,其中words[i]s只包含小写英文字母

请你返回words中是字符串s前缀的字符串数目

一个字符串的前缀是出现在字符串开头的子字符串.子字符串是一个字符串中的连续一段字符序列

  • 依次遍历words中的字符串

  • 直接使用字符串的startswith方法即可判定当前字符串是否是s的前缀

def countPrefixes(words,s):
    res = 0   #符合字符串个数
    for word in words:
        if s.startswith(word): # s是以word开头
            res += 1
    return res
​
print(countPrefixes(["a","b","c","ab","bc","abc"],"abc"))
1.5 代码示例 : 文件查找工具

指定一个待搜索路径,同时指定一个待搜索的关键字.

在待搜索路径中查找是否文件名中包含这个关键字.

  • 使用os.walk即可实现目录的递归遍历.

  • os.walk返回一个三元组,分别是当前路径,当前路径下包含的目录名(多个),当前路径下包含的文件名(多个)

import os
​
inputPath = input('请输入待搜索路径:')
pattern = input('请输入待搜索关键词:')
​
for dirpath,filenames in os.walk(inputPath):
    for f in filenames:
        if pattern in f:
            print(f'{dirpath}/{f}')

2. 第三方库

2.1 认识第三方库

第三方库就是别人已经实现好了的库,我们可以直接拿来使用

当我们确定了该使用哪个第三方库之后,就可以使用pip来安装第三方库

2.2 使用pip

pip 是python内置的包管理器,pip是一个可执行程序,就在python的安装目录中

使用以下命令,即可安装第三方库

pip install [库名]

注意:这个命令需要从网上下载,使用时要保证网络流畅

安装成功后,即可使用import导入相关模块,即可进行安装

注意:如果使用pip完成安装第三方库之后,在pycharm中仍然提示找不到对应的模块,

则检查Setting -> Project -> Python Interpreter ,看当前Python解释器设置的是否正确(如果一个机器上安装了多个版本的python,容易出现这种情况)

2.3 代码示例:生成二维码

二维码本质上,就是一段字符串~~

我们可以把任意的字符串,制作成一个二维码图片~~

生活中使用的二维码,更多的是一个URL(网址)

(1) 使用搜索引擎,确定使用哪个库

得到情报,qrcode这个库,可以用来生成二维码

(2) 查看qrcode文档
pip install "qrcode[pil]"

然后

import qrcode
​
img = qrcode.make('阿巴阿巴阿巴')
img.save('qrcode.png')
2.4 代码示例:操作excel
  • 读取excel可以使用xlrd模块

  • 修改excel可以使用xlwt模块

此处以xlrd模块,演示excek的基本操作

(1) 安装xlrd
pip install xlrd==1.2.0

注意:此处要指定版本号安装,如果不是指定版本号,则安装最新版,最新版里面删除了对xlsx格式文件的支持

(2) 编写代码
  • 使用open_workbook方法打开一个excel文件

  • 使用xlsx.sheet_by_index(0)获取到0号标签页

  • 使用table.nrows获取到表格的行数

  • 使用table.cell_value(row,col)获取到表格中row \ col位置的元素值

# 简单操作excel
import xlrd
​
# 1. 打开 xlsx 文件
xlsx = xlrd.open_workbook('E:\\py.项目\\study_11.1\\pythonProject\\test.xlsx')
​
# 2. 获取到指定的标签页
table = xlsx.sheet_by_index(0)
​
# 3. 获取到表格中有多少行
nrows = table.nrows
​
# 4. 进行循环统计操作
total = 0
count = 0
for i in range(1, nrows):
    # 拿到当前同学的班级id
    classId = table.cell_value(i, 1)
    if classId == 1:
        total += table.cell_value(i, 2)
        count += 1
​
print(f'1班同学平均分:{total / count}')
2.5 代码示例:"程序猿鼓励师"

监听键盘按键,每按键20下,就自动播放一个音频,鼓励一下辛苦板砖的自己

(1) 安装第三方依赖
  • pynput用于监听键盘按键,注意版本不要用最新

  • playsound用于播放音频

pip install pynput==1.6.8
pip install playsound==1.2.2
(2) 准备音频文件

此处准备了一个ding.mp3放到和py代码同级目录中

(3) 编写代码
  • 使用from import的格式直接导入模块中的指定对象/函数

  • 使用keyboard.Listener监听键盘按键,其中on_release会在释放按键时被调用

  • 使用listener.start启动监听器,为了防止程序直接退出,使用listener.join让程序等待用户按键

  • 使用count计数,每隔20次,调用playground播放音频文件

import random
​
from pynput import keyboard
from playsound import playsound
from threading import Thread
​
soundList = ['遇见 (电影《向左走向右走》主题曲)-孙燕姿.mp3','说好的幸福呢-周杰伦.mp3','雨天-孙燕姿.mp3']
​
#用来记录用户安乐多少次键盘
count = 0
​
def onRelease(key):
    """
    这个函数,就是在用户释放键盘按键的时候,就会被调用到
    这个函数不是咱们自己主动调用的,而是把这个函数交给了Listener,
    由Listener在用户释放按键的时候自动调用
    像这样的不是咱们自己主动调用,而是交给别人,在合适的时机进行调用,这样的函数叫做"回调函数"
    :param key: 用户按下了哪个键
    :return:
    """
    print(key)
    global count
    count += 1
    if count % 20 == 0:
        #播放音频
        #生成随机数
        i = random.randint(0,len(soundList)-1)
        # 此处的播放音频,消耗的时间比较多,可以创建一个线程,在线程里播放音频
        # playsound(soundList[i])
        t = Thread(target=playsound,args=[soundList[i],])
        t.start()
​
# 当我们创建好listener之后,用户的键盘按键动作就会被捕获到
# 还希望再捕获到之后能够执行一段代码
listener = keyboard.Listener(on_release=onRelease)
listener.start()
listener.join()
​
# 播放音频可能出现输入卡顿 : 因为播放音频是一个比较耗时过程

3. 综合案例:学生管理系统

需求说明

实现一个命令行版本的学生管理系统

功能:
  • 新增学生

  • 显示学生

  • 查找学生

  • 删除学生

  • 存档到文件

创建入口函数
  • 使用一个全局列表students表示所有学生信息

  • 使用menu函数和用户交互,这是一个自定义函数

  • 使用insert,show,find,delete这几个自定义函数完成增删查操作

  • 使用sys.exit实现程序退出

  • 约定好数据的存储格式~约定把数据保存在和py文件同级目录中,文件名为 record.txt

  • 文件内容按照 行文本 的方式来表示~

    • 首先这是一个文本文件,里面包含了很多行~每一行代表一个学生~学生信息之间使用制表符\t来分割~

# 实现一个命令行版本的学生管理系统
import os
import sys
​
# 使用这个全局变量,来管理所有的学生信息
# 这个列表的每个元素都一个"字典",每个字典就分别表示一个同学!
students = []
​
def save():
    """
    用于存档
    :return:
    """
    # 此处的路径是相对路径,含义就是让 record.txt 和 当前的py文件在同一个目录里面
    with open('record.txt','w',encoding='utf-8') as f:
        for s in students:
            f.write(f"{s['studentId']}\t{s['name']}\t{s['gender']}\t{s['className']}\n")
        print(f'[存档成功] 共存储了 {len(students)} 条记录!')
​
def load():
    """
    用于读档
    :return:
    """
    # 如果存档文件不存在,则直接跳过读档流程
    # 为了避免读方式打开文件的时候,文件不存在引起异常
    if not os.path.exists('record.txt'):
        return
    # 读档的时候要把旧的数据清理干净
    global students
    students = []
    with open('record.txt','r',encoding='utf-8') as f:
        for line in f:
            # 针对这一行数据,按照 \t 进行切分操作!
            # 切分之前,要去除末尾的换行.
            line = line.strip() # 去掉一行 / 一个字符串首尾的空白符号(空格,换行,回车,制表符,翻页符,垂直制表符)
            tokens = line.split('\t')
            if len(tokens) != 4:
                print(f'当前行格式存在问题! line={line}')
                continue
            student = {
                'studentId': tokens[0],
                'name': tokens[1],
                'gender': tokens[2],
                'className': tokens[3],
            }
            students.append(student)
    print(f'[读档成功] 共读取了 {len(students)} 条记录!')
​
def menu():
    print(" 1. 新增学生 ")
    print(" 2. 显示学生 ")
    print(" 3. 查找学生 ")
    print(" 4. 删除学生 ")
    print(" 0. 退出程序 ")
    choice = input('请输入您的选择:')
    return choice
​
def insert():
    print('[新增学生] 开始!')
    studentId = input('请输入学生的学号:')
    name = input('请输入学生的姓名:')
    gender = input('请输入学生的性别:')
    if gender not in ('男','女'):
        print('性别输入内容不符合要求,新增失败!')
        return
    className = input('请输入学生的班级:')
    # 使用一个字典把上述的信息给聚合起来
    student = {
        'studentId': studentId,
        'name': name,
        'gender':gender,
        'className':className,
    }
    global students
    students.append(student)
    # 增加一个保存操作
    save()
    print('[新增学生] 完毕!')
​
def show():
    # 遍历全局变量的这个列表,把每个学生的信息给打印出来
    print('[显示学生] 开始!')
    for s in students:
        print(f"[{s['studentId']}]\t{s['name']}\t{s['gender']}\t{s['className']}")
    print(f'[显示学生] 完毕! 共显示了 {len(students)} 条数据!')
​
def find():
    # 根据学生姓名,来进行查找
    print('[查找学生] 开始!')
    name = input('请输入要查找的同学姓名:')
    count = 0
    for s in students:
        if s['name'] == name:
            print(f"[{s['studentId']}]\t{s['name']}\t{s['gender']}\t{s['className']}")
            count += 1
​
    print(f'[查找学生] 结束! 共找到了 {count} 个匹配的同学')
​
def delete():
    print('[删除学生] 开始!')
    studentId = input('请输入要删除学生的学号:')
    # 看看这个学号的同学是哪个字典,然后把这个字典从列表中删掉就好了!
    for s in students:
        if s['studentId'] == studentId:
            print(f"您的操作删除了 {s['name']} 同学的相关信息")
            students.remove(s)
    # 增加一个保存操作
    save()
    print('[删除学生] 完毕!')
​
def main():
    """
    入口函数
    :return:
    """
    #通过控制台和用户进行交互
    print('--------------------------------------')
    print('           欢迎来到学生管理系统           ')
    print('--------------------------------------')
    # 需要在程序启动的时候调用load函数
    load()
    while True:
        # 通过menu函数来打印操蛋项
        choice = menu()
        if choice == '1':
            # 新增学生
            insert()
        elif choice == '2':
            # 显示所有学生
            show()
        elif choice == '3':
            # 查找学生
            find()
        elif choice == '4':
            # 删除学生
            delete()
        elif choice == '0':
            # 退出程序
            print('goodbye!')
            sys.exit(0)
        else:
            print('您的输入有误!请重新输入!')
            # continue 需要进入下次循环,让用户重新输入
​
main()

4. 后续拓展

4.1 python cookbook

python经典进阶书籍,针对各种典型场景提供了一些解决方案

4.2 awesome-python

一些非常实用的程序库

awesome-python: awesome-python 的中文版

4.3 500 Lines or Less

使用简短的python代码来实现一些有意思的程序

https://github.com/aosabook/500lines


http://www.kler.cn/a/522615.html

相关文章:

  • 第十六届蓝桥杯大赛软件赛(编程类)知识点大纲
  • 【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.20 极值追踪:高效获取数据特征的秘诀
  • C# 与.NET 日志变革:JSON 让程序“开口说清话”
  • DeepSeek R1学习
  • 使用Pytest Fixtures来提升TestCase的可读性、高效性
  • 《Java核心技术 卷II》日期和时间API的时间线
  • 基于SpringBoot的网上摄影工作室开发与实现 | 含论文、任务书、选题表
  • 【JavaSE】String类常用字符串方法总结
  • Django-Admin WebView 集成项目技术规范文档 v2.1
  • 【2024年华为OD机试】 (C卷,100分)- 用户调度问题(JavaScriptJava PythonC/C++)
  • games101-(2)线性代数
  • LosslessScaling-学习版[steam价值30元的游戏无损放大/补帧工具]
  • Unexpected WSL error Error code: Wsl/Service/0x8007273的解决
  • 【creo】CREO配置快捷键方式和默认单位
  • DataWhale组队学习 fun-transformer task5
  • 游戏引擎介绍:Game Engine
  • 多维度详细比较 kratos、go-zero、goframe、sponge 框架
  • python3+TensorFlow 2.x 基础学习(一)
  • 在无sudo权限Linux上安装 Ollama 并使用 DeepSeek-R1 模型
  • MongoDB的读写分离技术方案
  • php:代码中怎么搭建一个类似linux系统的crontab服务
  • CICD集合(五):Jenkins+Git+Allure实战(自动化测试)
  • 【elasticsearch】tasks 查看任务
  • hadoop==docker desktop搭建hadoop
  • 【Pytest】生成html报告中,中文乱码问题解决方案
  • 利用现有模型处理面部视频获取特征向量(3)