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

Python实战小项目分享

        Python实战小项目包括网络爬虫、数据分析和可视化、文本处理、图像处理、聊天机器人、任务管理工具、游戏开发和网络服务器等。这些项目提供了实际应用场景和问题解决思路,可以选择感兴趣的项目进行实践,加深对Python编程的理解和掌握。在实践过程中,可以结合相关文档和教程深入学习相应知识点。

全部资源链接:链接:https://pan.baidu.com/s/1cjX9XuePqACt53zpesSPiQ?pwd=5m9l 
提取码:5m9l 

一、资源分享

(一)python教材及基础知识讲解

链接:https://pan.baidu.com/s/1H0UaND9Ai-YRfbbmrvSASw 
提取码:rms9

(二)python安装

链接:https://pan.baidu.com/s/14tPYsFsleDqDMLqbN6azZA 
提取码:yl93

(三)100道Python练手题目

链接:https://pan.baidu.com/s/1AJ0uvFsa0SQ0ZZJ-xryo7Q 
提取码:k734

(四)python实战项目

链接:https://pan.baidu.com/s/1qazUy0zytcpTPKy4o1-1tQ 
提取码:stjc

二、代码调试思路

        程序能一次写完并正常运行的概率很小,基本不超过1%,总会有各种各样的bug需要修正。写程序花费的时间往往要小于调试的时间,这个是基本规律。bug很复杂时,我们需要知道出错时,哪些变量的值是正确的,哪些变量的值是错误的,因此,需要一整套调试程序的手段来修复bug。下面我们来看下常用的Python调试方法

(一)总体调试方法概览

调试Python程序时,以下是一些常用的思路和方法:

  1. 打印输出:在代码中插入print语句,输出变量的值或者特定的消息,以便跟踪程序执行过程中的问题。

  2. 断点调试:使用调试器(如pdb、PyCharm等)在代码中设置断点,以便在特定位置停止程序的执行,并逐行检查代码。

  3. 异常捕获:使用try-except语句捕获异常,将发生异常的代码块包裹起来,并在except块中打印异常信息,帮助定位问题。

  4. 日志记录:使用Python内置的logging模块或第三方库(如loguru、logbook等)进行日志记录,以便在程序运行时获取详细的调试信息。

  5. 单元测试:编写单元测试代码对程序进行逐个模块的测试,确保每个部分都能正常工作。当出现问题时,可以通过单元测试发现具体的错误。

  6. 缩小范围:如果程序很大或者复杂,可以缩小问题范围,逐渐排查可能导致错误的部分,从而快速确定问题所在。

  7. 查阅文档和资料:利用搜索引擎、官方文档、论坛和社区等资源寻找与问题相似的情况和解决方案,避免重复解决已有的问题。

  8. 代码审查:请其他开发者或同事对你的代码进行审查,他们可能能够发现你忽略的问题或提供新的思路。

  9. 运行环境:检查程序运行所需的环境、依赖项和版本是否满足要求,确保程序在正确的环境下运行。

以上方法并非全部,具体使用哪些方法取决于问题类型和场景。在调试过程中,耐心和细致是非常重要的,逐步排查问题直到找到根本原因。

(二)断点打印法

        第一种方法简单直接粗暴有效,就是用print把可能有问题的变量打印出来看看:

def foo(s):n = int(s)print '>>> n = %d' % nreturn 10 / n
def main():foo('0')
main()

        执行后在输出中查找打印的变量值:

$ python err.py
>>> n = 0
Traceback (most recent call last):...
ZeroDivisionError: integer division or modulo by zero

        用print最大的坏处是将来还得删掉它,想想程序里到处都是print,运行结果也会包含很多垃圾信息。所以,我们又有第二种方法。

(三)断言

        凡是用print来辅助查看的地方,都可以用断言(assert)来替代:

def foo(s):n = int(s)assert n != 0, 'n is zero!'return 10 / n
def main():foo('0')

        assert的意思是,表达式n != 0应该是True,否则,后面的代码就会出错。

        如果断言失败,assert语句本身就会抛出AssertionError:

