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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/960427.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python-基础环境(01) 虚拟环境,Python 基础环境之虚拟环境,一篇文章助你完全搞懂!

Python的虚拟环境是一种工具,它能够创建一个隔离的独立Python环境。每个虚拟环境都有自己独立的Python解释器和安装的包,不会与其他虚拟环境或系统的全局Python环境发生冲突。虚拟环境特别适用于以下情况: 项目隔离:不同的项目可…

项目开发实践——基于SpringBoot+Vue3实现的在线考试系统(九)(完结篇)

文章目录 一、成绩查询模块实现1、学生成绩查询功能实现1.1 页面设计1.2 前端页面实现1.3 后端功能实现2、成绩分段查询功能实现2.1 页面设计2.2 前端页面实现2.3 后端功能实现二、试卷练习模块实现三、我的分数模块实现1、 页面设计2、 前端页面实现3、 后端功能实现四、交流区…

Redis --- 分布式锁的使用

我们在上篇博客高并发处理 --- 超卖问题一人一单解决方案讲述了两种锁解决业务的使用方法,但是这样不能让锁跨JVM也就是跨进程去使用,只能适用在单体项目中如下图: 为了解决这种场景,我们就需要用一个锁监视器对全部集群进行监视…

ML基础——分类模型的评估指标

以鸢尾花的分类分析为例: 首先我们对于3类分类做了个数字编码,012对应3个分类, 所以这就是3个分类下的预测结果指标: 分类为0的准确率、召回率、F1-score,以及support 因为前面我们数据集划分为了105 train&#xff…

安装Office自定义项,安装期间出错

个人博客地址:安装Office自定义项,安装期间出错 | 一张假钞的真实世界 卸载PowerDesigner后,打开“WPS文字”时出现下图错误: 解决方法: 按“WinR”快捷键,打开【运行】框,在对话框中输入“re…

Arouter详解・常见面试题

前言:ARouter是一个用于 Android App 进行组件化改造的路由框架 —— 支持模块间的路由、通信、解耦。 一、路由简介: 路由:就是通过互联的网络把信息从源地址传输到目的地址的活动。完成路由这个操作的实体设备就是 路由器(Rout…

能量提升法三:赞美

前情回顾: 《能量提升法二:感恩》 片段:“感恩,就像是在跟世界说:谢谢你,我收到了,我很喜欢,请多来点” 把它归还人海,就当作每一个人,都有可能是曾经帮助…

翼星求生服务器搭建【Icarus Dedicated Server For Linux】

一、前言 本次搭建的服务器为Steam平台一款名为Icarus的沙盒、生存、建造游戏,由于官方只提供了Windows版本服务器导致很多热爱Linux的小伙伴无法释怀,众所周知Linux才是专业服务器的唯一准则。虽然Github上已经有大佬制作了容器版本但是容终究不够完美,毕竟容器无法与原生L…

Java编程语言:辉煌的历史与未来前景

如果将软件开发世界比喻成一个宇宙,Java 无疑是其中最亮的星星之一。它从诞生起就改变了软件开发世界的格局。发展到今天,Java仍然是这个世界上最重要的编程语言之一。当然,它也面临着新的挑战。 Java的诞生 回溯到 1991 年,在 …

为什么噪声不是过拟合的原因?

直观解释:为什么噪声不是过拟合的原因?又什么只要没有过拟合就一定有噪声?_哔哩哔哩_bilibili

【JavaWeb06】Tomcat基础入门:架构理解与基本配置指南

文章目录 🌍一. WEB 开发❄️1. 介绍 ❄️2. BS 与 CS 开发介绍 ❄️3. JavaWeb 服务软件 🌍二. Tomcat❄️1. Tomcat 下载和安装 ❄️2. Tomcat 启动 ❄️3. Tomcat 启动故障排除 ❄️4. Tomcat 服务中部署 WEB 应用 ❄️5. 浏览器访问 Web 服务过程详…

C语言【基础篇】之流程控制——掌握三大结构的奥秘

流程控制 🚀前言🦜顺序结构💯 定义💯执行规则 🌟选择结构💯if语句💯switch语句💯case穿透规则 🤔循环结构💯for循环💯while循环💯do -…

sunrays-framework配置重构

文章目录 1.common-log4j2-starter1.目录结构2.Log4j2Properties.java 新增两个属性3.Log4j2AutoConfiguration.java 条件注入LogAspect4.ApplicationEnvironmentPreparedListener.java 从Log4j2Properties.java中定义的配置读取信息 2.common-minio-starter1.MinioProperties.…

【Elasticsearch】内置分词器和IK分词器

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…

简易版RAG实现

之前玩过一次RAG(检索增强生成),链接,十分简陋,现在已经无用了,时隔1年半以后又再需要实现一次。其实现在做RAG已经算相对成熟了,要求不高的话甚至可以直接跑langchain-chatchat这类现成的。因为…

指针的介绍2后

1.二级指针 1.1二级指针的介绍 二级指针是指向指针的指针 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h>int main() {int a 100;int* pa &a;int** ppa &pa;printf("a %d\n", a);printf("&a(pa) %p\n", pa);prin…

Android开发基础知识

1 什么是Android&#xff1f; Android&#xff08;读音&#xff1a;英&#xff1a;[ndrɔɪd]&#xff0c;美&#xff1a;[ˈnˌdrɔɪd]&#xff09;&#xff0c;常见的非官方中文名称为安卓&#xff0c;是一个基于Linux内核的开放源代码移动操作系统&#xff0c;由Google成立…

【狂热算法篇】探秘图论之Dijkstra 算法:穿越图的迷宫的最短路径力量(通俗易懂版)

羑悻的小杀马特.-CSDN博客羑悻的小杀马特.擅长C/C题海汇总,AI学习,c的不归之路,等方面的知识,羑悻的小杀马特.关注算法,c,c语言,青少年编程领域.https://blog.csdn.net/2401_82648291?typebbshttps://blog.csdn.net/2401_82648291?typebbs 在本篇文章中&#xff0c;博主将带…

一个基于Python+Appium的手机自动化项目~~

本项目通过PythonAppium实现了抖音手机店铺的自动化询价&#xff0c;可以直接输出excel&#xff0c;并带有详细的LOG输出。 1.excel输出效果: 2. LOG效果: 具体文件内容见GitCode&#xff1a; 项目首页 - douyingoods:一个基于Pythonappium的手机自动化项目&#xff0c;实现了…

【Unity3D】实现Decal贴花效果,模拟战旗游戏地形效果

目录 一、基础版 二、Post Process 辉光Bloom效果 矩形渐隐 涉及知识点&#xff1a;Decal贴花、屏幕后处理Bloom、屏幕空间构建世界空间、ChracterController物体移动、Terrain地形创建 一、基础版 Unity 2019.4.0f1 普通渲染管线&#xff08;非URP、非HDRP&#xff09; UR…