查看全课大纲(第 8 / 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.空气质量数据怎么“洗”干净,还能画成图?
汇率兑换2.0(上):让程序看懂“CNY”和“USD”
约 22 分钟
小象实战讲义 · Python 入门:8 个小项目边玩边学
还记得我们上一节做的那个“傻瓜”汇率计算器吗?它只能把人民币换成美元。今天,我们要给它升级,让它变得更聪明!升级后的程序,你只需要输入“100CNY”或者“50USD”,它就能自动判断是人民币还是美元,然后帮你换算成另一种货币。听起来是不是更像一个真正的工具了?我们这就开始!
💡 核心导读
- 项目迭代:从1.0到2.0,我们只做一件事——让程序能识别带单位的货币输入。
- 新知识点:认识字符串,并学会如何“切”出其中我们想要的部分(比如“CNY”)。
- 平滑过渡:我们只讲字符串的“切片”操作,判断逻辑(
if)留到下一节。一次只学一个点,绝不贪多。 - 趣味锚点:你会学到程序员数数的一个“怪癖”,以及一个超实用的“切蛋糕”技巧,让你轻松拿到字符串的末尾几位。
项目升级:从“单行道”到“智能识别”
我们的1.0版本程序,就像一条单行道,只能把人民币(CNY)换算成美元(USD)。现在,用户的需求升级了:“我手里既有人民币也有美元,你能不能都帮我换?”
所以,2.0版本的核心任务就是:根据用户输入的货币单位,自动选择正确的换算方向。
要实现这个目标,我们需要分两步走:
- 识别单位:从用户输入的“100CNY”或“50USD”中,把“CNY”或“USD”这部分提取出来。
- 判断并计算:根据提取出的单位,决定是“人民币兑美元”还是“美元兑人民币”。
本节我们只完成第一步:学会如何从字符串中“切”出我们想要的部分。 判断逻辑是下一节的内容。记住,一次只做一件事,学习曲线才平滑。
字符串:程序世界里的“文本”
当用户通过 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。输出:ythPyt
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 判断语句,让程序根据不同的单位执行不同的换算逻辑,最终完成一个真正智能的汇率兑换工具!
📝 动手练一练
切片练习:假设有一个字符串
my_str = ‘HelloXiaoXiang‘,请写出代码,分别提取并打印出:- 前5个字符 (
‘Hello‘) - 第6到第9个字符 (
‘Xiao‘) - 最后6个字符(提示:先猜一猜,再用代码验证,看看是不是你想的
'Xiang')
- 前5个字符 (
举一反三:在我们的汇率程序中,如果用户输入时不小心在单位和金额之间加了一个空格,比如输入了
“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
最后六个字符: oXiang2. 举一反三思路参考 先动手验证:"100 CNY" 一共 7 个字符(1、0、0、空格、C、N、Y),空格在中间第 4 位,最后三个字符仍然是 CNY。所以这种写法下 [-3:] 依然能正确取出单位——这也是切片“只看末尾、不关心前面多长”的好处。
但这个输入并非完全没有隐患:
- 用
[:-3]取金额时会得到'100 '(末尾带空格)。好在float('100 ')能自动忽略首尾空格,本例换算不会出错;但做字符串比较等操作时这个空格就可能惹麻烦。 - 真正会让
[-3:]失效的是空格出现在末尾,比如"100CNY ":最后三个字符变成"NY ",单位就切错了。
更健壮的思路(后续版本会学到):
- 用
.strip()先去掉首尾多余空格(注意:中间的空格它去不掉)。 - 用
.split()按空格把字符串切成两部分,如"100 CNY".split()得到['100', 'CNY'],金额和单位各自就位,不受位数影响。 - 或在提示语里要求用户严格按“数字+单位”(无空格)输入,用规范输入简化逻辑。
在初学阶段,我们先采用“规范输入”的方式;更灵活的输入处理会在后续版本中用 split() 等方法实现。
本章小结
在本节中,我们为汇率兑换项目开启了2.0版本的升级之路,迈出了“智能识别”的第一步。
📋 行动清单
- 运行本节最后的代码,尝试将
currency_str_value的值改为‘258USD‘、‘15.5CNY‘,观察提取出的单位和金额是否正确。 - 在交互式环境(Python Shell或Jupyter Notebook)里,创建一个自己的字符串,练习使用
[ : ]、[ :N]、[N: ]、[-N:]等多种切片方式,感受它们的效果。 - 预习一下:如果
unit的值是‘CNY‘,我们该怎么做?如果值是‘USD‘,又该怎么做?想想你手动的判断逻辑,下一节我们用代码把它实现出来。
—— 小象教研组
配套资料 · 直接下载
课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。
- 下载第2章代码包:汇率兑换(含全部版本 5 个 .py)ZIP · 3KB