20254215 实验四 Python综合实践

20254215 2025-2026-2 实验四 Python综合实践

课程:《Python程序设计》
班级: 2542
姓名: 陈宣亦
学号:254215
实验教师:王志强
实验日期:2026年5月24日
必修/选修: 专选课

一、实验内容

Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。
例如:编写从社交网络爬取数据,实现可视化舆情监控或者情感分析。
例如:利用公开数据集,开展图像分类、恶意软件检测等
例如:利用Python库,基于OCR技术实现自动化提取图片中数据,并填入excel中。
例如:爬取天气数据,实现自动化微信提醒
例如:利用爬虫,实现自动化下载网站视频、文件等。
例如:编写小游戏:坦克大战、贪吃蛇、扫雷等等
注:在Windows/Linux系统上使用VIM、PDB、IDLE、Pycharm等工具编程实现。

要求:
(1)程序能运行,功能丰富(至少5个功能)。(需求提交源代码,并建议录制程序运行的视频)15分
(2)综合实践报告,要体现实验分析、设计、实现过程、结果等信息,格式规范,逻辑清晰,结构合理。20分。
(3)在实践报告中,需要对全课进行总结,并写课程感想体会、意见和建议等。10分

二、实验分析

1.需求分析:

在日常生活中,天气变化与我们的出行、穿衣息息相关。每天早晨我也会查看天气,判断是否需要跑操。所以我选择制作一个智能天气综合查询与生活助手系统。在bilibili教程和计科同学的帮助下,我知道:为了实现精准的天气数据获取与智能生活提示,这个系统需要用到Python的requests网络库,通过安全调用高精度在线气象数据接口(API),实现了对指定行政区域的实时定位与多维度气象数据抓取。

2.可行性分析:

Python 语言不仅拥有丰富的库,还有简洁的语法,使我们获得互联网上的海量高价值实时数据,解决实际生活问题。
进行这个程序的编写需要综合运用网络请求、JSON数据解析、异常处理以及分支控制等各方面的Python核心知识,对我而言是一个非常好的综合实践挑战😊

3.预期功能

我想要的天气查询和生活助手系统有五个功能
①解析地理位置🌏
②能获取实时天气☀️☁️☔️
③精确风向风力🌬️
④实时空气质量(AQI)🌫️
⑥根据当前气温提供智能的穿衣与出行温馨提示。

完整代码如下:
image

运行视频如下:

三、实验过程及结果

1.实验设计与分析

(实验是跟着b站视频教程完成的,感谢up主、和耐心的计科大佬一步一步的解释🚀,还有豆包老师的一些解答)

在编写代码前,计科同学跟我解释我的整个系统需要由三个核心模块组成:

(1)用户交互输入:

引导用户输入“市”和“区”名称。
image

(2)地理逆编码解析:

由于气象接口必须传入精确的经纬度坐标,程序首先向地理逆编码服务器请求该地的经纬度。
image

(3)数据抓取与逻辑处理:

利用经纬度抓取实时天气,利用if-elif-else分支语句对当前气温进行区间化分析,匹配出最人性化的穿衣出行建议。
image

2.具体过程与实现步骤(以下内容结合了bilibili视频和豆包老师的指导😎)

(1)网络库环境准备

在程序编写前,须先在Pycharm的终端(Terminal)上下载并安装Python的核心网络库requests。
2bcf63eb5d93766918729571e27a344e

(2)引导用户输入查询地址

使用input()函数分别让用户输入查询的市和区,并将输入值赋予变量loc和loc_detail,为后续的动态拼接URL做好数据准备。
代码:
image
运行:
image

(3)实现地理逆编码查询(获取经纬度)

拼接出地理编码查询的第一个API接口地址api_url_1。使用requests.get()请求该URL,并通过.json()方法将服务器返回的数据转化为字典格式data_1。从中逐层提取出目标地点的经度loc_lon和纬度loc_lat。
image

(4)抓取实时天气基础数据

拼接实时天气接口api_url_2,将上一步获取的经纬度动态传入。使用requests.get().json()获取实时气象JSON字典data_2。
image

(5)提取气象核心字段

通过键值对解析,精准提取出当前温度temp(并转换为整型int以便后续进行数学大小比较)、体感温度feel_Like、天气状况描述air_condition、风向wind_dir以及风速wind_speed。
image

(6)结果格式化输出

利用f-string字符串格式化技术,将解析出的各项气象指标融合成一句通顺、直观的话打印在控制台上。
image

(7)基于实时温度的智能穿衣温馨提示

