查看全课大纲(第 7 / 51 节)
- 1.为什么人人都该学点编程?
- 2.计算机与程序设计:你的电脑到底在“想”什么?
- 3.Python 这门语言,到底有什么魔力?
- 4.Python 开发环境配置:如何拥有你的第一个“编程工具箱”?
- 5.如何安装一个更强大的代码编辑器?
- 6.汇率兑换1.0:你的第一个“钱生钱”小程序
- 7.你的第一行代码,藏着哪些秘密?
- 8.汇率兑换2.0(上):让程序看懂“CNY”和“USD”
- 9.汇率兑换程序,如何让它“聪明”地判断币种?
- 10.汇率兑换程序能一直运行,直到我喊停吗?
- 11.汇率兑换4.0:如何把“算钱”功能打包成积木?
- 12.汇率兑换5.0:给你的程序穿上“结构化”的西装
- 13.怎么用 Python 画一个会动的五角星?
- 14.如何让程序自动画出不同大小的五角星?
- 15.函数自己调用自己,会发生什么?
- 16.用递归画出神奇的分形树
- 17.Python 怎么计算你一天躺着不动能消耗多少热量?
- 18.如何让程序“活”起来,持续为你服务?
- 19.如何让 BMR 计算器更“聪明”?
- 20.当程序遇到“不按套路出牌”的用户怎么办?
- 21.怎么用 Python 模拟一个“滚雪球”式的存钱计划?
- 22.如何用列表记录每一周的存款?
- 23.如何让程序自己数数?—— 用 for 循环解放你的双手
- 24.52周存钱挑战4.0:你的存款计算器能有多灵活?
- 25.52周存钱挑战:怎么根据日期自动查存款?
- 26.Python 怎么判断一年中的第几天?
- 27.列表 vs 元组:哪个更适合存储月份天数?
- 28.用集合给月份分个队,换个思路算天数
- 29.把月份和天数“锁”在一起:用字典给数据配个对
- 30.Python 怎么判断密码强弱?
- 31.Python 怎么给密码设置“防沉迷”系统?
- 32.Python 怎么把密码保存到文件里?
- 33.Python 怎么读取文件里的密码?
- 34.Python 怎么把密码检查工具“打包”起来?
- 35.Python 怎么把文件操作也“打包”起来?
- 36.计算机怎么“扔骰子”?——用Python模拟随机事件
- 37.如何用 Python 模拟掷两个骰子?
- 38.怎么用 Python 把骰子轨迹画出来?
- 39.骰子点数分布长啥样?用直方图一眼看穿!
- 40.用科学计算库让骰子程序“起飞”
- 41.空气质量指数怎么算?手把手教你写一个AQI计算器
- 42.空气质量指数计算:从零开始,让程序看懂空气
- 43.如何读取空气质量数据文件并找出空气质量最好的五个监测点?
- 44.JSON 数据怎么变成 Excel 表格?—— 让数据换个“马甲”
- 45.Python 怎么让程序自己判断文件类型?
- 46.如何让程序自己上网查空气质量?
- 47.用美味的汤来解析网页:Beautiful Soup 入门
- 48.如何让爬虫自动抓取全国所有城市的空气质量?
- 49.爬到的数据怎么存下来?—— 把全国空气质量数据保存为CSV文件
- 50.用 pandas 玩转空气质量数据:找出全国空气最好和最差的城市
- 51.空气质量数据怎么“洗”干净,还能画成图?
你的第一行代码,藏着哪些秘密?
约 14 分钟
小象实战讲义 · Python 入门:8 个小项目边玩边学
上一节,我们只用几行代码就做出了一个能换汇的小工具,是不是感觉编程也没那么神秘?这一节,我们不急着加新功能,而是回过头来,像侦探一样,仔细看看我们写的那几行代码,到底藏着 Python 语言的哪些基本规则。学完这一节,你就能看懂自己写的代码了,还能给它加上“说明书”,让它变得更专业、更好懂。
💡 核心导读
- 给代码写“说明书”:学习两种注释的写法,让你的代码自带解释。
- 认识“变量”和“常量”:理解程序里那些会变和不会变的“盒子”。
- 起个好名字很重要:学会给变量起名的规则和最佳实践。
- 拆解程序的骨架:认识表达式、输入和输出这些基本元素。
给你的代码加上“说明书”
还记得我们上一节的汇率兑换程序吗?它现在长这样:
# 汇率
USD_VS_RMB = 6.77
# 人民币的输入
rmb_str_value = '100' # 原程序这里用 input() 让用户输入数字(eval/float 要求字符串内容是纯数字)
# 将字符串转换为数字
rmb_value = eval(rmb_str_value) # ⚠️ eval 会原样执行字符串,处理真实用户输入不安全,真实程序请改用 float()/int()(见本节安全提示)
# 汇率计算
usd_value = rmb_value / USD_VS_RMB
# 输出结果
print('美元(USD)金额是:', usd_value)美元(USD)金额是: 14.771048744460858你有没有发现,我在每行代码前面都加了一行以 # 开头的中文?这就是注释。
注释是干什么用的? 简单说,它就是给代码加的“备注”或“说明书”。Python 解释器在执行代码时会完全忽略注释,所以它不会影响程序运行。那为什么要写呢?
- 给自己做记录:过几天再看,能立刻想起来这行代码是干嘛的。
- 方便别人理解:如果别人要维护你的代码,注释能帮他快速理清思路。
怎么写注释?
- 单行注释:用
#开头,后面写说明文字。可以独占一行,也可以写在代码行的后面。 - 多行注释:用三个双引号
"""开头和结尾,中间可以写多行说明。通常放在整个程序的开头,用来描述程序作者、功能、版本等信息。
我们给程序加上一个完整的“文件头”吧:
"""
作者:你的名字
功能:汇率兑换
版本:1.0
日期:2023-10-27
"""
# 汇率
USD_VS_RMB = 6.77
# 人民币的输入
rmb_str_value = '100' # 原程序这里用 input() 让用户输入数字(eval/float 要求字符串内容是纯数字)
# 将字符串转换为数字
rmb_value = eval(rmb_str_value) # ⚠️ eval 会原样执行字符串,处理真实用户输入不安全,真实程序请改用 float()/int()(见本节安全提示)
# 汇率计算
usd_value = rmb_value / USD_VS_RMB
# 输出结果
print('美元(USD)金额是:', usd_value)美元(USD)金额是: 14.771048744460858小提示:我们没必要给每一行代码都加注释。通常,给完成一个独立功能的“代码块”加一个注释就足够了。我们这个程序太简单,所以每行都加了,让你看得更清楚。
认识“会变的”和“不变的”
在程序里,数据需要有个地方存放,这些地方有的像“便签”,内容可以随时更换;有的像“石碑”,内容固定不变。
变量 (Variable) 就像我们程序里的 rmb_str_value 和 usd_value。它们的值在程序运行过程中是可以改变的。
- 当你输入
100时,rmb_str_value的值就是'100'。 - 当你输入
200时,它的值就变成了'200'。 - 计算出的美元金额
usd_value也会随之改变。
常量 (Constant) 就像我们程序里的 USD_VS_RMB,它的值 6.77 在程序运行过程中是不希望被改变的。
在 Python 中,并没有严格的语法来强制定义一个常量(它本质上还是一个变量)。但是,程序员们有一个约定俗成的规矩:用全大写的字母和下划线来命名常量,以此告诉阅读代码的人:“嘿,这个值很重要,请尽量不要去修改它!”
所以,我们把汇率写成 USD_VS_RMB 而不是 usd_vs_rmb,就是这个道理。看到全大写,大家心里就有数了。
起名字的学问:变量命名规则
给变量起名字,就像给自己的孩子起名,不能太随意。一个好名字能让代码“自解释”,一看就懂。
基本规则(必须遵守):
- 组成元素:只能由字母、数字和下划线
_组成。 - 不能数字开头:
1money❌,money1✅。 - 大小写敏感:
name、Name、NAME是三个不同的变量。 - 不能是保留字:Python 自己已经占用的单词,比如
if,for,True,False,import等,你不能用来当变量名。
想知道所有保留字?在 Python 交互环境(比如 PyCharm 的 Python Console)里输入下面两行命令看看:
import keyword
print(keyword.kwlist)最佳实践(强烈建议):
- 有意义:
usd_value就比a或x1好一万倍。 - 风格统一:Python 社区推荐使用小写字母 + 下划线的风格,比如
user_name,这叫“蛇形命名法”。
程序的骨架:表达式、输入与输出
最后,我们来拆解一下程序的基本结构。
表达式与语句 能计算出一个值的代码片段叫表达式(如 1 + 2、eval(rmb_str_value)、rmb_value / USD_VS_RMB);而带 = 把一个值绑定到变量名的整行代码,严格来说叫赋值语句。入门阶段不用太纠结术语,先建立感觉:
rmb_value = eval(rmb_str_value)是一条赋值语句:等号右边的表达式先算出一个值,再存进左边的变量。usd_value = rmb_value / USD_VS_RMB同样是赋值语句,右边的rmb_value / USD_VS_RMB是做除法的表达式。print('美元金额是:', usd_value)是一条函数调用语句,它调用print输出结果(print(...)本身也是一个表达式)。
小知识:Python 3.8 还引入了一个真正的“赋值表达式”——海象运算符
:=(例如if (n := len(data)) > 0:),它能在表达式里顺便赋值。本课程用不到,知道有这个东西即可。
输入 我们用 input() 函数来接收用户在键盘上输入的内容。要特别注意:input() 得到的永远是一个字符串(文本),哪怕你输入的是数字 100,在程序里它也是 '100' 这个文本。这就是为什么我们需要用 eval() 把它“转换”成数字(⚠️ 注意:这里用 eval 有安全隐患,我们马上会讲到)。
输出 我们用 print() 函数把结果展示在屏幕上。它可以打印文本,也可以打印变量的值。
⚠️ 重要安全提醒:为什么不用 eval()
在上面的代码中,我们用了 eval(rmb_str_value) 来把输入的字符串变成数字。eval() 的功能非常强大,但也极其危险!因为它会执行字符串里的任何 Python 表达式。
想象一下,如果用户输入的不是 100,而是 __import__('os').system('rm -rf /') 这样的恶意命令(当然这只是一个极端例子),eval() 也会照样执行,后果不堪设想。
安全第一!对于用户输入,我们应该用更安全的方式转换:
- 如果确定用户输入的是整数,用
int() - 如果确定用户输入的是小数,用
float()
所以,我们应该把危险的那行代码改成安全的:
# ❌ 危险!用户输入绝不能直接进 eval
rmb_value = eval(rmb_str_value)
# ✅ 安全!用 float() 只转换数字
rmb_value = float(rmb_str_value)在我们的汇率程序中,用户输入的是金额,可能是小数,所以用 float() 最合适。请立刻动手把你的程序改过来吧!
预告与挑战
现在,我们的程序只能把人民币换成美元。但现实中的需求可能更灵活:
“我想输入
100CNY,程序就换成美元;如果我输入15USD,程序就自动换成人民币。程序能自己判断我输入的是哪种货币吗?”
当然可以! 这就是我们下一节要一起实现的功能:让程序变得更“聪明”,能识别货币单位并自动转换。
你可以先自己思考一下:如何从 100CNY 这个字符串里,既取出数字 100,又判断出单位 CNY 呢?
📝 动手练一练
- 注释练习:为你上一节写的汇率兑换程序(或者本节提供的代码)添加完整的文件头多行注释,并为你认为关键的代码行加上单行注释。
- 安全升级:将你程序中的
eval()函数调用,替换成更安全的float()函数。 - 命名挑战:假设我们要记录用户兑换的次数,你会给这个变量起什么名字?请根据命名规则和最佳实践,写出3个你认为好的变量名和1个不好的变量名,并说明理由。
👉 点击查看第3题参考答案
好的变量名示例:
exchange_count: 清晰表达了“兑换次数”的意思,使用蛇形命名法。total_conversions: 使用复数形式,暗示这是一个累计总数。num_of_exchanges: 虽然稍长,但意思非常明确。
不好的变量名示例:
a: 完全无法表达含义,是“反面教材”。c1: 含义模糊,可能是 count 1,也可能是其他什么。EXCHANGE(全大写): 全大写通常用于常量,而这个值显然是会变化的。
关键思路:变量名要像迷你注释,让人一眼就知道里面装的是什么“数据”。
本章小结
这一节我们没有增加新功能,但却做了一件更重要的事:读懂并规范了我们写出的第一段代码。你知道了如何用注释给代码加“说明书”,理解了变量和常量的区别,学会了起一个好变量名的规则,也认识了程序的基本骨架(表达式、输入、输出)。
更重要的是,你了解了一个关键的编程安全原则:永远不要信任用户的直接输入,尤其是使用 eval() 这样的危险函数时。
📋 行动清单
学完本节,你可以立刻做这几件事:
- 打开你的汇率兑换程序,为它加上规范的文件头注释。
- 把程序中所有的
eval()替换成安全的float()。 - 检查你的变量名,如果有无意义的
a、x,试着给它换个更清晰的名字。
—— 小象教研组
配套资料 · 直接下载
课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。
- 下载第2章代码包:汇率兑换(含全部版本 5 个 .py)ZIP · 3KB