公司动态

Python实战:330道练习题系统巩固核心语法与常用库

📅 2026/8/13 23:53:18
Python实战:330道练习题系统巩固核心语法与常用库
很多Python初学者在学完基础语法后常常陷入“不知道接下来该练什么”的迷茫。网上资料虽多但要么过于零散不成体系要么难度陡增让人望而却步。一套由浅入深、覆盖核心语法与常用库的练习题是巩固知识、培养编程思维的最佳路径。本文为你精心整理并详解一套包含330道Python练习题的实战计划。这些题目从变量、循环等基础语法逐步过渡到文件操作、数据处理、简单算法等实用场景并融入网络热词中提及的requests、pandas、matplotlib等库的应用。每天完成一定数量一周左右即可系统性地巩固Python核心技能。无论你是刚入门的新手还是想查漏补缺的开发者都能从中获得扎实的进步。1. 环境准备与学习心态在开始刷题之前一个稳定、顺手的环境和正确的心态至关重要。1.1 Python环境安装与配置首先确保你的电脑上已经安装了Python。推荐使用Python 3.8及以上版本因为它们拥有更好的特性和社区支持。1. 检查现有Python版本打开命令行Windows的CMD或PowerShellmacOS/Linux的Terminal输入以下命令python --version # 或 python3 --version如果显示了类似Python 3.10.0的版本信息说明已安装。如果提示“不是内部或外部命令”则需要安装。2. 下载与安装访问Python官网 python.org 下载对应操作系统的安装包。安装时务必勾选“Add Python to PATH”将Python添加到环境变量这样可以让你在任意目录下通过命令行使用Python。3. 验证安装安装完成后重新打开命令行再次输入python --version确认。然后输入python进入交互式环境出现提示符输入print(Hello, Python!)并按回车看到输出即表示成功。 print(Hello, Python!) Hello, Python!输入exit()或按CtrlZ(Windows) /CtrlD(macOS/Linux) 退出交互环境。4. 选择代码编辑器或IDE初学者推荐VS Code。轻量、免费、插件丰富。安装Python扩展后支持代码高亮、智能提示、调试等功能。网络热词中也多次提到“vscode python环境配置”这确实是主流选择。集成开发环境PyCharm。功能强大专为Python设计社区版免费。适合中大型项目但对初学者可能稍显复杂。简单文本编辑器Sublime Text, Notepad。轻便但需要自行配置运行环境。1.2 建立练习项目管理不建议将所有330道题的代码都写在一个文件里。良好的项目结构有助于管理。 在你的工作目录例如D:\PythonPractice或~/PythonPractice下创建如下结构的文件夹Python_330_Exercises/ ├── week1_basics/ # 第一周基础语法 │ ├── day1_variables.py │ ├── day2_conditionals.py │ └── ... ├── week2_data_structures/ # 第二周数据结构 │ ├── day1_lists.py │ ├── day2_dicts_tuples.py │ └── ... ├── week3_functions_modules/ # 第三周函数与模块 │ └── ... ├── week4_file_web/ # 第四周文件与网络 │ └── ... ├── week5_libraries/ # 第五周常用库 │ └── ... ├── data/ # 存放练习用的数据文件 │ ├── sample.txt │ └── scores.csv └── README.md # 记录学习进度和心得每天新建一个.py文件将当天的练习题代码写入并运行。1.3 刷题的正确心态与方法不求快求理解每道题不仅要做出答案更要理解背后的语法和逻辑。尝试用不同的方法解决同一问题。善用搜索但先思考遇到卡壳先自己思考10-15分钟。若仍无头绪可参考网络热词中提到的“翁恺c语言练习题”、“浙大翁恺pat练习题”的解题思路虽然语言不同但算法逻辑相通或搜索“python练习题”相关解析。动手敲不要复制只有亲手敲代码才能发现细节错误加深肌肉记忆。定期复习每周结束时回顾本周的代码和错题。2. 核心语法基础练习题精讲第1-100题这一部分是基石覆盖变量、数据类型、运算符、条件判断和循环。2.1 变量、数据类型与运算符例题1交换两个变量的值。# 方法1使用临时变量 a 5 b 10 print(f交换前: a{a}, b{b}) temp a a b b temp print(f交换后: a{a}, b{b}) # 方法2Pythonic写法元组解包 a, b 5, 10 a, b b, a print(fPythonic交换后: a{a}, b{b})思考为什么第二种方法不需要临时变量理解Python中赋值语句的“同时求值”特性。例题2计算身体质量指数BMI。公式BMI 体重(kg) / 身高(m)的平方。weight 70.5 # 公斤 height 1.75 # 米 bmi weight / (height ** 2) # ** 是幂运算 print(f体重{weight}kg身高{height}mBMI指数为: {bmi:.2f}) # :.2f 保留两位小数 # 根据BMI判断体型 if bmi 18.5: category 偏瘦 elif 18.5 bmi 24: category 正常 elif 24 bmi 28: category 偏胖 else: category 肥胖 print(f您的体型属于: {category})知识点算术运算符、比较运算符、浮点数计算、格式化字符串f-string、多分支条件判断。2.2 条件判断与循环控制例题3打印九九乘法表。# 使用嵌套for循环 for i in range(1, 10): # 外层循环控制行数 for j in range(1, i 1): # 内层循环控制每行的列数 # 使用格式化对齐使得输出整齐 print(f{j} x {i} {i*j:2d}, end ) # :2d 保证结果占2位右对齐 print() # 每行结束后换行运行结果片段1 x 1 1 1 x 2 2 2 x 2 4 1 x 3 3 2 x 3 6 3 x 3 9 ...思考将print的end参数从 改为\t制表符会有什么效果例题4寻找100以内的所有素数。print(100以内的素数有) for num in range(2, 101): # 1不是素数从2开始 is_prime True # 假设当前数是素数 # 判断num是否能被2到num-1之间的数整除 for i in range(2, int(num ** 0.5) 1): # 优化只需检查到平方根 if num % i 0: is_prime False break # 发现一个因子就不是素数跳出内层循环 if is_prime: print(num, end ) print() # 最后换行知识点range函数、嵌套循环、break语句、布尔标志位、算法优化检查到平方根即可。3. 数据结构深入练习题第101-200题掌握列表、元组、字典和集合的灵活运用是Python编程的关键。3.1 列表操作与算法例题5列表去重并保持原顺序。original_list [3, 1, 2, 1, 4, 2, 3, 5, 4, 6] unique_list [] for item in original_list: if item not in unique_list: # 如果元素不在新列表中则添加 unique_list.append(item) print(f原始列表: {original_list}) print(f去重后列表: {unique_list}) # 更简洁的方法Python 3.7 字典保持插入顺序 unique_list_adv list(dict.fromkeys(original_list)) print(f使用dict.fromkeys去重: {unique_list_adv})思考为什么list(set(original_list))也能去重但不能保证顺序因为集合是无序的例题6列表排序与查找。scores [88, 92, 79, 93, 85, 96, 77] # 1. 内置排序生成新列表 sorted_scores sorted(scores) # 升序 sorted_scores_desc sorted(scores, reverseTrue) # 降序 print(f升序排序: {sorted_scores}) print(f降序排序: {sorted_scores_desc}) # 2. 原地排序 scores.sort() # 升序改变了原列表 print(f原地排序后原列表: {scores}) # 3. 查找最大/最小值及其索引 max_score max(scores) min_score min(scores) max_index scores.index(max_score) # 返回第一个最大值的索引 print(f最高分: {max_score}, 索引: {max_index}) print(f最低分: {min_score}) # 4. 二分查找要求列表已排序 import bisect # 查找分数85应该插入的位置以维持升序 insert_pos bisect.bisect_left(scores, 85) print(f分数85可以插入的索引位置左侧: {insert_pos})知识点sorted()与sort()的区别、max/min/index方法、bisect模块。3.2 字典与集合妙用例题7统计一段文本中每个单词出现的次数。text this is a sample text with several words this text is just a sample words text.split() # 默认按空格分割成单词列表 word_count {} for word in words: # 方法1使用 get 方法避免 KeyError word_count[word] word_count.get(word, 0) 1 # 方法2使用 collections.Counter (更高效) # from collections import Counter # word_count Counter(words) print(单词出现次数统计:) for word, count in word_count.items(): print(f {word}: {count}) # 找出出现次数最多的单词 most_common_word max(word_count, keyword_count.get) # key参数指定比较依据 print(f\n出现最多的单词是 {most_common_word}出现了 {word_count[most_common_word]} 次。)知识点字符串split方法、字典的get方法、collections.Counter、max函数的key参数。例题8利用集合进行关系测试。math_students {Alice, Bob, Charlie, David} physics_students {Charlie, David, Eve, Frank} print(f数学班学生: {math_students}) print(f物理班学生: {physics_students}) # 交集两门课都上的学生 both math_students physics_students # 或 math_students.intersection(physics_students) print(f两门课都上的学生: {both}) # 并集至少上一门课的学生 either math_students | physics_students # 或 math_students.union(physics_students) print(f至少上一门课的学生: {either}) # 差集只上数学课的学生 only_math math_students - physics_students # 或 math_students.difference(physics_students) print(f只上数学课的学生: {only_math}) # 对称差集只上一门课的学生 exclusive math_students ^ physics_students # 或 math_students.symmetric_difference(physics_students) print(f只上一门课的学生: {exclusive})知识点集合的创建、交集、并集、差集、对称差集运算符。4. 函数、模块与文件操作第201-250题这部分练习将代码模块化并学习与外部文件交互。4.1 函数定义与参数传递例题9编写一个计算器函数支持加、减、乘、除。def calculator(num1, num2, operationadd): 一个简单的计算器函数。 参数: num1: 第一个数字 num2: 第二个数字 operation: 操作类型可选 add, subtract, multiply, divide 返回: 计算结果如果操作不支持或除零错误则返回None。 if operation add: return num1 num2 elif operation subtract: return num1 - num2 elif operation multiply: return num1 * num2 elif operation divide: if num2 ! 0: return num1 / num2 else: print(错误除数不能为零) return None else: print(f错误不支持的操作 {operation}) return None # 测试函数 result_add calculator(10, 5, add) result_divide calculator(10, 0, divide) result_invalid calculator(10, 5, power) print(f10 5 {result_add}) print(f10 / 0 {result_divide}) print(f10 power 5 {result_invalid}) # 使用默认参数 print(f10 5 (默认操作) {calculator(10, 5)}) # 默认是add知识点函数定义、参数位置参数、默认参数、文档字符串、返回值、错误处理。4.2 文件读写操作例题10读取一个文本文件统计行数、单词数和字符数。假设在data文件夹下有一个sample.txt文件内容为几行英文。file_path ./data/sample.txt # 相对路径假设文件在当前目录的data子文件夹下 line_count 0 word_count 0 char_count 0 try: with open(file_path, r, encodingutf-8) as file: # 使用with语句自动管理文件关闭 for line in file: line_count 1 words line.split() # 分割单词 word_count len(words) char_count len(line) # 包含换行符 # 如果不想要换行符可以用 len(line.rstrip(\n)) print(f文件 {file_path} 的统计信息) print(f 行数: {line_count}) print(f 单词数: {word_count}) print(f 字符数含换行符: {char_count}) except FileNotFoundError: print(f错误找不到文件 {file_path}请检查路径。) except IOError as e: print(f读写文件时发生错误: {e})知识点open函数、with上下文管理器、文件读取模式、异常处理、字符串处理。例题11将数据写入CSV文件并读取处理。网络热词中提到了“电商投放excel练习题”和“python获取excel中的数据”CSV是处理表格数据的常用格式。import csv # 写入CSV文件 data_to_write [ [姓名, 年龄, 城市], [张三, 25, 北京], [李四, 30, 上海], [王五, 28, 广州] ] csv_file_path ./data/people.csv with open(csv_file_path, w, newline, encodingutf-8-sig) as csvfile: # utf-8-sig 解决Excel中文乱码 writer csv.writer(csvfile) writer.writerows(data_to_write) # 写入多行 print(f数据已写入 {csv_file_path}) # 读取CSV文件并计算平均年龄 ages [] with open(csv_file_path, r, encodingutf-8-sig) as csvfile: reader csv.reader(csvfile) headers next(reader) # 跳过标题行 print(f标题: {headers}) for row in reader: name, age_str, city row age int(age_str) ages.append(age) print(f {name}, {age}岁, 来自{city}) if ages: average_age sum(ages) / len(ages) print(f\n平均年龄: {average_age:.1f} 岁)知识点csv模块、writerow/writerows、reader、next函数、中文编码处理utf-8-sig。5. 常用库实战练习第251-330题结合网络热词练习requests、pandas、matplotlib等库解决实际问题。5.1 使用Requests进行网络请求例题12获取公开API数据并解析JSON。模拟网络热词中“python requests 请求”的场景。import requests import json # 示例获取一个公开的测试APIJSONPlaceholder url https://jsonplaceholder.typicode.com/posts/1 try: # 发送GET请求 response requests.get(url, timeout5) # 设置超时时间 # 检查请求是否成功 response.raise_for_status() # 如果状态码不是200会抛出HTTPError异常 # 解析JSON响应 data response.json() print(获取到的帖子信息) print(f 用户ID: {data[userId]}) print(f 帖子ID: {data[id]}) print(f 标题: {data[title]}) print(f 内容: {data[body][:50]}...) # 只显示前50个字符 # 也可以将数据保存到本地文件 with open(./data/post_1.json, w, encodingutf-8) as f: json.dump(data, f, ensure_asciiFalse, indent2) # indent使JSON格式化美观 print(数据已保存到 post_1.json) except requests.exceptions.Timeout: print(请求超时请检查网络或稍后重试。) except requests.exceptions.HTTPError as e: print(fHTTP错误: {e}) except requests.exceptions.RequestException as e: print(f请求发生错误: {e}) except json.JSONDecodeError: print(错误响应内容不是有效的JSON格式。)知识点requests.get、响应状态码检查、response.json()、json.dump、异常处理。5.2 使用Pandas进行数据分析例题13读取CSV文件进行基本的数据清洗与分析。import pandas as pd # 假设有一个学生成绩的CSV文件 ‘scores.csv’ # 内容可能如下 # name,math,english,physics # 张三,85,92,78 # 李四,76,88,95 # 王五,92,85,88 # 赵六,65,70,62 df pd.read_csv(./data/scores.csv) # 读取CSV文件为DataFrame print(原始数据) print(df) print(\n数据基本信息) print(df.info()) print(\n数据统计描述) print(df.describe()) # 数据清洗处理缺失值假设有缺失 # df.fillna(df.mean(), inplaceTrue) # 用均值填充数值列缺失值 # 计算每个学生的平均分和总分 df[average] df[[math, english, physics]].mean(axis1).round(1) df[total] df[[math, english, physics]].sum(axis1) print(\n添加平均分和总分后) print(df) # 找出平均分最高的学生 top_student df.loc[df[average].idxmax()] print(f\n平均分最高的学生是{top_student[name]}平均分 {top_student[average]}) # 按总分降序排序 df_sorted df.sort_values(bytotal, ascendingFalse) print(\n按总分排名) print(df_sorted[[name, total, average]]) # 将结果保存到新的Excel文件网络热词关联‘电商投放excel练习题’ output_path ./data/scores_analyzed.xlsx df_sorted.to_excel(output_path, indexFalse) # indexFalse 不保存行索引 print(f\n分析结果已保存至 {output_path})知识点pandas.read_csv、DataFrame基本操作、列计算、排序、idxmax、to_excel。5.3 使用Matplotlib进行数据可视化例题14绘制学生成绩的柱状图和折线图。网络热词中提到了“python每隔一段时间画折线图”可视化是数据分析的重要环节。import matplotlib.pyplot as plt import numpy as np # 使用上一题DataFrame的数据这里我们手动创建示例数据 students [张三, 李四, 王五, 赵六] math_scores [85, 76, 92, 65] english_scores [92, 88, 85, 70] physics_scores [78, 95, 88, 62] x np.arange(len(students)) # 学生的索引位置 width 0.25 # 柱子的宽度 # 创建柱状图 fig, (ax1, ax2) plt.subplots(1, 2, figsize(14, 5)) # 1行2列的子图 # 子图1并列柱状图 bars1 ax1.bar(x - width, math_scores, width, label数学, colorskyblue) bars2 ax1.bar(x, english_scores, width, label英语, colorlightgreen) bars3 ax1.bar(x width, physics_scores, width, label物理, colorsalmon) ax1.set_xlabel(学生) ax1.set_ylabel(分数) ax1.set_title(各科成绩对比柱状图) ax1.set_xticks(x) ax1.set_xticklabels(students) ax1.legend() # 在柱子上方添加数值标签 for bars in [bars1, bars2, bars3]: for bar in bars: height bar.get_height() ax1.annotate(f{height}, xy(bar.get_x() bar.get_width() / 2, height), xytext(0, 3), # 3 points vertical offset textcoordsoffset points, hacenter, vabottom, fontsize9) # 子图2折线图每个学生的成绩趋势 ax2.plot(students, math_scores, markero, label数学, linewidth2) ax2.plot(students, english_scores, markers, label英语, linewidth2) ax2.plot(students, physics_scores, marker^, label物理, linewidth2) ax2.set_xlabel(学生) ax2.set_ylabel(分数) ax2.set_title(各科成绩趋势折线图) ax2.legend() ax2.grid(True, linestyle--, alpha0.6) plt.tight_layout() # 自动调整子图参数使之填充整个图像区域 plt.savefig(./data/score_analysis.png, dpi300) # 保存图片 plt.show()知识点matplotlib.pyplot、创建子图、柱状图bar、折线图plot、设置标签标题、图例、网格、保存图片。6. 常见问题与调试技巧在练习过程中你肯定会遇到各种错误。以下是高频问题及解决思路。问题现象可能原因解决思路SyntaxError: invalid syntax语法错误如括号/引号不匹配、冒号缺失、错误使用关键字等。检查报错行及上一行的语法。使用编辑器的括号高亮功能。NameError: name ‘xxx’ is not defined变量或函数名在引用前未定义或拼写错误。检查变量名是否拼写正确作用域是否正确例如在函数内定义的变量不能在函数外直接使用。IndentationError: unexpected indent缩进错误通常是混用空格和Tab或缩进层级不对。统一使用4个空格进行缩进。在编辑器中显示空白字符进行检查。TypeError: can only concatenate str (not “int”) to str类型错误如尝试将字符串和数字用连接。使用str()函数将数字转为字符串或使用格式化字符串f-string。IndexError: list index out of range列表索引超出范围。例如列表长度为3却尝试访问list[3]索引从0开始。检查列表长度len(list)确保索引在0到len(list)-1之间。KeyError: ‘some_key’字典中不存在的键。使用dict.get(‘key’, default_value)方法避免错误或在访问前用‘key’ in dict判断。ModuleNotFoundError: No module named ‘xxx’未安装第三方库或库名拼写错误。使用pip install xxx安装。注意库名大小写如pip install pandas。文件读写乱码文件编码与读取/写入时指定的编码不一致。尝试使用encoding‘utf-8’、encoding‘gbk’或encoding‘utf-8-sig’针对带BOM的UTF-8。代码逻辑正确但结果不对边界条件未考虑、循环条件错误、变量值被意外修改等。使用print()在关键位置打印变量值打印调试法。或使用调试器如VS Code的调试功能逐行执行。通用调试建议阅读错误信息Python的错误追踪Traceback会明确指出错误类型、出错文件和行号这是第一线索。简化问题如果一段复杂代码出错尝试注释掉部分代码或创建一个最小的、能复现错误的示例。打印中间状态在怀疑有问题的代码行前后打印关键变量的值观察其变化是否符合预期。使用搜索引擎将错误信息直接复制到搜索引擎很大概率能找到解决方案。网络热词如“python中upper函数有什么用”就是典型的学习路径。7. 最佳实践与进阶学习路线完成这330道练习题后你已经打下了坚实的Python基础。要成为一名“老腻害”的开发者还需要关注以下最佳实践和进阶方向。7.1 代码风格与规范遵循PEP 8这是Python的官方风格指南。保持一致的缩进4个空格、合理的行长通常79字符、规范的命名变量小写加下划线snake_case类名大写驼峰CamelCase。编写文档字符串为函数、类、模块编写清晰的docstring说明其用途、参数和返回值。使用类型注解Python 3.5 支持类型注解如def greet(name: str) - str:。这能提高代码可读性并配合mypy等工具进行静态检查。善用虚拟环境使用venv或conda为每个项目创建独立的Python环境避免包版本冲突。7.2 工程化与项目思维模块化设计将功能相关的代码组织成模块.py文件和包包含__init__.py的文件夹。避免写超长的单个文件。错误处理积极使用try...except来捕获和处理可能出现的异常提高程序健壮性。日志记录使用logging模块替代print来记录程序运行信息可以方便地控制输出级别和目的地。单元测试学习使用unittest或pytest框架为你的核心函数编写测试确保代码修改后功能依然正确。7.3 明确你的进阶方向Python应用领域广泛接下来可以选择一个方向深入Web开发学习Flask或Django框架网络热词中提到了python fastapi 三层架构FastAPI也是一个现代、高性能的选择。掌握RESTful API、数据库ORM、模板渲染等。数据分析与科学计算深入NumPy、Pandas、SciPy并学习Jupyter Notebook进行交互式分析。这是“python数据分析与可视化”的核心。人工智能与机器学习从Scikit-learn开始学习传统机器学习然后涉足TensorFlow或PyTorch进行深度学习。自动化与脚本学习用os、shutil、subprocess等库操作文件和系统用schedule或APScheduler定时执行任务。网络爬虫深入学习Requests、BeautifulSoup、Scrapy等库但务必遵守网站的robots.txt协议和相关法律法规。坚持每天练习从模仿到创造从解决练习题到解决真实项目中的问题。编程能力的提升没有捷径就是不断地思考、敲代码、调试和总结。这330道题是一个完美的起点但真正的“大神”之路始于你将这些基础知识融会贯通并应用于下一个实际项目之时。