查看全课大纲(第 7 / 51 节)
  1. 1.为什么人人都该学点编程?
  2. 2.计算机与程序设计:你的电脑到底在“想”什么?
  3. 3.Python 这门语言,到底有什么魔力?
  4. 4.Python 开发环境配置:如何拥有你的第一个“编程工具箱”?
  5. 5.如何安装一个更强大的代码编辑器?
  6. 6.汇率兑换1.0:你的第一个“钱生钱”小程序
  7. 7.你的第一行代码,藏着哪些秘密?
  8. 8.汇率兑换2.0(上):让程序看懂“CNY”和“USD”
  9. 9.汇率兑换程序,如何让它“聪明”地判断币种?
  10. 10.汇率兑换程序能一直运行,直到我喊停吗?
  11. 11.汇率兑换4.0:如何把“算钱”功能打包成积木?
  12. 12.汇率兑换5.0:给你的程序穿上“结构化”的西装
  13. 13.怎么用 Python 画一个会动的五角星?
  14. 14.如何让程序自动画出不同大小的五角星?
  15. 15.函数自己调用自己,会发生什么?
  16. 16.用递归画出神奇的分形树
  17. 17.Python 怎么计算你一天躺着不动能消耗多少热量?
  18. 18.如何让程序“活”起来,持续为你服务?
  19. 19.如何让 BMR 计算器更“聪明”?
  20. 20.当程序遇到“不按套路出牌”的用户怎么办?
  21. 21.怎么用 Python 模拟一个“滚雪球”式的存钱计划?
  22. 22.如何用列表记录每一周的存款?
  23. 23.如何让程序自己数数?—— 用 for 循环解放你的双手
  24. 24.52周存钱挑战4.0:你的存款计算器能有多灵活?
  25. 25.52周存钱挑战:怎么根据日期自动查存款?
  26. 26.Python 怎么判断一年中的第几天?
  27. 27.列表 vs 元组:哪个更适合存储月份天数?
  28. 28.用集合给月份分个队,换个思路算天数
  29. 29.把月份和天数“锁”在一起:用字典给数据配个对
  30. 30.Python 怎么判断密码强弱?
  31. 31.Python 怎么给密码设置“防沉迷”系统?
  32. 32.Python 怎么把密码保存到文件里?
  33. 33.Python 怎么读取文件里的密码?
  34. 34.Python 怎么把密码检查工具“打包”起来?
  35. 35.Python 怎么把文件操作也“打包”起来?
  36. 36.计算机怎么“扔骰子”?——用Python模拟随机事件
  37. 37.如何用 Python 模拟掷两个骰子?
  38. 38.怎么用 Python 把骰子轨迹画出来?
  39. 39.骰子点数分布长啥样?用直方图一眼看穿!
  40. 40.用科学计算库让骰子程序“起飞”
  41. 41.空气质量指数怎么算?手把手教你写一个AQI计算器
  42. 42.空气质量指数计算:从零开始,让程序看懂空气
  43. 43.如何读取空气质量数据文件并找出空气质量最好的五个监测点?
  44. 44.JSON 数据怎么变成 Excel 表格?—— 让数据换个“马甲”
  45. 45.Python 怎么让程序自己判断文件类型?
  46. 46.如何让程序自己上网查空气质量?
  47. 47.用美味的汤来解析网页:Beautiful Soup 入门
  48. 48.如何让爬虫自动抓取全国所有城市的空气质量?
  49. 49.爬到的数据怎么存下来?—— 把全国空气质量数据保存为CSV文件
  50. 50.用 pandas 玩转空气质量数据:找出全国空气最好和最差的城市
  51. 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. 给自己做记录:过几天再看,能立刻想起来这行代码是干嘛的。
  2. 方便别人理解:如果别人要维护你的代码,注释能帮他快速理清思路。

怎么写注释?

  • 单行注释:用 # 开头,后面写说明文字。可以独占一行,也可以写在代码行的后面。
  • 多行注释:用三个双引号 """ 开头和结尾,中间可以写多行说明。通常放在整个程序的开头,用来描述程序作者、功能、版本等信息。

我们给程序加上一个完整的“文件头”吧:

"""
    作者:你的名字
    功能:汇率兑换
    版本: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,就是这个道理。看到全大写,大家心里就有数了。

起名字的学问:变量命名规则

给变量起名字,就像给自己的孩子起名,不能太随意。一个好名字能让代码“自解释”,一看就懂。

基本规则(必须遵守):

  1. 组成元素:只能由字母、数字和下划线 _ 组成。
  2. 不能数字开头:1money ❌, money1 ✅。
  3. 大小写敏感:name、Name、NAME 是三个不同的变量。
  4. 不能是保留字: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 呢?


📝 动手练一练

  1. 注释练习:为你上一节写的汇率兑换程序(或者本节提供的代码)添加完整的文件头多行注释,并为你认为关键的代码行加上单行注释。
  2. 安全升级:将你程序中的 eval() 函数调用,替换成更安全的 float() 函数。
  3. 命名挑战:假设我们要记录用户兑换的次数,你会给这个变量起什么名字?请根据命名规则和最佳实践,写出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
    下载
看图文没弄懂?展开看本节视频讲解(约 14 分钟)
📺 正在播放小象学院官方高清录播(支持倍速与清晰度调节)