$ python err.py
Traceback (most recent call last):...
AssertionError: n is zero!

        程序中如果到处充斥着assert,和print相比也好不到哪去。不过,启动Python解释器时可以用-O参数来关闭assert:

$ python -O err.py
Traceback (most recent call last):...
ZeroDivisionError: integer division or modulo by zero

        关闭后,你可以把所有的assert语句当成pass来看。

(四) logging日志

        把print替换为logging是第3种方式,和assert比,logging不会抛出错误,而且可以输出到文件:

import logging
s = '0'
n = int(s)
logging.info('n = %d' % n)
print 10 / n

        logging.info()就可以输出一段文本。运行,发现除了ZeroDivisionError,没有任何信息。别急,在import logging之后添加一行配置再试试:

import logging
logging.basicConfig(level=logging.INFO)

        这就是logging的好处,它允许你指定记录信息的级别,有debug,info,warning,error等几个级别,当我们指定level=INFO时,logging.debug就不起作用了。同理,指定level=WARNING后,debug和info就不起作用了。这样一来,你可以放心地输出不同级别的信息,也不用删除,最后统一控制输出哪个级别的信息。

        logging的另一个好处是通过简单的配置,一条语句可以同时输出到不同的地方,比如console和文件。

(五)pdb调试

        第4种方式是启动Python的调试器pdb,让程序以单步方式运行,可以随时查看运行状态。我们先准备好程序:

s = '0'
n = int(s)
print 10 / n

        运行:

$ python -m pdb err.py
> /Users/PythonTab/Github/sicp/err.py(2)<module>()
-> s = '0'

        以参数-m pdb启动后,pdb定位到下一步要执行的代码-> s = ‘0’。输入命令l来查看代码:

(Pdb) l1   # err.py2 -> s = '0'3   n = int(s)4   print 10 / n
[EOF]

        输入命令n可以单步执行代码:

(Pdb) n
/Users/PythonTab/Github/sicp/err.py(3)<module>()
-> n = int(s)
(Pdb) n
/Users/PythonTab/Github/sicp/err.py(4)<module>()
-> print 10 / n

        任何时候都可以输入命令p 变量名来查看变量:

(Pdb) p s
'0'
(Pdb) p n
0

        输入命令q结束调试,退出程序:

(Pdb) n
ZeroDivisionError: 'integer division or modulo by zero'
> /Users/PythonTab/Github/sicp/err.py(4)<module>()
-> print 10 / n
(Pdb) q

        这种通过pdb在命令行调试的方法理论上是万能的,但实在是太麻烦了,如果有一千行代码,要运行到第999行得敲多少命令啊。还好,我们还有另一种调试方法。

pdb.set_trace()

        这个方法也是用pdb,但是不需要单步执行,我们只需要import pdb,然后,在可能出错的地方放一个pdb.set_trace(),就可以设置一个断点:

import pdb
s = '0'
n = int(s)
pdb.set_trace() # 运行到这里会自动暂停
print 10 / n

        运行代码,程序会自动在pdb.set_trace()暂停并进入pdb调试环境,可以用命令p查看变量,或者用命令c继续运行:

$ python err.py 
> /Users/PythonTab/Github/sicp/err.py(7)<module>()
-> print 10 / n
(Pdb) p n
0
(Pdb) c
Traceback (most recent call last):File "err.py", line 7, in <module>print 10 / n
ZeroDivisionError: integer division or modulo by zero

这个方式比直接启动pdb单步调试效率要高很多,但也高不到哪去。

(六) IDE调试

        如果要比较爽地设置断点、单步执行,就需要一个支持调试功能的IDE。目前比较好的Python IDE有PyCharm,另外,Eclipse加上pydev插件也可以调试Python程序。

 

三、参考引用

[1]Python常用的程序调试方法-CSDN博客

相关文章:

Python实战小项目分享

Python实战小项目包括网络爬虫、数据分析和可视化、文本处理、图像处理、聊天机器人、任务管理工具、游戏开发和网络服务器等。这些项目提供了实际应用场景和问题解决思路&#xff0c;可以选择感兴趣的项目进行实践&#xff0c;加深对Python编程的理解和掌握。在实践过程中&…...

