引子: 未来已来,面对电脑屏幕上的四个大字,我的思绪又回到了2018年11月12日。是的,未来已来,人工智能的浪潮即将来临,我该做些什么呢?是学习、用知识进行充电!机会永远属于有准备的人。恰恰此时,熊猫小课推送了Python小课开课的消息,于是我毫不犹豫地报名参加。从原来的1.0版本到现在上线的2.0版本,吴枫老师及其团队的表现让人大开眼界,叹为观止!2.0版本的效果是极为震撼的,课堂的交互式体验和游戏闯关的学习模式让人在不知不觉中学到了知识,趣味性、知识性、科学性秉承一体。更让人眼前一亮的是:用白话语言解释专业术语,无缝结合,通俗易懂,没有任何编程基础的小白也能看得懂,这也许是Python小课的魅力所在吧。闲话少说,接下来一起和我进入Python世界的冒险之旅。
首先点击风变编程进入学习的界面,课程提供了四节体验课,分别是第0关至第三关,每一关就是一个情景故事,而你就是这个故事的主角。
第0关:千寻的名字
我们初入陌生的Python世界,与其一迈进大门就盲目地向前冲,不如先对Python有个大概的认知。
我们已经知道,Python是一门编程语言,能够帮助我们更好地与计算机“沟通”。不仅如此,它还是编程语 言界里的新晋网红。现在学校的各路考试中都能见到Python的身影,企业正在高薪招聘Python人才,甚至,越来越多非技术岗的人也开始学习Python了。
编程是一件有趣的事儿。Python能帮你解放双手,提高工作效率;会成为你的职场助手,帮你升职加薪;它也可以让计算机给你画个画儿。总之:Python能为我们实现的事可多了去了。但是,我们在仰望星空的同时,也不能忘了脚踏实地,否则,地基不稳,怎么能盖得起高楼呢?
要做出高大上的项目,我会带你从最基础的【print()函数】、【数据类型】开始学起。这一阶段,你或许会觉得知识都很简单,但相信我,这一*打地基*的阶段是最为重要的。
基于此,你才能写出更难一点儿的【条件判断】、【循环语句】以及各种嵌套,再往后,你会破解函数的秘密。当你真正入门基础语法后,Python庞大的模块库,就能成为你尽情发挥的“游乐园”了。
为了给大家最符合认知规律的学习体验,我会在电脑端里专注于Python知识点的讲解,坚持“知行合一”的教学方式,就是要包你学会,还要让你学得挺开心。
同时,思维的提升也必不可少,酱酱每天会在社群里分享手机端的认知课。我相信这可以解决你对人工智能、Python、未来学习路径的疑惑,请别忘了同步学习。
现在,你要来认识一个能让你边学边练的重要助手:风变编程在线编译器。
这个在线编译器由左右两部分组成。左边的框叫做【代码框】,我们往里面输入对计算机的指令:也就是代码本码;右边的框我们叫它【终端】,它是显示你代码运行结果的地方。
在0-3关,你需要掌握的所有代码都能在这个在线编译器中运行。因此,你可以暂时不用费劲地安装本地环境,先踏踏实实地用好在线编译器,跟上课堂学习。
好啦,既然你已经对Python有了初步的认识,那么,事不宜迟,咱们现在就来体验一下Python能实现的事儿:试着自己运行几段代码吧!
首先,来到你面前的是一个图像识别的小程序。它能做的是将写在纸上的文字,精准地识别出来。如下图:
来,点击运行下面的程序就好,除此之外不需要做任何操作。你会看到,机器能精准的识别图片中的文字,这就是我们能通过Python帮计算机做到的:图像识别,让计算机拥有“眼睛”,看懂图片。
你知道,图像识别是人工智能领域的一个应用。下面,我们再来一个更厉害的:真正地运行一个人工智能小程序,和计算机进行“对话”。
请直接在左边的代码区点击【运行】,然后根据提示操作:第1步:点击回车键;第2步:在右边的【终端】区域(注意不是左边)在英文状态下输入数字;第3步:敲击键盘的回车键执行。
我输入了:“人工智能”,然后按下回车键。
你是不是看到在黑色的终端里,冒出了你的游戏角色,它正根据你的分兵排布和电脑互掐?那么,恭喜你!你已经亲手运行了自己的第一个人工智能小程序!忍不住想要为你放个烟花,作为你运行出第一个小程序的奖励。
以上这些,都是Python可以实现的浩翰功能中的一个小角落,然而,Python还有更广阔的天地等着你去探索!
在编程界,有一句话非常出名,叫“Talk is cheap, show me the code.”——空谈无益,秀代码。我们现在从print()函数开始,先试着自己写下一行代码吧!
你会看到下面左侧代码框内,已经有一些代码。那是我为你准备的彩蛋,不要把他们删掉了哦。请在第3行抄写,然后一字不差地抄代码print(520)。注意,这里的括号一定要用英文括号,不然会报错。抄写完后,点击【运行按钮】。
一切在这一刻开始变得不同,因为,你已经成功写出了人生中的第一行Python代码!
你能够实现与计算机交互的“初体验”,离不开print()函数的帮忙。这也是我们即将解锁的第一个Python语法知识点。
print()函数
接下来,你即将进入到《千与千寻》的世界,在故事里进一步地学习print()函数的用法。(提示:即便没看过《千与千寻》也不影响你理解后面的代码知识。)
准备好了吗?3、2、1……
随着你敲下回车键,在键盘清脆的声响戛然而止的瞬间,一片温暖的光亮霎时把你包围。接着,白光渐渐散去,你缓过神,发现自己正置身于一个灯火通明的绮丽世界。
千寻与爸爸妈妈误入了鬼怪神灵休息的世界,为了拯救因为贪食而被变成猪的父母,千寻要与这个世界的掌权者汤婆婆签订一份劳动契约。
在这份契约里,汤婆婆把千寻的名字夺走并藏了起来,忘记自己是谁的小千寻从此踏上了寻找“自我”的道路。
接下来,你需要学会用print()函数帮千寻找回遗失的名字,因为在这个世界里,只有寻回真实姓名的人,才能找到回家的路。
在Python的魔法世界,我们如果想让计算机帮忙写出千寻的名字,该怎么运用print()函数对计算机发出指令呢?
观察一下上面这行代码的结构,再敲一下回车键,把上面这行代码原样复制到代码框中,点击运行,看看会出现什么结果。
看,屏幕上是不是出现了千寻的名字?这就是print()函数的主要功能:打印内容。
在这里,打印的意思是:让计算机把你给它的指令结果,显示在屏幕的终端上。
print()函数由两部分构成:1. 指令:print;2. 指令的执行对象:在print后面的括号里的内容。
这两部分合起来的意思就是:我们对电脑下指令——把括号里的内容打印给我瞧瞧。
虽然你只是输入了一个简单的print,但在背后,这段Python代码却帮你做了这样的一些事情:
(0)我们向计算机发出指令:“打印‘千寻’这两个字”;(1)Python把这行代码编译成计算机能听懂的机器语言;(2)计算机做出相应的执行;(3)最后把打印结果呈现在我们面前。
引号的用法
到这里,你已经亲自使用过两次print()函数了。我们来观察一下,你两次写下的print()函数语句有什么不一样的地方呢?
很明显,你会发现,在print('千寻')里,多了一对单引号。
那么问题又来了:这个单引号是干啥用的?为什么打印文字的时候需要加上引号呢?
这是因为,计算机的脑回路比较特别:只能理解数字,却读不懂文字。因为数字和数学运算是标准化、有固定格式的,而文字却能够千变万化。
如果你直接让计算机print(千寻),它会一脸懵并大声报错:“这两个字啥意思,你没有定义清楚,不懂诶……”
这,便是print()函数中引号的用法:当括号内有引号的时候,就相当于告诉计算机——你不需要执行多余的操作,我输入什么,你就打印什么。
此时,计算机会听话地执行你的命令,直接把引号内的内容打印出来。
在print()函数内不仅能使用单引号,还能使用双引号,两者的效果没什么区别,都能让你打印出一行文本。
有些时候,单引号和双引号可能会在括号内同时出现,比如print("Let's play")。
这种情况下,需要注意区分清楚哪个引号是属于print()函数结构,哪个引号是属于你要让计算机打印的内容,可别“混搭”了。
说这么多,运行一下代码就懂了。直接在下面代码框中点击运行,观察运行结果。(点击运行前先思考一下,在第三个print()函数中,哪个引号才属于print()函数结构)
很明显,在print("Let's play")中,没有被打印出来的引号就属于print()函数结构啦。
不过,在print()函数中,引号里的内容其实也不一定非得是文字,还可以是英文和数字。
但无论你往引号里放啥内容,计算机看到带引号的内容时都会理解为:哦,那我就原样把引号里的内容“复印”一份,显示在终端上吧。
相应地,在括号内没有引号的情况下,我们应该往括号内放入计算机能够“理解”的内容,如:数字或数学运算。
此时,print函数会让计算机尝试去“读懂”括号里的内容,并打印最终的结果。
么样才叫读懂呢?难道计算机还能给你做个阅读理解题不成?
要不然,我们来猜猜看,在代码框输入下列代码的话,计算机会在终端输出什么结果?
猜对啦!就算猜对了,也要亲自运行检验一下才放心。请在代码框中一字不错地输入print(1+1),并点击运行。(注意标点符号要用英文。)
在这里,计算机并没有再原样打印“1+1”,因为print(1+1)是计算机能直接读懂的数学运算,所以,它会直接打印出最终的运算结果:“2”。这就是计算机“读懂内容”的表现。
关于“运算”相关的知识,明天我们在讲解数据类型的时候将会进一步讲解。现在,你只需要了解print()函数,以及其带引号和不带引号的用法区别就好。
到这里,print()函数相关的知识就讲完啦。下面,是时候来做几道课堂练习,检验一下自己的学习成果了。
答对了!我们在括号内【加】引号的时候,才是让计算机“原样打印”。乘胜追击,我们来做下一题。
答对了!你也超可爱!~A选项漏了括号和引号;B选项用了不同的引号,会报错;C选项漏了引号。
完成了选择题,接下来,我们来试试自己用print()函数打印出“千寻的卖身契”。
为了让千寻替自己工作,汤婆婆拟了一份反人类的“血汗条款”:
那么,这份合约在Python中要如何显示呢?请你在下面的代码框中将这份合约打印出来(注意:使用print()函数,文字部分可直接复制上面的内容)。
相信你已经顺利地打印出千寻的合约了(这也意味着,我们的小千寻要苦兮兮地开始做打工妹了。。。)
如果上面的题目你都做出来了。那么恭喜你,你已经顺利掌握print()函数的基本写法了!
当然,没做出来也别灰心啊。你应该只是有一些小的疏漏而已,再跟着老师一起回顾一下print()函数的知识点,巩固一下吧。
觉得还挺简单的对吗?确实,迈出Python学习的第一步并不困难,但是,别小看了print()函数,它是你能实现与计算机沟通的关键。
没有print()函数,你就无法在终端中看到计算机在执行指令后返回的结果,也就是说,不借助print()函数的力量,你连计算机是否正确执行了你的指令都不知道。
现在,你已经解锁了Python中的第一个,也是非常重要的一个知识点。此时此刻,可不得给自己放个烟花庆祝一下嘛!
注意,前方高能预警,接下来,我要告诉你一个99%的初学者都踩过的代码bug。
在Python中,默认所有正确的语法,包括标点符号都是【英文】。不小心用了中文标点的话,计算机会无法识别,然后报错。
在终端里,你能看到的最常见的符号报错提示就是【syntaxError:invalid syntax】(语法错误:无效语法)。
看到这个报错提示时,你的第一反应就应该是:我的标点符号用对了吗?是英文输入法吗?然后再去检查自己语法有没有写对。
别小看了这个小小的标点符号,它可是许多人、甚至是专业程序员的绊脚石——花了一下午的时间找bug,最后发现只是一个符号出了问题。
所以,我们在debug(解决程序报错)的时候,需要下意识地找找自己是否犯了这样细小却致命的错误。
好啦,重要提示说完,我们来继续学习下一个知识点。
还记得吗?刚才,我们已经用print()函数打印出了千寻的卖身契。
但苛刻的汤婆婆觉得卖身契的排版还不够好看,希望你能让卖身契文字的每一个逗号后面都换行显示,打印出这样“自动换行”的效果。
花五秒钟想一想,用刚才学过的print()知识,能怎么实现“换行”的效果?
让我猜猜,你脑海中的解决方案是这样的吗?请直接点击运行看看效果(如果出现报错,请点击跳过本题。)
发现了吧,直接在括号内换行根本行不通,反而还让计算机报错了,在print()函数内部不能这样手动换行。
因为计算机是一行行地往下执行命令的,因此,想让它重复执行“换行”这个动作,你得在每一个需要换行的地方都给它一个新的指令才行,像这样:
但这个办法太麻烦了,如果你想要让一篇几百行的文章换行,每一句话前面都要加个print()得累死,我们学Python可不是为了给自己添麻烦的。
这就要介绍第二种换行的方法了:在print内部使用三引号'''(连续输入三个单引号)来实现自动换行。
嘿嘿,没想到吧,除了单引号和双引号之外,print()里面居然还能放三引号。直接运行下面这段代码,看这次能不能实现汤婆婆想要的效果。
成功了!你已经掌握了用三引号换行的办法。其实,还有第三种实现换行的办法:使用转义字符。
转义字符
转义字符是一种特殊的字符常量,在编程语言中,我们用转义字符表示不能直接显示的字符,比如换行键、后退键,回车键等。
其中,被用来“换行”的转义字符是\n。
我们可以在需要换行的地方后面都加上转义字符中的换行符号\n。因此,汤婆婆的卖身契还可以这样改:
用这个办法,一样可以达到汤婆婆想要的换行效果。这样一来,你不仅改好了契约,还用了三种方案实现这个操作,非常棒。
现在,该轮到你自己来打打代码了。请用刚才学到的转义字符\n把这首小诗按照下面的格式打印出来。
直接复制上面代码框中的文字,注意不要手动换行,用转义字符\n让小诗换行,不然系统会报错。
这首小诗节选自顾城的《生命幻想曲》,我很喜欢,也把它送给你,我们一起启航。
除了\n之外,转义字符还有很多,它们的特征就是反斜杠【\+想要实现的转义功能首字母】。
比如换行\n代表(\+newline);退格\b代表(\+backspace);回车\r代表(\+return)。大家可以按照这种方法记住转义字符的含义。
我把常用的一些转义字符做了个总结:
别担心,这张图上的内容你不需要背下来,先收藏图片,以后要使用转义字符时再看图查找就好。
除了排版文字之外,转义字符还能让计算机对符号进行区分。
有时候,我们在打印的过程中,可能会遇到符号重复的问题,尤其是在需要打印英文的时候。比如,下面这个例子:
这段代码会让计算机报错,因为Python是从左往右匹配单(双)引号的——当它读到一个引号时,会在心里嘀咕:呀,这是不需理解,原样打印的内容。当它再读到下一个引号时,想:好!要打印的内容结束了!
所以,在计算机眼里,上面的【'Let'】是要打印的内容,而后面的东西呢,它并不能读懂,于是产生一个报错。
我们来拆解一下这段错误代码:第一个和第三个单引号属于print()函数的结构,第二个单引号则是纯粹的符号。
要让计算机学会区分第二个单引号,我们需要用到转义字符\
这样一来,计算机在读到第二个单引号前的\时,就会恍然大悟:哦!原来这个单引号和第一个单引号不是一起的呀,那我就把它当做要打印的内容里的一部分吧!
其实,除了\,在前面我们已经介绍过一种让计算机能区分符号功能的方法了。
现在,你已经学会了使用基本的转义字符来更好地打印内容,在后面的学习里,你会在实践中掌握更多转义字符的用法。
与此同时,千寻也成为了汤婆婆的工人,渐渐地,她忘记了自己的名字,遗失了真正的自我。
为了让她能拿回自己的名字,不被汤婆婆永远留在鬼神的世界。你需要帮助千寻将她的名字“收纳”好,等她将名字取出的那一天。
为了完成“收纳”的行动,你需要借助【变量和赋值】的力量。
变量和赋值
我们先来看看下面这行代码:
这就是一个常见的“给变量赋值”的动作。在这里,name就是一个变量,这行代码的意思,就是把“千寻”这两个字【赋值】给了“name”这个【变量】。
这就好比,为了让千寻在日后能在计算机中更方便地找到她的名字,我们帮她把名字收纳进了一个小盒子里,并在这个盒子上贴了个叫“name”的标签。
可是,我们为什么要对信息进行“收纳”呢?
因为,每台计算机都要存储和操作成千上万的数据,这就等同于我们家里囤了成千上万的东西一般,不加以整理的话,根本找不到想要的东西在哪。
为了让家看上去更整洁,我们可以把不同的东西放进不同的盒子里,并且做好标记。这样家里不仅会整整齐齐的,也会更方便我们自己取用东西。
同理,计算机也是这么做的,它会把成千上万的数据放在不同的“盒子”里,这样才方便它存储和操作数据。
这个“盒子”在Python中被称为变量,你可以在这个“盒子”里放任何你想放的内容。
而这个往盒子里装东西的过程,在代码的魔法世界被称为【赋值】。
在千寻签完合约后,汤婆婆就把装她名字的“盒子”夺走了。她告诉千寻:你现在有了新名字,叫做小千。
于是,“千寻”这两个字对于她来说成为了一个陌生的字眼,她再也不记得原本的名字了。
这时,装千寻名字的“盒子”就被重新赋值变成了:
现在,请你运行下面这段代码,看一下打印函数的最终输出结果是什么。
你的结果是什么,是不是【小千】?可这又是为什么呢?我们对“name”这个变量第一次的赋值不是【'千寻'】吗?为什么打印的结果是第二次的赋值呢?
这就涉及到了变量的特点:变量之所以称为变量,是因为它保存的数据是可以随意变化的。
刚才我们讲,我们可以将变量当作一个盒子,你可以在这个盒子里放任何内容,但盒子都有它的最大容量,不能无限制地塞东西。
偏偏在代码世界里,盒子的容量又特别小,仅为1。所以当你放进新的东西时,旧的东西就会被替代掉。
在我们上面的案例中,第一行代码:【name='千寻'】表达的意思是:把千寻这个名字放到name这个变量“盒子”中。
由于,计算机是一行行自上而下执行代码的,所以当运行到第二行代码【name='小千'】时,变量“name”里存储的【'千寻'】就被替换成了【'小千'】。
所以,当运行到第三行print(name)时,我们打印出的结果,就自然而然的是小千了。
就这样,汤婆婆拿走了千寻的名字,剥夺了她的自我。其实,不仅是千寻,名字对于我们每个人来讲都具有非同寻常的意义,它从出生起就跟随我们,帮我们形成独立的个体。
而给变量取名字也是如此,我们要注意变量的命名规范,才能让我们在纷繁复杂的代码世界,更为方便地使用它。
变量的命名规范
所以,在变量与赋值中,你要注意的第一个规则就是:你需要学会给变量取一个合适的、标准的名字。
对于变量的命名,我们可以遵循以下规范:
比如说,如果信息是姓名,那么变量可以命名为name;如果信息是数字,那么变量名则应该叫做number。
第二点要注意的规则是:在代码世界中,赋值符号=不是左边等于右边的意思。仅仅表示赋值动作:把右边的内容放到了左边的盒子中。
代表左右两边相等的符号,是比较运算符==,虽然他俩长得像,但代表的却是完全不同的意思,可千万不要搞混了。
下面,让我们跟着变量和赋值的用法,回到千寻的故事中,帮千寻逃脱汤婆婆的魔掌。
时间不断流逝,千寻意识到,自己不能甘于机械地打工,必须要回到人类世界了!于是,她去找汤婆婆对峙,希望汤婆婆把名字还给她。
汤婆婆心想:反正她肯定记不得自己的名字了,我就随便写几个让她选吧,选对了就放她走。于是,汤婆婆在纸上写下了这几个名字:
确实,时间早已冲淡了小千对于名字的记忆,她早就不记得自己叫什么了。但是善良、勇敢、坚强的小千赢得了汤婆婆的助手白龙的帮助。那么,白龙要怎么做才能让小千获得真正的名字呢?
需要你来助一臂之力的时候到了!请你运用学过的赋值知识点,将储存在我们盒子中的名字交给白龙。
请将上面三个名字用name依次赋值,并保证交给白龙的变量内,存放的是小千真正的名字。(提示:使用print()函数,变量的值总是等于最后一次赋给它的内容。)
怎么样,最后出现的名字是你所想的那个吗?我相信,你已经把小千真正的名字交给了白龙。
老师的答案是这样的:
就这样,小千在白龙,在你的帮助下,找到了你保存在变量箱中,她真正的名字——千寻。
现在,通过代码帮助千寻找到名字的你,是不是也有些许的成就感呢?
我们来总结一下这关的知识点:
到这里,或许你会问:我这关学的这几个简单的代码有什么用呢?
虽然print()函数是最简单的语句,但其实,你往后要做的任何一个程序几乎都离不开print()函数的支持。
例如说,你能用print()函数给自己创造一个可爱的好朋友“人工智障小埋”,她会蹦跶着到你面前,调皮地让你猜她的年龄。
直接运行下面代码,和小埋玩一下猜年龄的游戏吧!注意:在小埋问你她的年龄时,要记得在终端输入你猜的数字哦。
成功猜中小埋的年龄了吗?除了print()函数之外,这段代码里还用到了条件判断if语句、input()函数……
现在还不能完全看懂这段代码并不要紧,因为在学完基础语法的前半部分之后,你也能独立写一个这样的项目,设计你的专属“小埋”!
但起码,你已经能理解这段代码中关于print()函数和变量赋值的那部分啦!所以,不要小看了我们今天所学的知识,它将是我们未来大项目的开端。
在Python的道路上,我们不仅要学习代码知识,还要建立自己的编程思维,逐步掌握与计算机沟通的方式,真正地实现“人机合作”。
这一关的课程,正是我们通往人机合作的起点:在这一天里,我们掌握了命令思维——对计算机下“打印”的指令。
在与计算机沟通的道路上,我们的学习才刚刚开始。在接下来的几天的课程中,我会带着你继续学习与计算机沟通的正确方式,并且一步步地实现与计算机深入地交互。
下面,是你在体验课(0-3关)中将会走过的学习路径。
在第1关中,我们会更系统地学习与计算机沟通的正确语言,掌握几种基本的数据类型和数据转化的知识。
在第2关,我们将学习与计算机沟通的初级逻辑——条件判断语句,知道如何一步步地让计算机准确执行我们的命令。在和你的沟通下,计算机变聪明起来了。
在第3关中,我们与计算机的沟通将上升到一个新的高度——用input()函数与计算机进行互动沟通。这时,我们将不再自说自话,而是实现与计算机的互动沟通。
相信学完这四天的内容,你将会真正迈入Python的大门,掌握利用Python解决问题的方法和思维。这也是在Python的具体知识之外,我更希望你通过课程获得的,宝贵的财富。
在下一关,我同样为你准备了许多有意思的内容。能和你一起学习实在太棒了,而我,也从未如此强烈地期待着与你的再次相遇,我们下一关见!