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分
我选择制作一个智能天气综合查询与生活助手系统。在日常生活中,天气变化与我们的出行、穿衣息息相关。在bilibili教程、豆包老师和计科同学的帮助下,我学习了要用到的知识点:
为了实现精准的天气数据获取与智能生活提示,这个系统需要用到Python的requests网络库,通过安全调用高精度在线气象数据接口(API),实现了对指定行政区域的实时定位与多维度气象数据抓取。
这样这个天气查询和生活助手系统就有了六个功能:
①解析地理位置
②能获取实时天气
③精确风向风力
④实时空气质量(AQI)
⑤预测未来3天天气走势的功能。
⑥根据当前气温提供智能的穿衣与出行温馨提示。
进行这个程序的编写需要综合运用网络请求、JSON数据解析、异常处理以及分支控制等各方面的Python核心知识,对我而言是一个非常好的综合实践挑战。
二、实验过程及结果
2.实验设计与分析
(实验是跟着b站视频教程完成的,感谢up主、豆包老师和耐心的计科大佬一步一步的解释🚀)
在编写代码前,计科同学跟我解释我整个系统主要由三个核心层次组成:
系统主要由三个核心模块组成:
用户交互输入:引导用户输入“市”和“区”名称。

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

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

3.具体过程与实现步骤(以下内容结合了bilibili视频和豆包老师的指导😎)
(1)网络库环境准备
在程序编写前,须先在Pycharm的终端(Terminal)上下载并安装Python的核心网络库requests。

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

运行:

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

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

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

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

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

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

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

三、实验过程中遇到的问题和解决过程
-
(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基础语法和一些高级综合应用,从最基础的变量、数据类型、列表与字典,到核心的分支与循环控制,再到面向对象编程、文件读写等等等等。在理论课上老师悉心的讲解使我们了解了很多关于python的基础知识,如python的语法特点和函数等。在实验课上,通过基础理论与亲身实践相结合,我熟悉了python开发环境,练习python运行、调试技能,完成猜数字游戏的编写,学会了设计简单的计算器。
我最最喜欢的一节课是,学会创建服务端和客户端,通过Socket套接字(TCP/UDP)进行通信。尽管一开始很疑惑,但是老师不厌其烦地答疑真的很让同学们感动,我和组员小伙伴的电脑连接上的那一瞬间的惊喜和雀跃难以忘怀!!!
在学习中,尽管困惑与无助也常常与我相伴,听不懂的状况时有发生,也忘不了每到八九点困意袭来但仍要努力举着手机把程序录下来方便完成作业时候的小小崩溃感,但在完成一个小小的程序之后,那种成就感是无可比拟的。
(3)课程感想体会
这门课程给我的最大体会就是“知行合一,重在实践”。在开课之初,面对各种语法规则和数据结构,往往觉得抽象和枯燥😭。作为一个以前很少接触代码的同学,最初的学习中确实感到有些吃力,有时候被老师提问也答不太上来😭。我很感谢老师用心的教导❤️,每节课都把相关知识点讲得很清楚,提问后也会带领我们进一步复习巩固,下课总是答疑到很晚,帮助我们不断学习新的知识。
同时,在这个过程中我的思维和习惯也得到了很好的培养。Python的学习培养了我的理科思维,让我学着借助数据和实验来认识问题和解决问题。同时这也培养了我细心细致的习惯,从最开始的总是遗忘诸如标点符号一类的细节而导致程序不断报错,到现在的细致编写每一行代码、基本做到不在基础性细节上犯错,我变得更加认真严谨。
还有一个很重要的收获,也是老师最后一节实验课上强调的,要学会合理利用AI工具,不能只会复制AI的内容。AI工具的确方便,我在这个这个实验中如果没有豆包老师的帮助,真的难以完成。但我们不能因此过度依靠它,更需要注重自己的思考与行动,有问题需要自己去探索、自己去学习、自己去实践,如此方能有所收获。
(3)意见和建议
对于我这样几乎没有接触过编程😵的同学来说,前面的基础知识比较容易理解,后面的socket函数和爬虫技术都比较难了,感觉有点跟不上,建议老师在写完核心的关键步骤后,稍微停留几秒钟,或者口头提醒大家一下记一下重点步骤。
对于底子薄的同学来说Python的学习难度确实很大,感觉光听课还是不够的,老师可以在课前几天发布预习内容让大家提早学习一下下节课要讲的重点内容,也可以推荐一些相关的资料,这样应该可以帮助同学们在课堂上更好地跟上进度!
最后,老师尊嘟尊嘟讲得特别好,老师每次下课都真的非常耐心地答疑到很晚,老师辛苦啦💐💐💐