使用Dockerfile生成docker镜像和容器的方法记录

一、相关介绍 Docker 是一个开源的容器化平台&#xff0c;其中的主要概念是容器和镜像。 容器是 Docker 的运行实例。 它是一个独立并可执行的软件包&#xff0c;包含了应用程序及其依赖的所有组件&#xff08;如代码、运行时环境、系统工具、库文件等&#xff09;。容器可以在…...

美国亚马逊UL60335认证怎么办理,费用是多少

UL60335认证是由美国安全实验室&#xff08;UnderwritersLaboratories&#xff09;颁发的&#xff0c;它对各类家用电器进行严格的测试和认证&#xff0c;确保其在正常使用情况下不会给消费者带来任何伤害。 本文将从不同的角度来叙述亚马逊UL60335认证的重要性和成败因素。 1.…...

前端开发规范总结

1、 前言 前端开发中&#xff0c;不同的开发者有不同的代码编写习惯&#xff0c;但实际项目中有的公司是需要协同开发的&#xff0c;想要高效的协同&#xff0c;规定一个大家都能接受的规范就尤为重要。 坚持好的代码风格规范&#xff0c;从你我做起。 2、代码规范的好处 …...

前端react入门day01-了解react和JSX基础

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 React介绍 React是什么 React的优势 React的市场情况 开发环境搭建 使用create-react-app快速搭建…...

浅析 C# Console 控制台为什么也会卡死

一&#xff1a;背景 1. 讲故事 在分析旅程中&#xff0c;总会有几例控制台的意外卡死导致的生产事故&#xff0c;有经验的朋友都知道&#xff0c;控制台卡死一般是动了 快速编辑窗口 的缘故&#xff0c;截图如下&#xff1a; 虽然知道缘由&#xff0c;但一直没有时间探究底层…...

zookeeper详解

一 zookeeper介绍 首先需要了解zookeeper是什么&#xff0c;zookeeper是一个分布式协调服务。所谓分布式协调主要是来解决分布式系统中多个进程之间的同步限制&#xff0c;防止出现脏读&#xff0c;例如我们常说的分布式锁。 zookeeper中的数据是存储在内存当中的&#xff0c;因…...

达索智能制造解决方案,敏捷电芯制造如何赋能企业竞争力 | 百世慧®

敏捷电芯制造赋能企业竞争力 全球电池市场正在快速扩大&#xff0c;为制造商带来巨大商机。 锂电行业的智能制造如何应用&#xff1f; 电池制造业的市场趋势是什么&#xff1f; 电池制造商面临哪些挑战&#xff1f; 特别是电池电芯制造方面&#xff0c;如何克服挑战获得竞…...

自然语言处理---迁移学习实践