最后,系统根据获取到的实时气温temp,运用分支控制语句(if-elif-else结构)来进行生活引导,根据温度所在的不同的区间(小于0、小于15、小于25、大于等于25),输出相对应的温馨提示语。
image

3、实验结果与运行分析

当输入某一气温较低的城市(以澳大利亚悉尼为例),系统成功解析出该行政区的经纬度,并完整输出了当前天气、风力、空气质量等。最下方的温馨提示部分,成功触发了相对应的防寒/穿衣提示分支。
运行截图:
image

当输入气温超过25°C的城市时,系统各项功能均运行正常。控制台最下方的温馨提示部分,自动切换为了针对高温天气的防暑防晒提示,证明系统的if-elif-else逻辑判断完全正确,具备良好的健壮性。
运行截图:
image

四、实验过程中遇到的问题和解决过程

  • 1.豆包老师告诉我有个错误叫做多级JSON数据嵌套太深,导致提取特定天气字段时频繁报错
    具体问题:在刚刚写好代码进行联调时,由于和风天气API返回的原始数据实在太多了,包含了大量的列表(list)与字典(dict)相互嵌套。我在提取未来三天天气预报的最低温和最高温时,没有理清daily节点下的索引关系,导致程序频繁报出KeyError。
  • 解决方案:我没有呆萌地去网上盲目复制别人的爬虫代码。我首先求助了豆包,得知要在代码中先使用print(data_forecast)把最原始的JSON字符串完整打印在控制台上。然后对照着结构,一层一层去数它的方括号和花括号,最终明确了必须先通过键名找到列表,再通过for循环遍历每一个子字典。理解了每行代码的抽取逻辑后,问题迎刃而解。
  • 2.温度大小比较时触发类型冲突,导致穿衣提示功能失效
    具体问题:在实现功能六的智能穿衣温馨提示时,我使用if(temp<15):进行条件判断,结果程序直接报错崩溃。
  • 解决方案:在询问豆包老师后,我得知:网络接口返回的所有气温数据默认都是字符串(str)格式(例如"23"),而字符串是不能直接和数字15进行大小比较的。于是我赶紧在前端解析时,用int()函数强制将获取到的温度数据转换成了整型:temp=int(data_2['now']['temp'])。再次运行,系统便能完美根据温度高低,精准切换不同的温馨提示语了。

五、总结、感想与建议

1.本次实践总结

在编写本次天气系统时,我也和之前的实验一样,经历了一波三折。一步一步看视频,不断用豆包询问各种问题和各种错误,厚着脸皮询问计科的同学,最终成功完成了这个小程序,付出了很多时间和心血,完成感觉这个系统真的非常非常珍贵😭,也很震惊我真的完成了。这次经历让我明白,编程不仅是智力的训练,更是耐心与逻辑严密性的修行💪。
本次期末综合实践中,我深刻认识到,Python语言之所以强大,不仅在于其语法精炼、易于上手,更在于它拥有极其庞大且高效的生态库。通过短短几十行代码,我们就能通过互联网上的海量高价值实时数据,查询到世间各地的天气,并将其转化为能够解决实际生活问题的工具。

2.全课总结

