尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

350道Python练习题合集:每日一练,从基础语法到数据分析

350道Python练习题合集:每日一练,从基础语法到数据分析 这次的标题很直白但确实抓到了自学 Python 最大的痛点语法看懂了、教程收藏了一动手写代码就卡壳。这个项目就是一套 350 道 Python 练习题合集目标是用“每天练一道、连续练 350 天”的方式把编程手感练出来。先算一笔账如果每天认真做 1 道中等难度的题从变量、数据类型、条件判断、循环、函数、文件操作一路练到网络请求、数据分析、算法思维350 道题足够覆盖大多数初级岗位和日常自动化脚本涉及的语法点。这篇文章不聊虚的直接拆解这套练习题适合谁、怎么规划、怎么避免“刷了 100 道还是不会写”的坑并给出一套可以落地的日刷题方案。文章会包含四部分内容一是这套题的核心能力拆解和适用边界二是本地 Python 练习环境的搭建三是按难度分阶段的刷题路径与典型题型演示四是刷题过程中常见报错、卡壳、遗忘问题的排查和应对。不管你是刚装好 Python、还在纠结环境变量怎么配的新手还是已经能写爬虫但基础不牢固的进阶学习者这套题都可以作为日常训练素材。1. 核心能力速览能力项说明项目类型Python 编程练习题合集共 350 道练习形式每日一练按天推进类似刷题打卡覆盖内容基础语法、数据类型、流程控制、函数、文件处理、面向对象、数据分析、爬虫、算法入门等适合人群Python 零基础学习者、转码求职者、基础不牢的进阶用户环境要求仅需本机安装 Python 3.x对电脑配置无特殊要求单题耗时简单题 15-30 分钟中等题 30-60 分钟综合题可能 1-2 小时是否收费以公开练习题集为常见形态具体以来源为准是否支持批量适合按目录批量练习可以结合脚本自动验证输出依赖第三方库基础阶段基本不需要爬虫/数据分析阶段通常要用 requests、beautifulsoup4、pandas、matplotlib 等这里有一个容易忽略的优点这套题的“训练密度”比看视频高得多。看视频是被动接收做题是主动回忆。350 道题如果全部独立完成相当于把 Python 的常用语法点主动回忆了 350 次这个记忆强度远超单纯读文档。2. 适用场景与使用边界先说适合什么场景。第一是给零基础刚学完 Python 基础语法的人做巩固训练。比如你已经看完了变量、字符串、列表、字典、if、for、while、函数定义但合上教程就写不出一段完整代码这时候直接刷基础题效果最好。第二是给准备笔试、机试的求职者做手感恢复。很多开发岗位的第一轮笔试就是编程题题目难度往往在“字符串处理 列表操作 逻辑判断”这个层级。350 道题里的大量基础题、中等题其实就是在反复训练这些机试高频考点。第三是给日常工作需要写自动化脚本的人做常用 API 记忆训练。比如文件批量重命名、Excel 数据读取、URL 参数解析、日志关键字统计这些操作在练习题里都能找到对应变体。刷过一遍之后遇到需求能更快反应过来“这个用哪个库、哪个函数、什么套路”。再说使用边界。这套题不适合完全零基础的人当第一份学习材料。如果你连变量是什么、print 怎么用、缩进报错怎么解决都不知道直接刷题会非常痛苦做题一小时、报错半小时。建议先用 1-2 周时间过一遍基础教程再来刷题。它也不适合当成系统性的项目实战教程。练习题解决的是“语法熟练度”和“基础算法思维”但一个完整的项目还涉及工程结构设计、依赖管理、单元测试、代码评审、部署上线等内容。刷完 350 道题能说明基础扎实但不代表能独立完成一个商业级项目。另外练习题的答案参考价值有限。很多题目的解法不唯一尤其是在字符串处理、列表推导式、递归转循环这些环节不同写法都能得出正确答案。建议把参考答案当成一种思路对照不要当成唯一标准。还有一点需要注意刷题过程中的代码和练习题的题目文本如果涉及商业转载、整理发布需要确认来源的授权方式。自己练习无所谓但要公开发布合集、做成课程或培训材料时注意版权边界。3. 环境准备与前置条件3.1 安装 Python 解释器刷题前必须保证本机有可用的 Python 环境。这里给出最稳妥的检查方式打开命令行工具Windows 上是 CMD 或 PowerShellmacOS / Linux 上是终端执行python --version如果提示Python 3.8说明环境可用。如果是 Linux 环境下提示python3才能识别就改用python3 --version如果提示“不是内部或外部命令”或者“command not found”说明 Python 还没有安装或没有加入环境变量。建议直接到 Python 官网下载对应系统的安装包安装时务必勾选Add Python to PATH选项这个操作能避免绝大多数“pip not found”和“python not found”问题。3.2 配置虚拟环境与包管理刷题前期不需要任何第三方库但到了爬虫和数据分析阶段你会用到 requests、bs4、pandas、matplotlib。为了不让全局环境越来越乱给练习题单独建一个虚拟环境是更工程化的做法。在练习目录下执行# 创建虚拟环境venv 是 Python 自带的模块 python -m venv py_practice_env # Windows 激活 py_practice_env\Scripts\activate # macOS / Linux 激活 source py_practice_env/bin/activate激活后命令行提示符前缀会变成(py_practice_env)。接下来安装常用库pip install requests beautifulsoup4 pandas matplotlib pytest3.3 选择合适的代码编辑器刷题阶段对编辑器的要求不高。VSCode 是综合体验最好的选择安装 Python 扩展后会有代码补全、语法检查、单文件运行按钮对新手很友好。也可以先用更轻量的方式给每个练习题单独建一个.py文件用命令直接在终端运行# 运行当前目录下的 practice_001.py python practice_001.py这样的好处是每道题都是一个独立脚本运行输出清晰不会因为 IDE 的项目结构太复杂而分心。3.4 建立练习目录结构建议从一开始就建立规范目录python_350_practice/ ├── 01_basic_syntax/ ├── 02_data_types/ ├── 03_control_flow/ ├── 04_functions/ ├── 05_builtin_modules/ ├── 06_file_io/ ├── 07_oop/ ├── 08_regex_requests/ ├── 09_data_analysis/ ├── 10_algorithm/ ├── notes.md └── progress.md这样分目录存放后期复盘“哪一类题错得多”非常方便。4. 350 道题的阶段划分与刷题节奏350 道题如果只是从第 1 道做到第 350 道很容易在中后期失去方向。更合理的思路是按难度和能力目标分成四个阶段。4.1 第一阶段语法基础与输入输出约 50 题这一阶段的目标是熟练掌握变量、数据类型、字符串操作、列表、元组、字典、集合、条件判断、循环。典型题目包括数字翻转、字符串反转、列表去重、求最大值最小值、简单计算器、斐波那契数列前 N 项、九九乘法表、水仙花数、闰年判断、成绩等级划分。这个阶段的题目基本不涉及文件操作和外部库每一题的核心就是“读题 - 设计步骤 - 写代码 - 跑通”。4.2 第二阶段函数、递归与常用模块约 80 题这一阶段开始考察代码组织能力。同样一个功能写在全局里和封装成函数可读性差别很大。典型题目包括判断质数的函数封装、最大公约数与最小公倍数、递归计算阶乘、字符串字符频次统计、用 random 模块生成随机密码、用 datetime 模块计算日期差、用 collections.Counter 统计词频。这一阶段要特别注意“函数设计”训练不要把所有逻辑堆在一个 main 里。4.3 第三阶段文件处理、异常与面向对象约 100 题这个阶段开始贴近真实开发场景。你不再只是处理内存里的数据而是要读写文件、处理异常、设计类。典型题目包括读取文本文件统计行数和单词数、批量重命名目录下的文件、JSON 数据的读取与写入、CSV 文件解析、自定义异常类、设计一个简单的银行账户类、图书管理类、学生成绩管理类。面向对象在练习里非常容易做成“披着类外衣的面向过程”这一阶段的题目一定要多想想属性和行为怎么划分。4.4 第四阶段爬虫、数据分析与算法入门约 120 题最后这个阶段是拉开差距的地方。典型题目包括requests 请求网页并解析标题、正则表达式提取邮箱和手机号、用 BeautifulSoup 解析表格、用 pandas 读取 Excel 做数据清洗、用 matplotlib 画折线图和柱状图、二分查找、冒泡排序、选择排序、递归实现全排列、动态规划入门爬楼梯、背包问题简化版。这一阶段的题不再只看“能不能跑通”还要看“效率是否合理”“代码是否简洁”。5. 典型题型演示与解题思路下面选几类高频题型给出完整的题目描述、思路分析、参考代码和验证方式。这里给的是通用示例实际练习时可以根据 350 道题里的具体变体调整。5.1 数字反转类题目描述给定一个整数将其数字顺序反转并输出反转后的整数。例如输入12345输出54321。思路分析最直接的思路是把整数转成字符串利用字符串切片反转再转回整数。需要考虑负数情况。参考代码def reverse_number(n: int) - int: sign -1 if n 0 else 1 n abs(n) reversed_str str(n)[::-1] return sign * int(reversed_str) if __name__ __main__: print(reverse_number(12345)) # 54321 print(reverse_number(-6789)) # -9876验证方式运行后检查输出是否为54321和-9876。如果符号处理不对负数用例会直接暴露问题。5.2 列表去重类题目描述给定一个包含重复元素的列表去除重复项并保持原有顺序。例如输入[3, 1, 3, 2, 1, 5]输出[3, 1, 2, 5]。思路分析使用dict.fromkeys()或遍历 set去重。遍历法更容易控制顺序。参考代码def deduplicate(items: list) - list: seen set() result [] for item in items: if item not in seen: seen.add(item) result.append(item) return result if __name__ __main__: data [3, 1, 3, 2, 1, 5] print(deduplicate(data)) # [3, 1, 2, 5]验证方式检查重复元素是否被移除同时确认顺序没有被打乱。这里用set做查找时间复杂度是 O(n)比result.count()或in list的方式高效。5.3 字符频率统计类题目描述统计一段英文文本中每个字符出现的次数按出现次数从高到低输出。思路分析用collections.Counter一行能完成计数关键点在排序输出。参考代码from collections import Counter text hello python practice counter Counter(text.replace( , )) for char, count in counter.most_common(): print(f{char}: {count})验证方式检查输出中每个字符的计数是否与人工统计一致。这个题目价值在于让你熟悉 Python 标准库的高频 API以后做日志分析、文本统计时能直接迁移。5.4 猜数字小游戏类题目描述程序随机生成一个 1-100 的整数用户输入数字猜测程序提示“大了”或“小了”直到猜中为止并统计猜测次数。思路分析random.randint生成随机数while循环接收用户输入try-except处理非数字输入。参考代码import random target random.randint(1, 100) guess_count 0 while True: try: guess int(input(请输入你猜的数字)) guess_count 1 if guess target: print(大了继续猜) elif guess target: print(小了继续猜) else: print(f恭喜猜中你用了 {guess_count} 次) break except ValueError: print(输入不合法请输入整数)验证方式分别输入非法字符、边界值1、100、正确值确认程序不会崩溃。这个题目虽然简单但考察了异常处理、循环控制、类型转换三个关键点。5.5 文件读取与统计类题目描述读取本地data.txt文件统计文件中的总行数、总单词数和出现次数最多的 5 个单词。思路分析逐行读取文件用split()拆分单词用Counter统计词频。参考代码from collections import Counter file_path data.txt line_count 0 word_count 0 word_counter Counter() with open(file_path, r, encodingutf-8) as f: for line in f: line_count 1 words line.strip().split() word_count len(words) word_counter.update(words) print(f总行数: {line_count}) print(f总单词数: {word_count}) print(词频 Top 5:) for word, count in word_counter.most_common(5): print(f{word}: {count})验证方式先手动创建一个包含已知内容的data.txt人工核对输出。如果中文文本统计有误注意检查分词逻辑split()默认只按空白字符切分不适合中文句子。5.6 面向对象综合类题目描述设计一个BankAccount类支持存款、取款、查询余额。取款金额超过余额时抛出异常。思路分析类属性保存余额存款和取款各封装一个方法取款前做余额校验。参考代码class InsufficientFundsError(Exception): pass class BankAccount: def __init__(self, owner: str, initial_balance: float 0.0): self.owner owner self.balance initial_balance def deposit(self, amount: float) - None: if amount 0: raise ValueError(存款金额必须大于 0) self.balance amount print(f存款成功当前余额: {self.balance}) def withdraw(self, amount: float) - None: if amount 0: raise ValueError(取款金额必须大于 0) if amount self.balance: raise InsufficientFundsError(余额不足) self.balance - amount print(f取款成功当前余额: {self.balance}) def get_balance(self) - float: return self.balance if __name__ __main__: acc BankAccount(张三, 1000) acc.deposit(500) acc.withdraw(200) print(acc.get_balance())验证方式分别测试正常存款、正常取款、超额取款、存款金额为负数四种情况确认自定义异常能正确触发。6. 刷题进度管理与自动验证方法350 道题不是刷得越快越好而是要保证“刷过的题过一个月还能写得出来”。这里推荐一套结合 Git 和自动化测试的练法。6.1 用 Git 记录每日进度在练习目录下初始化 Git 仓库每完成一道题就提交一次git init git add . git commit -m day 01: 完成字符串反转练习题每天只写一句提交信息长期积累下来就是一条清晰的成长路径。遇到某类题反复出错也能通过 commit 记录定位到具体时间段。6.2 用 pytest 做输出验证不要把“运行一次看到结果正确”当成完成。更可靠的做法是给关键函数写自动化断言。比如上面提到的reverse_number函数可以单独建一个测试文件# test_practice_001.py from practice_001 import reverse_number def test_reverse_positive(): assert reverse_number(12345) 54321 def test_reverse_negative(): assert reverse_number(-6789) -9876 def test_reverse_zero(): assert reverse_number(0) 0然后运行pytest -v这样每次改动代码只要跑一遍测试就能确认功能没有被破坏。对于需要反复复习的题型这个习惯极其有用。6.3 制作刷题进度表建议在progress.md中维护如下表格| 题号 | 题型 | 难度 | 完成日期 | 是否通过自测 | 易错点 | |------|------|------|----------|--------------|--------| | 001 | 字符串反转 | 简单 | 2025-01-01 | 是 | 负数符号处理 | | 002 | 列表去重 | 简单 | 2025-01-01 | 是 | 保持原顺序 |记录易错点是复盘的关键。很多人刷题只记录“做完了”不记录“错在哪”导致第二轮复习时照样踩同一个坑。7. 资源占用与性能观察方法Python 练习题本身对硬件没有要求但代码性能是可以观察的。当题目涉及大量数据、复杂算法时建议养成测算运行时间的习惯。使用 Python 自带的timeit模块可以精确测量一段代码的执行时间import timeit # 测试列表推导式和 for 循环构建列表的性能差异 for_loop_time timeit.timeit( result [] for i in range(1000): result.append(i * 2) , number10000 ) list_comp_time timeit.timeit( result [i * 2 for i in range(1000)], number10000 ) print(ffor 循环: {for_loop_time:.4f}s) print(f列表推导式: {list_comp_time:.4f}s)这个习惯能帮你形成基本的性能敏感度。遇到“一千万级数据去重”“大文本分词统计”这类题目选择不同的数据结构和算法运行时间可能相差几十倍。刷题过程中提前接触这些差异对后续处理真实业务数据非常有帮助。还有一点值得关注Python 的递归深度默认限制在 1000 层左右。刷题过程中如果遇到递归写法导致RecursionError不要只想着调大递归深度更关键的是考虑能否改成循环或尾递归优化思路。调大sys.setrecursionlimit()只能临时绕过问题不能真正解决深层递归的性能隐患。8. 常见问题与排查方法问题现象可能原因排查方式解决方案运行代码提示NameError: name xxx is not defined变量名拼写不一致或函数未定义检查代码中变量名、函数名是否统一统一命名确认函数定义在调用之前提示SyntaxError: invalid syntax标点符号中英文混用、缩进错误、漏写冒号查看报错位置附近代码把中文标点改为英文标点检查 if/for/while/def 行尾冒号提示IndexError: list index out of range列表下标越界打印列表长度并核对索引范围使用len(list)判断边界或改用for item in list遍历提示KeyError: xxx字典中不存在对应键打印字典内容检查键名使用dict.get(key, default)避免直接索引提示FileNotFoundError文件路径错误或文件不存在确认文件路径是否为绝对路径或正确相对路径使用os.path.exists()判断文件是否存在安装第三方库报错网络问题或 pip 版本过旧尝试换国内镜像源pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simpleVSCode 运行代码提示找不到 Python未选择正确的解释器命令面板中输入Python: Select Interpreter选择虚拟环境或已安装的 Python 版本刷题总是卡 20 分钟以上没思路题目读了但没拆解步骤先写注释、画出输入输出示例把问题拆成“输入 - 处理 - 输出”三段先写伪代码这里单独说一下最坑的一类问题中文输入法导致的标点错乱。很多初学阶段反复报错最后发现是if后面的冒号打成了中文冒号或者字符串引号用了中文引号。遇到非预期的语法错误先看一眼标点是否全英文能节省大量排查时间。9. 实施方法与防弃坑建议350 道题真正能坚持完成的人并不多。这里给出几条经过验证的落地建议。9.1 先定节奏不要贪多不要试图“周末刷 30 道”这种强度很难持续。更推荐的方式是每天固定 30-60 分钟完成 1-2 道中等难度题。短期可能觉得进度慢但持续 6-8 周后累计完成的题量已经超过 100 道此时语法熟练度会有明显提升。9.2 不会的题不要马上看答案卡题时优先花 10-15 分钟重读题目在纸上画出输入输出示例尝试用自然语言描述处理步骤再翻译成 Python 代码。如果连续 30 分钟没有进展再参考答案但看完答案后要合上答案自己重新写一遍。9.3 每周末做一次综合回顾周一到周五的练习属于“增量学习”周末应安排一次“存量检验”。方式很简单从本周做过的题里挑 2-3 道最没把握的重新做一遍要求不看参考代码、不看笔记。如果能顺利写出来说明真正掌握了如果卡住就标记为“需要重点复习”。9.4 把练习代码变成自己的工具库刷题过程中写的通用函数比如列表去重、日期处理、词频统计、CSV 读写完全可以整理成一个utils.py模块。以后写爬虫、写自动化脚本时直接复用让练习题发挥最大价值。10. 总结与下一步这套 350 道 Python 练习题的核心价值不是让读者从大神那里拿到标准答案而是通过持续编码建立“输入 - 处理 - 输出”的思维链路。Python 语法知识点再多如果不动手写记不住几天主动完成 350 道题之后常用 API 和代码套路基本能形成肌肉记忆。建议先做三件事搭好本地 Python 环境、建立分目录的练习结构、把每天 1-2 道题当成固定任务。用 Git 记录提交用 pytest 验证正确性用进度表记录易错点。这套流程跑通之后350 道题带来的收益会远超题目本身的数量。后续可以继续扩展的方向有三个一是把练习题里的通用函数整理成个人工具包二是尝试参加 LeetCode 等平台的每日一题过渡到更偏算法和数据结构的内容三是把刷题时熟悉的数据处理和文件操作能力迁移到数据分析或自动化办公的真实项目中。先别急着追求难度把 350 道基础题稳稳刷完你的 Python 底子就已经超过大多数“收藏从未停止”的人了。
返回列表