查看全课大纲(第 8 / 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.空气质量数据怎么“洗”干净,还能画成图?

汇率兑换2.0(上):让程序看懂“CNY”和“USD”

约 22 分钟

小象实战讲义 · Python 入门:8 个小项目边玩边学

还记得我们上一节做的那个“傻瓜”汇率计算器吗?它只能把人民币换成美元。今天,我们要给它升级,让它变得更聪明!升级后的程序,你只需要输入“100CNY”或者“50USD”,它就能自动判断是人民币还是美元,然后帮你换算成另一种货币。听起来是不是更像一个真正的工具了?我们这就开始!

💡 核心导读

  • 项目迭代:从1.0到2.0,我们只做一件事——让程序能识别带单位的货币输入。
  • 新知识点:认识字符串,并学会如何“切”出其中我们想要的部分(比如“CNY”)。
  • 平滑过渡:我们只讲字符串的“切片”操作,判断逻辑(if)留到下一节。一次只学一个点,绝不贪多。
  • 趣味锚点:你会学到程序员数数的一个“怪癖”,以及一个超实用的“切蛋糕”技巧,让你轻松拿到字符串的末尾几位。

项目升级:从“单行道”到“智能识别”

我们的1.0版本程序,就像一条单行道,只能把人民币(CNY)换算成美元(USD)。现在,用户的需求升级了:“我手里既有人民币也有美元,你能不能都帮我换?”

所以,2.0版本的核心任务就是:根据用户输入的货币单位,自动选择正确的换算方向。

要实现这个目标,我们需要分两步走:

  1. 识别单位:从用户输入的“100CNY”或“50USD”中,把“CNY”或“USD”这部分提取出来。
  2. 判断并计算:根据提取出的单位,决定是“人民币兑美元”还是“美元兑人民币”。

本节我们只完成第一步:学会如何从字符串中“切”出我们想要的部分。 判断逻辑是下一节的内容。记住,一次只做一件事,学习曲线才平滑。

字符串:程序世界里的“文本”

当用户通过 input() 函数输入“100CNY”时,程序接收到的是一个字符串。你可以把字符串理解为一串字符(文字、数字、符号)组成的“文本”。

在Python中,字符串用单引号 ‘ ’ 或双引号 “ ” 包裹起来。

# 这些都是字符串
a = 'Hello World'
b = "100CNY"
c = '3.14'

注意:即使里面全是数字,只要被引号包着,它就是字符串,不能直接进行数学运算。我们之前用 eval() 把 ‘100‘ 变成了数字 100,但现在 ‘100CNY‘ 里有字母,eval() 就无能为力了。我们需要新方法。

字符串切片:像切蛋糕一样取子串

我们的目标是从 “100CNY“ 里取出后三位 “CNY“。这个操作在编程里叫做字符串切片。

要理解切片,先得知道Python怎么给字符串里的每个字符“编号”。

程序员数数法:从0开始

假设我们有一个字符串 s = “Python“。

字符: P   y   t   h   o   n
正向索引:0   1   2   3   4   5
反向索引:-6  -5  -4  -3  -2  -1

看到了吗?程序员数数是从0开始的!P是第0位,y是第1位,以此类推。这和我们日常从1开始数的习惯不同,但请慢慢适应它,这是编程世界的通用规则。

同时,为了方便从末尾开始数,Python还提供了反向索引,最后一个字符是-1,倒数第二个是-2。

单个字符的访问

知道了编号,我们就能用中括号 [] 来访问特定位置的字符。

s = 'Python'
print('第一个字符是:', s[0])   # 输出:P
print('第三个字符是:', s[2])   # 输出:t
print('最后一个字符是:', s[-1]) # 输出:n
print('倒数第三个字符是:', s[-3]) # 输出:h
第一个字符是: P
第三个字符是: t
最后一个字符是: n
倒数第三个字符是: h

区间切片:拿到一串字符

访问单个字符解决不了我们的问题,我们需要的是“CNY”这三个字符。这时就要用到区间切片,语法是 [start:end]。

它的意思是:从索引 start 开始,到索引 end 之前结束(不包含 end 本身)。

关键技巧:切出来的子串长度 = end - start。

让我们在 s = ‘Python‘ 上练习一下:

s = 'Python'
print(s[0:3]) # 从0开始,到3之前。长度=3-0=3。输出:Pyt
print(s[2:5]) # 从2开始,到5之前。长度=5-2=3。输出:tho
print(s[1:4]) # 从1开始,到4之前。长度=4-1=3。输出:yth
Pyt
tho
yth

简写小窍门:

  • 如果从开头(0)开始切,start 可以省略:s[:3] 等价于 s[0:3]。
  • 如果一直切到末尾,end 可以省略:s[2:] 表示从索引2切到最后。
  • 对于我们最关心的“取后N位”,利用反向索引的省略写法超级方便:s[-3:] 表示“从倒数第3位开始,一直取到末尾”。完美!
s = 'Python'
print('前三位:', s[:3])    # 输出:Pyt
print('从第三位到最后:', s[2:]) # 输出:thon
print('后三位:', s[-3:])   # 输出:hon (看,拿到后三位了!)
前三位: Pyt
从第三位到最后: thon
后三位: hon

实战:升级我们的汇率计算器

理论武装完毕,现在回到我们的项目。我们将在1.0版本的基础上,创建2.0版本的文件,并完成“识别单位”这一步。

本节新增功能:从带单位的货币字符串中,提取出货币单位。

"""
    作者:小象
    功能:汇率兑换
    版本:2.0 (第一部分)
    新增功能:从带单位的输入中提取货币单位
"""

# 汇率 (这个没变)
USD_VS_RMB = 6.77

# 输入变了:现在是带单位的货币金额,例如 "100CNY" 或 "50USD"
currency_str_value = '100CNY'  # 原程序这里用 input(),为了演示我们先写死一个值

# 🎯 本节核心操作:使用字符串切片获取货币单位
# 思路:单位是后三位,所以用 [-3:] 切片
unit = currency_str_value[-3:]

# 打印出来看看我们提取的对不对
print('您输入的货币单位是:', unit)

# 顺便也把金额部分提取出来(为下一节做准备)
# 金额是除了后三位之外的部分,所以用 [:-3] 切片
amount_str = currency_str_value[:-3]
print('您输入的货币金额是:', amount_str)

# 注意:amount_str 目前还是字符串,不能直接计算
# 下一节我们会判断 unit 是 CNY 还是 USD,再决定如何转换 amount_str

运行一下上面的代码,你会看到:

您输入的货币单位是: CNY
您输入的货币金额是: 100

太棒了!我们已经成功地从“100CNY”中分离出了“CNY”和“100”。你可以把第一行的 currency_str_value 改成 ‘50USD‘ 再运行一次,看看单位是不是变成了“USD”,金额是不是“50”。

我们做到了什么?

恭喜!在2.0版本的第一部分,我们成功引入了字符串切片这个新武器,并解决了“智能识别”功能中最关键的一步——提取货币单位。

我们学会了:

  • 字符串切片 [start:end] 的用法,以及 [:end], [start:], [-N:] 这些实用的简写。
  • 程序员从0开始数数的“传统”。
  • 如何从一个完整的输入(如“100CNY”)中,精准地“切”出我们需要的部分(单位“CNY”和数字“100”)。

现在,我们的程序已经能“看懂”用户输入的是人民币还是美元了。下一节,我们将学习如何使用 if 判断语句,让程序根据不同的单位执行不同的换算逻辑,最终完成一个真正智能的汇率兑换工具!

📝 动手练一练

  1. 切片练习:假设有一个字符串 my_str = ‘HelloXiaoXiang‘,请写出代码,分别提取并打印出:

    • 前5个字符 (‘Hello‘)
    • 第6到第9个字符 (‘Xiao‘)
    • 最后6个字符(提示:先猜一猜,再用代码验证,看看是不是你想的 'Xiang')
  2. 举一反三:在我们的汇率程序中,如果用户输入时不小心在单位和金额之间加了一个空格,比如输入了“100 CNY“,我们原来的 currency_str_value[-3:] 还能正确提取出单位吗?如果不能,你觉得问题出在哪?有什么思路可以解决?(提示:想想空格也是一个字符)

👉 点击查看参考答案

1. 切片练习参考答案

my_str = 'HelloXiaoXiang'

# 提取前5个字符 (索引0到5,不包含5)
print('前五个字符:', my_str[0:5])  # 或 my_str[:5]

# 提取第6到第9个字符 (索引5到9,不包含9)
# 'H e l l o X i a o ...'
#  0 1 2 3 4 5 6 7 8 ...
print('第六到第九个字符:', my_str[5:9])

# 提取最后6个字符(注意:'Xiang' 只有5个字符,[-6:] 会多带上前面的 'o')
print('最后六个字符:', my_str[-6:])  # 输出 oXiang;想只要 'Xiang' 应该用 [-5:]
前五个字符: Hello
第六到第九个字符: Xiao
最后六个字符: oXiang

2. 举一反三思路参考 先动手验证:"100 CNY" 一共 7 个字符(1、0、0、空格、C、N、Y),空格在中间第 4 位,最后三个字符仍然是 CNY。所以这种写法下 [-3:] 依然能正确取出单位——这也是切片“只看末尾、不关心前面多长”的好处。

但这个输入并非完全没有隐患:

  • 用 [:-3] 取金额时会得到 '100 '(末尾带空格)。好在 float('100 ') 能自动忽略首尾空格,本例换算不会出错;但做字符串比较等操作时这个空格就可能惹麻烦。
  • 真正会让 [-3:] 失效的是空格出现在末尾,比如 "100CNY ":最后三个字符变成 "NY ",单位就切错了。

更健壮的思路(后续版本会学到):

  1. 用 .strip() 先去掉首尾多余空格(注意:中间的空格它去不掉)。
  2. 用 .split() 按空格把字符串切成两部分,如 "100 CNY".split() 得到 ['100', 'CNY'],金额和单位各自就位,不受位数影响。
  3. 或在提示语里要求用户严格按“数字+单位”(无空格)输入,用规范输入简化逻辑。

在初学阶段,我们先采用“规范输入”的方式;更灵活的输入处理会在后续版本中用 split() 等方法实现。

本章小结

在本节中,我们为汇率兑换项目开启了2.0版本的升级之路,迈出了“智能识别”的第一步。

📋 行动清单

  • 运行本节最后的代码,尝试将 currency_str_value 的值改为 ‘258USD‘、‘15.5CNY‘,观察提取出的单位和金额是否正确。
  • 在交互式环境(Python Shell或Jupyter Notebook)里,创建一个自己的字符串,练习使用 [ : ]、[ :N]、[N: ]、[-N:] 等多种切片方式,感受它们的效果。
  • 预习一下:如果 unit 的值是 ‘CNY‘,我们该怎么做?如果值是 ‘USD‘,又该怎么做?想想你手动的判断逻辑,下一节我们用代码把它实现出来。

—— 小象教研组

配套资料 · 直接下载

课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。

  • 第2章代码包:汇率兑换(含全部版本 5 个 .py)
    ZIP · 3KB
    下载
看图文没弄懂?展开看本节视频讲解(约 22 分钟)
📺 正在播放小象学院官方高清录播(支持倍速与清晰度调节)