通过本学期对《Python程序设计》课程的系统性学习,我了解了Python基础语法和一些高级综合应用,从最基础的变量、数据类型、列表与字典,到核心的分支与循环控制,再到面向对象编程、文件读写等等等等。以下是我简单列出的一些重点
(1)初识Python
了解Python的发展背景、语言特点(简洁、易读、丰富的库)及应用场景,搭建开发环境
(2)Python语法
我学习了变量与数据类型(数字、字符串、布尔、空值)、运算符(算术、比较、逻辑、赋值)、基本输入输出 input() print() 及代码书写规范(缩进、注释)。
(3)流程控制语句
条件语句: if 、 elif 、 else 分支结构
循环语句: for 循环、 while 循环
控制关键字: break 、 continue 、 pass
理解程序的执行流程与逻辑判断
(4)序列
掌握Python核心数据结构:
列表(List):有序可变序列,支持增删改查
元组(Tuple):有序不可变序列
字典(Dict):键值对映射
集合(Set):无序不重复元素集
切片操作、列表推导式等高效用法
(5)字符串
字符串的创建、索引、切片、常用方法( split() 、 join() 、 replace() 、 strip() 等)、格式化输出( % 、 format() 、f-string)及正则表达式基础(如手机号匹配规则: 13[4-9]\d{8} 、 15[01289]\d{8} )。
(6)函数
定义与调用:使用 def 关键字
参数机制:形参 vs 实参、位置参数、关键字参数、默认参数、可变参数( *args 、 **kwargs )
返回值: return 语句,多返回值(元组解包)
(7)面向对象程序设计
类(Class)与对象(Object):类是抽象模板,对象是类的具体实例
类的实例化:通过类名加括号创建对象(如 obj = ClassName() )
构造方法: init() 用于初始化对象属性,在实例化时自动调用
类的方法 vs 普通函数:方法定义在类内部,第一个参数为 self (指向实例本身);函数独立存在
面向对象三要素:封装、继承、多态
包与模块:模块是单个 .py 文件;包是包含 init.py 的文件夹,用于组织和管理代码
(8)模块
导入机制: import 、 from...import 、 as 别名
常用标准库: os 、 sys 、 math 、 random 、 datetime 等
自定义模块:模块的创建、导入路径与使用
包的结构管理
(9)异常处理及程序调试
异常处理的意义:增强程序健壮性,避免崩溃,提供友好的错误提示
处理方式:
try...except...finally 结构
一些特定异常类型( ValueError 、 TypeError 、 FileNotFoundError 等)断点调试
(10)文件及目录操作
冯诺依曼体系架构:计算机由运算器、控制器、存储器、输入设备、输出设备组成
内存 vs 外存:内存(RAM)速度快、断电易失;外存(硬盘/U盘)速度慢、持久保存
数据分类:结构化数据(数据库表、Excel)vs 非结构化数据(文本、图片、音视频)
文件操作核心方法:
open() :打开文件
read() / readline() / readlines() :读取内容
write() :写入内容
seek() :移动文件指针
close() :关闭文件(或使用 with 语句自动管理)
目录操作: os 模块管理路径、创建/删除文件夹
(11)使用Python操作数据库
数据库基本操作:增查删改
(12)爬虫
概念:自动抓取网页信息的程序,用于数据采集、分析
法律边界:从入门到入狱
核心技术:爬取库、解析库
反反爬虫策略

在实验课上,通过基础理论与亲身实践相结合,我熟悉了python开发环境,练习python运行、调试技能,完成猜数字游戏的编写,学会了设计简单的计算器。
我最最喜欢的一节课是,学会创建服务端和客户端,通过Socket套接字(TCP/UDP)进行通信。尽管一开始很疑惑,但是老师不厌其烦地答疑真的很让同学们感动,我和组员小伙伴的电脑连接上的那一瞬间的惊喜和雀跃难以忘怀!!!
在学习中,尽管困惑与无助也常常与我相伴,听不懂的状况时有发生,也忘不了每到八九点困意袭来但仍要努力举着手机把程序录下来方便完成作业时候的小小崩溃感,但在完成一个小小的程序之后,那种成就感是无可比拟的。

3.课程感想体会

这门课程给我的最大体会就是“知行合一,重在实践”。在开课之初,面对各种语法规则和数据结构,往往觉得抽象和枯燥😭。作为一个以前很少接触代码的同学,最初的学习中确实感到有些吃力,有时候被老师提问也答不太上来😭。我很感谢老师用心的教导❤️,每节课都把相关知识点讲得很清楚,提问后也会带领我们进一步复习巩固,下课总是答疑到很晚,帮助我们不断学习新的知识。

同时,在这个过程中我的思维和习惯也得到了很好的培养。Python的学习培养了我的理科思维,让我学着借助数据和实验来认识问题和解决问题。同时这也培养了我细心细致的习惯,从最开始的总是遗忘诸如标点符号一类的细节而导致程序不断报错,到现在的细致编写每一行代码、基本做到不在基础性细节上犯错,我变得更加认真严谨。

还有一个很重要的收获,也是老师最后一节实验课上强调的,要学会合理利用AI工具,不能只会复制AI的内容。AI工具的确方便,我在这个这个实验中如果没有豆包老师的帮助,真的难以完成。但我们不能因此过度依靠它,更需要注重自己的思考与行动,有问题需要自己去探索、自己去学习、自己去实践,如此方能有所收获。

4.意见和建议

对于我这样几乎没有接触过编程😵的同学来说,前面的基础知识比较容易理解,后面的socket函数和爬虫技术都比较难了,感觉有点跟不上,建议老师在写完核心的关键步骤后,稍微停留几秒钟,或者口头提醒大家一下记一下重点步骤。
最后,老师尊嘟尊嘟讲得特别好👍👍👍,老师每次下课都真的非常耐心地答疑到很晚,老师辛苦啦💐💐💐

参考资料

学习通《零基础学Python》教材
3行代码查天气!Python极简天气查询小工具

posted @ 2026-05-24 17:54  陈嬿如  阅读(77)  评论(0)    收藏  举报