1 微调脚本介绍 指定任务类型的微调脚本: huggingface研究机构提供了针对GLUE数据集合任务类型的微调脚本, 这些微调脚本的核心都是微调模型的最后一个全连接层。通过简单的参数配置来指定GLUE中存在任务类型(如: CoLA对应文本二分类&#xff0c;MRPC对应句子对文本二分类&…...

看得懂的——数据库中的“除”操作

通过一个例子来解释数据库中的“除”操作 R➗S其实就是判断关系R中X各个值的象集Y是否包含关系S中属性Y的所有值 求解步骤 第一步 找出关系R和关系S中相同的属性&#xff0c;即Y属性。在关系S中对Y做投影&#xff08;即将Y列取出&#xff09;&#xff1b;所得结果如下&#x…...

el-input无法输入的问题和表单验证失败问题(亲测有效)-开发bug总结4

大部分无法输入的问题&#xff1a;基本都是没有进行v-model双向数据绑定&#xff0c;这个很好解决。 本人项目中遇到的bug问题如下&#xff1a; 点击添加&#xff0c;表单内可输入用户名 和 用户姓名&#xff0c;但有时会偶发出现无法这两个input框里面无法输入内容。 原因&a…...

OpenCV+QT实现的数字图像处理算法合集

源码下载地址&#xff1a; 基于OpenCV和QT的图像处理源码 图像预处理 灰度处理 灰度直方图 灰度均衡 梯度锐化 Laplace锐化 边缘检测 Roberts Sobel Laplace Prewitt canny Krisch 噪声 椒盐噪声 高斯噪声 滤波 均值滤波 中值滤波 双边滤波 形态学滤波 高斯滤波 图像变…...

想要查看员工与客户聊天记录和跟进情况,有什么工具推荐吗?

想要查看员工与客户 聊天记录和跟进情况 有什么工具推荐吗&#xff1f; 想要查看员工与客户聊天记录和每天新增客户&#xff0c;可以使用微信管理系统这个工具。 微信管理系统是一个能够同时登录多个微信&#xff0c;实现一个人管理多个微信的工具。它分为两大版块&#xff0c;…...

androdi知识笔记

jbr embed&#xff1a;android studio自带的jdk AGP(android gradle plugin) aar jar 利用java语言可以写应用程序&#xff08;利用已有库加速开发过程&#xff09;&#xff0c;也可以自己开发库用于特定功能&#xff08;供引用&#xff09;。 循环啊是个&#xff0…...

华为数通方向HCIP-DataCom H12-831题库(多选题:21-40)

第21题 网络管理员A希望使用ACL匹配特定的路由条目,请问以下哪些路由条目将被图中的ACL规侧匹配? acl number 2000 rule 10 permit source 10.0.0.0 0.0.6.0A、10.0.0.1/32 B、10.0.0.0/24 C、10.0.1.0/24 D、10.0.2.0/24 答案: 解析: 通配符十进制6转换二进制为00000110,…...

数据要素安全流通:挑战与解决方案

文章目录 数据要素安全流通&#xff1a;挑战与解决方案一、引言二、数据要素安全流通的挑战数据泄露风险数据隐私保护数据跨境流动监管 三、解决方案加强数据安全防护措施实施数据隐私保护技术建立合规的数据跨境流动机制 四、数据安全流通的未来趋势01 数据价值与产业崛起02 多…...

【Mybatis源码】XMLConfigBuilder构建器 - 加载XML与创建Configuration对象的过程

XMLConfigBuilder是Mybatis中定义的进行构建Configuration对象的类,此类用于读取XML配置文件创建并初始化Configuration对象;本篇我们主要介绍加载XML文件与创建Configuration对象的过程。 一、Configuration对象的创建过程 下面是从Configuration类中取到的代码片段: pu…...

台灯显色指数多少好?推荐显色指数优秀的护眼台灯

台灯的显色指数是其非常重要的指标&#xff0c;它可以表示灯光照射到物体身上&#xff0c;物体颜色的真实程度&#xff0c;一般用平均显色指数Ra来表示&#xff0c;Ra值越高&#xff0c;灯光显色能力越强。常见的台灯显色指数最低要求一般是在Ra80以上即可&#xff0c;比较好的…...

【2024秋招】2023-8-5-小红书-数据引擎团队后端开发提前批面经

1 面试官介绍 OLAP引擎&#xff0c;离线引擎&#xff0c;大数据分析中间件 2 自我介绍 缺点&#xff1a; &#xff08;1&#xff09;面试官让重点介绍自己最在行的项目&#xff0c;我真的在自我介绍上扯了一些别的东西… &#xff08;2&#xff09;在面试的时候因为想看简…...

【Docker从入门到入土 4】使用Harbor搭建Docker私有仓库

私有仓库 一、Harbor简介1.1 什么是Harbor?1.2 Harbor的特性1.3 Harbor和docker registry的关系1.4 Harbor的构成1.4 Harbor 配置文件中的两类参数1.4.1 所需参数1.4.2 可选参数 二、Harbor部署2.1 部署Docker-Compose服务2.2 部署 Harbor 服务Step1 下载或上传 Harbor 安装程…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

WPF八大法则:告别模态窗口卡顿

⚙️ 核心问题&#xff1a;阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程&#xff0c;导致后续逻辑无法执行&#xff1a; var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题&#xff1a…...

Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合

作者&#xff1a;来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布&#xff0c;Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明&#xff0c;Elastic 作为 …...