第3关霍格沃茨的来信
经过了三关的学习,你对Python的理解是不是又近了一步?可是问题来了,我们为什么要进入这个陌生的世界,学习从未接触过的Python呢?
其实,我们生活在一个敏感的时代,所以为了成功,我们必须进化。这就需要我们时不时地展露出自己不为人知的一面,这样我们才能以新的角度,看到彼此。
而Python就是一个展露自我的最好契机,它是一面镜子,你可以从代码上看到最真实的自己。
有的人直率,ta的代码逻辑也一通到底;有的人心思缜密,ta的代码则布满了嵌套;甚至你的懒也可以成为Python逻辑中的一个亮点:能一行代码搞定的,绝不写两行。
所以我们不仅要掌握Python的码法,还要掌握Python的底层逻辑,利用正确的语言和合理的逻辑构造命令,最后再对计算机输入自己的命令。
这样我们才能以最真实的自己,得到计算机的回应;才能突破认知局限,从代码这面镜子中看到真我。
而这个传递信息的输入动作,就是我们今天的重点——input()函数,它将会完成你与Python的第一次互动沟通,产生不可思议的Python魔法。
那么,还等什么?让我们赶紧开启魔法之旅吧!
input()函数
你有没有发觉,生活中总会有奇怪的事情发生在自己身上:每次逃课都会遇上老师点名;超市结账不管怎么换,永远自己那排最慢;不带伞就下雨一带伞就晴天?
你是不是以为,那只是单纯的脸黑非酋运气差体质?Nonono……你看!远处是不是飞来一只猫头鹰?
就在你诧异得不知做何是好时,猫头鹰降落在你的桌子上,低下头放下了嘴里一直叼着的纸卷。
然后,你踯躅着伸出手,展开了泛着黄的羊皮纸。即刻,便被上面工整、嶙峋的手写体攫住了视线。
而下面,就是你选择的时候了。请点击下方代码块左方的运行按钮,在右方终端区域,先输入你的所选的数字,再按回车键。
看到没,这就是你利用input()函数,与计算机进行的第一次互动式沟通。
你还记得,之前我们学习过的print()函数吗?下面,我们来温习一下旧的内容。
对了,答案是A,(o゜▽゜)o☆[BINGO!],print()函数是人给程序下达一个打印命令,程序想都不想,一比一地打印出结果,这种程序向屏幕输出信息的过程,就是人与计算机的单向沟通。
但是,如果想实现真正的人机互动沟通,就要有来有往。比如,校长问你要不要来霍格沃茨学魔法,那她就要给程序输入一个提问命令:你要来霍格沃茨吗?
程序得令后,立马把校长的提问一字不改地显示在计算机屏幕上,问:你要来霍格沃茨吗?
那么,这个人类用键盘向电脑提供指令,然后通过电脑把问题显示在显示器上,等人回答的过程,就是通过input()函数实现的。
那在代码的魔法世界,input()函数是如何实现自身价值的呢?这关,老师会从四个角度逐个击破input()函数。
input()函数的使用
首先,让我们通过一段代码,来看一看input()函数是如何使用的:
input()函数是输入函数。就上面例子来讲,它需要你输入针对括号内'请铲屎官输入你宠物的名字:'的答案。
所以,当你在函数的括号内写出问题时,input()函数会将此问题原样显示在屏幕上,并在终端区域等待你针对此问题的回答。
可是,我们为什么要在终端处输入回答呢?不输入行不行?
事实上,我们可以把input()函数当作一扇链接现实世界与代码世界的门。
当问题从代码世界传递给我们,可我们却没有回答时,这扇等待输入的input()大门,就会一直处于敞开状态,一直等着你往里送回答。
而当我们输入信息后,这扇input()大门便会关上,继续执行下面的命令。
答对啦!看来你有好好学习啊,摸摸头。下面请看我从上面复制粘贴下来的解答:input()函数是输入函数,当你在函数的括号内写出问题时,input()函数会将此问题原样显示在屏幕上,并在终端区域等待你针对此问题的回答。
下面,我们来总结一下input()函数的使用方法:
下面,我们来亲自感受一下input()函数的魔法:1.请将代码串input('请铲屎官输入宠物的名字:')写在下面代码框中;2.点击运行后,在右侧终端处输入自己的答案;3.输入答案后要按回车键(如显示运行通过,就请继续课程)。
怎么样?输入答案按回车键后,是不是除了自己输入的信息,其他什么都没有?但是程序又没有报错,所以,代码似乎跑通了?可这是为什么呢?
我们反复强调代码是一行行运行的,所以即使input()函数通过了,门关上了,由于input()函数下没有其他命令,自然就不会有结果产生。
但是,我们输入的回答并没有丢失,它被被计算机储存在了程序中。
那么,如果我想要从程序海洋中找到刚刚输入的回答,利用它产生一个结果,比如表达我对主子的爱要怎么办?
咱先别急着码代码,按老规矩我们先梳理一下思维逻辑。首先,为了表达我对宠物的爱意,我得先知道宠物的名字,所以我得先搜集宠物名字的信息。
那么,我们思维的第一步,就是使用input()函数搜集信息:
然而,当我想将搜集到的数据和【'I Love'】拼接起来,并打印出结果时,问题来了。虽然我用input()函数搜集到了一个信息,可我如何从程序海洋中调出这个信息,进行数据拼接呢?
这就涉及到了input()函数的第二个知识点——函数结果的赋值。
input()函数结果的赋值
还记得在第0关千寻的故事里,我们学习的变量赋值知识点吗?
首先,我们可以对变量进行赋值,这样当我们想提取数据时,只要直接打印变量名,就能唤醒程序对数据的记忆。
这个赋值逻辑,在input()函数中也是行得通的。我们可以通过赋值,达到随时提取输入结果的目的。但是在逻辑层面,我们需要拐一个弯。
比如,以我们下面这串代码为例:
虽然看上去像是给input()函数赋值,但实际上,我们是将input()函数的执行结果(收集的信息)赋值给变量name。
通俗来讲,我们放进name这个盒子里的东西,不是input()函数中提的问题,而是我们通过input()函数收集到的别人的答案。
这样,不管你在终端输入的内容是什么,不管你的回答改变多少次。只要是对input()函数所提问题的回答,都会被存储在变量中。等待你打印变量时,将回答提取出来,展示在显示屏上。
而这些展示在终端的信息/回答/数据,在代码世界,我们可以称其为输入值——我们输入给函数的内容。
拿我们上个铲屎官代码举例:
当点击运行后,我们在终端处输入的信息——宠物的名字摩卡,就是输入值。
所以,为了能随时且方便地提取输入值(输入的结果),我们需要把input()函数的结果赋给变量。
下面,我们来测试一下:
请你将input('请铲屎官输入宠物的名字:')的结果赋值给name,然后打印出变量name,看是否能出现你输入的回答。【要点提示:赋值,input()函数,print()函数】
运行结果如下:
当我们铺好了搜集信息的路,并对获取的信息进行了赋值,此时就可以进行最后一步,打印最终结果了。
下面,请你也来测试一下,秀一波操作:1.请求输入你喜欢的电影名:;2. 将结果赋值给变量movie;3. 打印结果movie+'是我最喜欢的电影!'【要点提示:赋值,input()函数,变量拼接,print()函数】
这里有一个重点,在我们理解代码时,脑中的思维顺序是先搜集信息,再把input()函数的结果赋给变量。
但是为了书写规范及防止漏掉信息,我们需要按照代码书写格式,优先对input()函数的结果进行赋值。
做个题目检测一下:
答对啦!首先,我们需要对input()函数的结果进行赋值,然后使用input()函数搜集信息,最后再用print()函数输出结果。
我们再用一张图,来直观地总结一下。
掌握了input()函数的综合使用场景,我们再来回看一下本关卡最开始,霍格沃茨来信的代码。
那么,这组代码是怎么写出来的呢?
从思维角度出发,简单来讲就是:我给你两个选择,你从中挑一个,然后我给你显示对应的结果。
所以,代码的第一步就是赋值,并通过input()函数提问。
第二步,我们要根据回答进行条件判断:如果回答是1,就显示条件1的结果;如果选了其他选项,则显示其他条件的结果。
代码是写完了,但问题也来了:为什么if条件下的变量choice是字符串'1'呢?如果不是字符串格式,是整数1会出现什么结果呢?
下面,请你抄写上段代码,并将if的条件从字符串格式的'1',改为整数格式的1。点击运行后,在终端处先后输入1和2并观察运行结果【提示:点击运行 → 输入1 → 点击重做 → 写代码 → 点击运行 → 输入2)】
怎么样?是不是不管你输入的是1还是2,显示的结果都是else条件下的结果:’您可是被梅林选中的孩子,我们不接受这个选择。‘?
这是为什么呢?我们输入的就是条件选项中的数字1和2啊?怎么就无法出现对应的结果呢?
在这里,我们就涉及到了input()函数的第三个知识点:
input()函数的数据类型
现在,让我们先从计算机语言的逻辑,按行拆解一下这段代码组:
那么,我们先来看看第一行代码中的赋值语句。
首先,我们从整体来看,这段代码表示的是——利用input()函数接收数据,并将数据赋值给变量choice。
其次,我们再细分着看,这行代码的每个部分代表着什么:
对于input()函数来说,不管我们输入的回答是什么,不管你输入的是整数1234,还是字符串我爱摩卡,input()函数的输入值(搜集到的回答),永远会被强制性地转换为字符串类型。(Python3固定规则)
跟“你大爷还是你大爷,你大妈已经不是你大妈”一个道理:我爱摩卡即使被强制转换,它还是字符串类型的我爱摩卡;但是我们输入的整数1234就会被强制地转换为字符串的'1234'。
所以,不管我们在终端区域输入什么,input()函数的输入值一定是字符串。
就这样,由于我们用赋值运算符=把input()函数的字符串结果,赋给了变量choice,所以这个变量也一定是字符串类型。
现在,我们确定了变量choice的数据类型是字符串。下面,我们再来看后面的代码。
我们先来看第一块代码组的if条件语句【if choice==1】并进行拆解:
根据第2关所学的条件判断知识,我们可以将第一行的if条件解释为:如果变量choice等于整数1时,则执行此if条件下的结果。
这回你是不是发现了什么问题?还记得我们在拆解input()函数时,提到的变量choice的数据类型吗?
在第一次变量赋值时,由于input()函数的输入值是字符串,所以变量choice也是字符串;但是到了if条件判断时,if的条件又是【choice == 1】—— 变量choice等于整数1。
这就相当于王X聪准备接手家族事业,但是王X聪他爸王X林开了个条件:当王X聪是猫时,才能把产业给他。
但因为王X聪是个人类,无法满足动物猫的条件,所以自然无法执行猫条件下,继承家业的结果。
就这样,因为我们输入的信息永远是字符串,永远不能满足if的整数条件。所以,不管你输入的是什么,程序只有一个选择:执行else下的结果。
那么,不管你的选择是什么,永远只能打印出else下'您可是被梅林选中的孩子,我们不接受这个选项。'这个结果。
下面,请你展示自己的魔法。请下段代码中if条件的错误语句,改为正确的等于字符串类型,写在下方代码框中,并点击运行。
现在,我们知道了通过修改if条件的数据类型,将代码跑通的方法。你,学会了吗?
那么,假设有下面这样一段代码:
答对啦!我们一行一行拆解,第一行代码的赋值语句,变量age为整数类型,第二行的变量choice为字符串类型,这两个变量由于类型不同,无法进行比较。
怎么样,你答对了吗?下面,我们来通过一张图再来加深一下,这个在未来非常有用,也非常重要的知识 点:
在我们刚刚那个例子中,只有两个选项。但是假设你有1、2、3、4……365个选项,先不说数据类型转换正确与否,就光打单引号这一个动作,手都可能给你打残废了。
那么,我们就需要一个更为省力的简便方法,将所有输入值的数据类型,一次性全部变为整数。
input()函数结果的强制转换
可是吴枫老师您刚不是告儿我,input()函数搜集到的信息固定是字符串嘛?还能变整数呢?
没错,input()函数的输入值在某些情况下,是可以变为整数的。那么,你还记得字符串转变为整数要怎么做吗?
答对了,int()是第1关的知识点强制类型转换,可以将字符串强制性地转换为整数。
有了int()函数,我们就可以从input()函数的源头,将输入的内容转换为整数。
但是,这串代码看起来像是把input()函数整个强制转换了。
可实际上,我们是将input()函数取得的结果,进行强制转换,并将强制转换的结果赋值存在名为choice的变量盒里。
这样,就算if条件是整数,程序也可以准确运行。
下面,请你接下我的接力棒。补齐下面的条件判断代码:如果选择1 ,打印“霍格沃茨欢迎您的到来”;其他时,打印“您可是被梅林选中的孩子,我们不接受这个选项”。【要点提示:if……else条件判断,变量赋值,等于整数】
那么,我们什么时候会用到,input()函数结果的强制转换呢?
思路很简单,当你想要的答案是数字时,比如年龄:
再比如需要输入的信息是时间,或者工资等数字时:
下面,请挥舞你隐形的翅膀,将上方月工资的代码,添加另一条件:【当工资大于5000,小于10000时】。打印结果:【我们都是搬砖族。。。】,并将添加条件后的整段代码写在下方区域。【要点提示:三个条件并存时,请使用if…elif…else…语句】
下面,请你来对比一下老师的答案:
最后,我们再来归纳一下input()函数数据类型强制转换的知识点:
那么,本关卡的重点,input()函数的所有知识点我们就介绍完了。最后,我们再来整理一下input()函数的重点内容。
input()函数知识点总结
现在,请你仔细回忆一下,到现在这个节点,我们是不是知道了input()函数的用法,并且将之前学到的变量、赋值、条件判断、强制类型转换,一起结合着input()函数又复习、利用了一遍?更完成了与计算机的交互沟通?
你说没感jio到?没关系,咱再复习一遍:
前四关综合复习
在第0关我们初识了Python世界最简单,也最常用的一个函数——print()函数。
你别看这个函数看起来简单,但是深挖下去,这个最简单的打印函数也内有乾坤,它包含着程序世界最基础的运算逻辑。
但是,如果想要达成和计算机互动沟通的目的,还需要掌握计算机的沟通语言。
只有当计算机明白我们说的是什么时,它才能给予我们正确的反馈。
与我们人类一样,计算机的运行也需要正规的逻辑,所以在第2关,我们掌握了如何与计算机沟通的逻辑。
拥有了语言和逻辑,我们就可以和计算机进行交互式沟通了。
然后,我们就来到了今天的关卡,学习了input()函数。
可是,学会了这些知识点,我们要如何才能自己写一段代码,比如霍格沃茨来信这样的代码呢?代码组的大致格式是什么呢?
回头看看,经历了这四关,你是不是发现,在不知不觉中学习了这么多东西?更接触到了一个全新的世界。
同时,你是不是也有所疑惑,学了这些我到底能做什么?我的Python方向在哪里?我学Python的意义又在哪里?
展望未来
现在,从对程序世界的一知半解,到能自由写出整段代码的你,有没有些许成就感呢?同时,你是不是也有些许的困惑——我为什么要学习Python呢?
因为听说Python工资很高,所以想学?因为听说Python现在很火,所以想学?因为听说Python可以做人工智能,人工智能是未来发展的方向,所以想学?因为听人说Python能提高工作效率,所以想学?因为身边的朋友(老师、公司)让我学,所以就学了?
可是,当你真正踏上Python的台阶后,越学似乎疑问越多:
然后,你开始在门口踯躅,反复琢磨Python到底值不值得自己继续下去。再然后,莫名地,你心里突然冒出一个声音——算了,我放弃算了。
我放弃算了:反正我又不知道Python到底能干嘛;反正离了Python又不是不能工作;反正我又不知道Python能为我带来什么价值……所以,我放弃算了。
可是,你有没有想过:如果你现在放弃了,你和我的探险就结束了?
现在,你正站在Python之旅的起点,初探着未知的人工智能世界。在短短四关的时间内,你不仅知道了人工智能的本质、应用、起源。
还通过print()函数、嵌套条件、input()函数,你知道了如何用函数讲述千寻的故事、完成萌新到大佬的进化,用代码撰写复仇者联盟的剧情、链接哈利·波特的魔法世界。
这是属于你的起点,属于你一个人、独一无二的起点。但是,对于你,对于Python,对于人工智能而言,这也只是起点,绝不是终点。
通过体验课的你,已经登上了Python基础语法的台阶。在未来,你会踏上专业课的台阶,学会更为进阶的Python基础知识——专业课。
在基础语法的专业课关卡,你会学习新的数据类型(布尔值、列表和字典);会体验控制流的循环乐趣(for循环、while循环);会学习封装函数(def 函数),提高代码的重复利用率,让你的代码组更为简洁、整齐、美观。
你会借助计算机的“新华字典”,解密计算机的底层编程语言(编码);会脱离鼠标的掌控,用键盘打出的两行代码提升工作效率(文件读写);学习让你的代码“更好、更快、更强”地面向对象编程(类与对象)。
甚至于,当你拿到字符串txt源文件后,你也会通过调用模块(time模块),用代码跳一曲字符串MV,成为B站大佬。
就连bug(报错)也不会让你那么痛不欲生。在异常处理关卡,你会将找bug变为一种乐趣,学会debug(解决报错)的方法。
至此,你不仅能读懂网上的代码,自己也能熟练地写出大段代码组,编出文字PK小游戏。在代码的世界成为勇士,开启勇者斗恶龙的征程。
就这样,你登上了基础语法的另一个新台阶——将知识落地,用知识创造产品。
在这个阶段,我将授之以渔,教给你自主地向前学习和探索的能力。让你懂得如何根据项目的需求,去寻找、去学习新的模块并应用。
之后,我们将利用之前所学的所有知识,研发一个新产品。我会手把手地带你走完开发的全程——从需求分析到流程拆解,再到代码实现,你能看到完整的思考过程,以及当我们遇到难点时,如何找寻解决方案,突破困境。
至此,你会通关基础语法的所有关卡。当你站在这个分岔口回首过去时,你会发现你不仅可以用Python收发邮件,替代简易重复劳动,还能写出人机对话小游戏,更能写出一个完整的产品。
但是我们能利用Python的基础语法作出的有趣事情,并不是单单以上这些。在这个充满着妙趣横生代码的Python魔法世界,我们还能学习什么?还能作出什么呢?
如果你的目的只是想了解Python的基础语法,或者抱着娱乐心理的话。那么,学完22关的课程后,你最初的目的已经达成了。但是,我希望Python的后续课程,依旧能为你的生活、学习、工作提供有力的帮助。
如果你想实现更为伟大的目标,实现你的梦想——我想当程序员、我想当分析员、我想当人工智能工程师、我想……
那么Python的基础语法课程并不是你的终点,它将会是你实现梦想的起点。
那么,学了Python基础语言,风变编程还为你准备了两个板块供你学习。爬虫入门与数据分析。
在爬虫入门课的辅助下,庞大的网络信息世界不再是一片一望无际、深不见底的海洋,你可以利用爬虫技术,随意抓取你需要的信息,实现“大海捞针”。
你可以通过学习在爬虫领域占据半壁江山的requests模块,人肉网络内的任意数据;也可以让爱豆在微博上对你表达爱意(html基础)。
甚至于,让选择恐惧症每天头疼的“今天中午吃什么?”问题,当我们学会调用JSON模块后,也会变成“小菜一碟”。
你会凭借Python宝剑,在代码的魔法世界穿行,写出真正的人工智能代码,实现初级人机智能对话,让计算机成为你的私人助理。让爬虫帮你省去误点广告的麻烦,一键下载任意电影(BeautifulSoup模块 )。
你可以建立自己的爬虫大军,同时让多个爬虫为你抓取海量信息。使用爬虫界的大卡车——Scrapy框架提取网站结构化数据,更为方便地爬取指定内容及图片。
在数据科学版块,老师还会系统性地教给你网络爬虫、数据库应用、数据分析等进阶Python知识。
我会从数据科学的重点工具包入手,把你带入数据科学家所需要的计算环境,学会高效存储、操作、分析大型数据的方法。
这部分会非常适合有编程背景,并打算将开源Python工具用作分析、操作、可视化以及学习数据的数据科学类研究人员。
探秘Python的魔法世界,不管你去向何方,目标如何,都要经历基础语法的锤炼,这样你才能走向更高级的台阶,达成你的目标,实现你的梦想。
但是,如果你不知道目标在哪里,请阅读手机端的《人工智能认知课》。在手机端的课程里,我会帮助你建立完整的Python学习目标,让你更有方向地走下去,并帮助你成长、进化。
可是,你有没有觉得,冥冥之中似乎所有的一切,都在将我带到你的身边?
有没有觉得,我们一同创造的这四个关卡的回忆,变成了我与你的独特链接?
而现在,我还不想切断这份链接,这份羁绊。
就像风变编程这样的存在。它将屏幕前的你我链接,拉近你我的距离。
现在,我想把我最重要的东西——Python的知识海洋教给你。我希望你能同我一样,将自己与世界相连,让自己成为不可或缺的一分子。
但是,在雄关漫道、搏击风浪时,一个人的力量是不够的,你是需要同伴的。
就像风变编程这样。对我们来说,它不只是一个项目。实际上,我们是在用代码,将各个团队紧密相连。一同为梦想努力,一同开启编程世界的另一番新天地。
而很多时候,虽然共同经历了所有的一切,有多少人到最后,却只剩一个人走下去。但,幸运如我,却能始终围绕着这样一群人:
我感激大家每一步的陪伴,也希望我和我的团队能继续陪伴着你,用我们的梦想为你的梦想助力。
所以,请让我成为你的同伴。
如果你打算与我一同走下去,我也希望你知道:在成功的路上,没有任何捷径和技巧,唯一能够到达终点的秘诀就是——永不放弃,笔直向前。
我更希望你明白:不管你的目标是什么,请你只要相信自己所选择的路,大步向前就好了,其它的就请交给我。因为我的责任,就是在你全力奔跑时守护你,守护你的梦想!
因为只要有你在,我就无所不能!
学习都是孤独的,但是幸好,你有我的守护。
以上,就是体验课的全部内容了,但我希望这不是终点,而是你梦想的新起点。也请继续让我担任你的筑梦人,我们明天见!
再做一个练习:
以上是支线一剧情。
以上是支线二剧情。
以上是支线三剧情。
以上是支线四剧情。
四个分支剧情完美运行通过,给自己献朵花。
结语:
到今天为止,Python小课的四节体验课结束了,对自己的学习效果还是挺满意的,这几天掌握了最基本的编程思想和逻辑思维,可以说初入人工智能的门庭,为自己的努力加一下油!