文章目录
- 安装、需求引导和开发模型
- 命令行计算器
- 用温度指导穿衣
- VS Code 和女孩子的衣柜
- 用遍历来挑选衣物
- 交互
- 课后作业
事情的起因是这样的,知乎上有个妹纸加我,说要相亲。尽管我欣喜若狂,但恰巧在外出差,根本走不开。妹纸于是说要不教她编程吧,为了在相亲之前留个好印象,我使出了浑身解数,希望在短时间内让一个毫无编程经验的萌妹纸,掌握Python的基本用法。
安装、需求引导和开发模型
古人云,授人以鱼不如授人以渔,但对于卖课程的人来说,他若真的把“渔”授人了,那他自己的“鱼”也就卖不出去了。这个“渔”,就是快速学习一门编程语言的方法。
而这个方法的核心,就是用需求引导取代知识灌输
一旦建立起项目观念,同时项目进度和学习进度同步推进,那么二者前进的过程,也会变得无比丝滑。
所以接下来,就是要完成这个基本的需求:如何做一个可以挑选衣服的功能。
这个功能可简单、可复杂,对于新手而言,却可以成梯次地拆分成不同的任务需求,每个需求对应一个知识点,随着知识点的增多,需求也不断增多,一定程度上就相当于是瀑布模型的简化版了。
而万事开头难,在确定学习目标后,第一步就是安装Anaconda
。在此前,我一向认为这步相对来说比较复杂,故而更推荐在线的IDE,例如这个:在线Jupyter编辑工具。
但在一对一指导的情况下,推荐在线工具过于敷衍,故而一步到位,直接建议安装Anaconda,清华源按照时间排序,拉到最下方,下载2022.05-Windows-x86_64
版本。安装过程意外地顺利,基本上出去走一圈就装好了。
命令行计算器
装好Anaconda之后,就可以愉快地使用命令行了。按下Win
+r
,输入cmd
,然后回车,就可以进入命令行。
在命令行中输入python
,就可以进入Python
的交互环境,然后就可以按照直觉,进行四则混合运算了
x = 100y = 50z = 2.5print(x + y * z) # 在python中,用#注释,注释就是不会被执行的文字print(x - y / z) # print,将括号中的结果打印到屏幕上print(x * y**2) # **表示乘方
就是说,就算只是当作计算器,使用Python也是不亏的。
对于一些复杂的计算,可以自行定义函数,比如
def GouGu(x,y): return (x**2+y**2)**(1/2)
其中,def
是函数的关键字,这个函数表示输入x,y
,输出一个(x**2+y**2)*(1/2)
,就是勾股定理,相当于
z = x 2 + y 2 z=\sqrt{x^2+y^2} z=x2+y2
需要注意,Python中,通过缩进组织代码,在GouGu
这个函数中的所有内容,必须保持相同的缩进,否则就相当于是跳到了函数之外。
在定义好函数之后,就可以在命令行中调用
>>> GouGu(3,4)5
用温度指导穿衣
在开启Python,稍微尝试一下计算功能后,就要开始带来第一波刺激,实现根据温度筛选衣物。
t = 15if t > 20 : print('天气较热,穿薄一点')elif t < 0: print("天气较冷,穿厚一点")else: print("天气适宜,随便穿")
这就是所谓的条件语句,根据温度不同,实现了一个最基本的穿衣建议。非常神奇的是,这段代码我貌似并没有给她讲解,但她明白是什么意思。
但需要再次注意,Python中通过缩进来组织代码,在if, elif, else
这三个关键字冒号的后面,必须进行相同的缩进,Python才能正常工作。
总之,在后续的编程学习中,缩进这两个字出现的频率相当之高。
这里面涉及到的另一个知识点就是字符串,在python中,单引号或者双引号内部的字符,将被识别为字符串,字符串和数值是两种截然不同的东西,这种不同可以从python内置的运算符重载看出端倪
1+1 # 显然等于2'1'+'1' # 结果为'11'
如果仅仅是做一个if...elif...else
语句,那么只能判断一次温度,这个太蠢了,为了随时调用,可以将这个逻辑压入一个函数中
def howToDress(t): if t > 20 : print('天气较热,穿薄一点') elif t < 0: print("天气较冷,穿厚一点") else: print("天气适宜,随便穿")
结合函数的知识,可以进一步理解缩进,即if, elif, else
是相对于def
进行的缩进;而那三个print
则是相当于条件语句的缩进。
这样,就可以更加方便地进行穿衣指导了
>>> haoToDress(15)天气适宜,随便穿
VS Code 和女孩子的衣柜
在本节之前,一直通过命令行交互地进行Python练习,这没毛病,但显然无法做一个项目,因为命令行不会把敲过的命令留存下来。
Anaconda提供了Python的IDE,Spider;也提供了交互式记事本Jupyter,但均非长久之计。考虑到她无比顺畅地完成了Anaconda的安装,那么关于编辑器的选择,自然也要一步到位,上VS Code。
VS Code的安装过程也非常顺利,第一次打开会提示安装中文语言包,安装即可。
接下来,新建一个文件夹,以后所有的代码都存放在这个文件夹里,然后用VS Code打开这个文件夹,右键这个文件夹,并新建一个.py
文件。VS Code会自动检测到py
文件,按照提示,安装Python扩展。由于她只给了我这个截图,说明后续的过程都是顺利的。
接下来,如本节标题所说,要把女孩子的衣柜写入这个.py
文件中。
而衣柜的前提是有一件衣服,那么如何在Python中描述一件衣服呢?
答案是字典,或者说键值对列表,通过键和值的一一对应,在描述客观事物属性的同时,也实现了对属性值的快速索引。
dress = { "name":"羊羔绒外套", "color":"白色", "style":"外套" "low_temp":-5, "high_temp":8,}
首先,这是一个名为字典的变量,里面包含了各种属性,比如”name”, “color”等,每个属性都对应一个值,这个值可以是字符串,比如”color”是”白色”,也可以是数值,比如”low_temp”为-5,表示温度高于-5°时可以穿。
如想单独提出dress
的某个属性,可用方括号索引
print(dress['color']) #"白色"
如想运行.py
文件,只需在命令行中输入python XXX.py
,便可以运行python脚本。VS Code中是自带命令行的,只需按下Ctrl
+~
就可以出现。关于这个我忘了说,以至于她一直在那个“黑黑的”命令行中操作。
所谓“衣柜”,就是一个装着各种衣服的列表,所谓列表,就是用[]
罗列着的内容,如果用字典来理解列表,就相当于是以自然数为键的字典。
而后她十分兴奋,说这不得写几个小时,吓得我大惊失色,说先稍微列出几个做测试就行,等以后学了面向对象,直接就用类来做了,最后得到了一个衣柜的demo,如下。
与字典的键值索引类似,列表采取自然数索引,例如
print(clothes[0]) # 将输出羊羔绒外套这个字典
用遍历来挑选衣物
有了衣柜,有了选衣服的逻辑,就可以实现一个最基础的选择衣服的函数。这个需求也来一步一步做,还是先完善通过温度选择衣物的方法
def whichDress(t): selected = [] for cloth in clothes: if cloth['low_temp'] < t < cloth['high_temp']: selected.append(cloth) return selected
其中,cloth['low_temp'] < t < cloth['high_temp']
这种写法是在我没有做任何说明的情况下,她自己写的。这一方面说明她是个挺有天赋的妹纸,同时也说明Python是一款非常甜的语言(指语法糖超多)。
但她对append
是干啥的不理解,所以我让她做如下测试
a = []a.append("b")print(a) # ["b"]a.append("c")print(a) # ["b", "c"]
整段函数的逻辑就是,输入一个温度,然后遍历clothes
字典,挑选出所有符合温度要求的衣服,最后输出。
for...in
语句非常直观,以for cloth in clothes
为例,就是将clothes
列表中所有的内容,按次赋给cloth
,这就是所谓的遍历。
当然,for...in
最常用的方法应该是结合range
,实现对自然数的遍历,上面的那个遍历过程也可以写为
for i in range(len(chothes)): print(clothes[i])
其中,len
可以得到clothes
的元素个数,至于range
是什么,可以用下面的表达式试一下
for i in range(5): print(i)
交互
能够做到这个程度,妹纸就已经非常兴奋了,毕竟能够用温度来选择衣物,也就意味着能够用其他特征来筛选衣物。接下来要完成的,就是另一个重要的内容:交互。
我们常见的程序都是通过图形界面来完成交互,但对于新人程序媛来说,这显然不太现实,所以这种交互,也是建立在命令行之上的。
在python中,通过print
将字符串打印到命令行,反过来,通过input
来从命令行请求值,例如
>>> t = input("请输入温度")请输入温度15>>> print(t)15
有了这个,就可以做到交互式的衣物择取,但这里有一个知识点,即通过input
得到的值,是一个字符串,尽管看上去15
是个数字,但只是伪装成数字的字符串罢了,如果想进行计算或者比较,必须通过int
或者float
使之变成整数或者小数。
>>> t + 1Traceback (most recent call last): File "", line 1, in <module>TypeError: can only concatenate str (not "int") to str>>> int(t)+116>>> float(t)+116.0
查看报错信息,也是编程学习过程中不可或缺的任务,Python的报错信息已经非常人性化了,TypeError
为数据类型错误,后面说只能把字符串(str
)和字符串拼接起来,而不能是int
。换句话说,在t+1
这样的一个表达式中,+
根据t
的数据类型,自动表现为字符串拼接的意思,但因为数据类型不同,而无法实现。
有了这个功能,就可以实现手动输入温度,并给出可选衣物。如果将这样的一个逻辑写入一个死循环中,就可以选择多种温度下的情况
while True: t = input("请输入温度") dress = whichDress(int(t)) print(dress)
在这步操作时,如果忘了写input
,而恰好前面某个地方又给t
赋了值的话,就会导致命令行疯狂地不间断地输出,这时不必慌张,更不用关掉命令行,只需按下Ctrl
+C
就可以了
课后作业
最后,留下一个妹纸在调试过程中出现的小问题,如果您阅读并实现了本文的操作,看看能不能找出问题的所在
至此,妹纸已经基本学会了Python,所以最近的一个多月都没怎么回我消息了,她一定是在准备相亲吧,我们以后的孩子是学Python还是学C++呢?