Python小课体验课之二:萌新的进化

        第1关:萌新的进化


        大家好,我是吴枫,很高兴又和你见面了。请将屏幕调整成全屏,与我沉浸在Python的魔法世界。【windows系统:请按F11(或Fn+F11);mac系统:请同时按control+command+F。】

        在上一关,我们通过最基本的print()函数,帮助千寻找回了自己的名字。同样的,也是借由print()函数,我们知道了与计算机单向沟通的方法。


        但是,与世界上所有的沟通法则一样,沟通需要语言的支持。这点,就连计算机也不例外。

        比方说,你跟Siri说:来,给我来段beatbox!Siri二话儿不说,立马就给你biu出一段儿噗噗噗。

        但是,如果你跟Siri说:Quptenkos Ēngoso ȳdrassis?

        所以,如果想要实现真正的人工智能,前提就是突破语言的障碍,让人类说出计算机能懂的话,这样,计算机才能帮我们将命令实现。

        而这,也是我们今天要讲的主要内容:掌握【沟通的语言】,完成萌新的进化。


        那么,计算机的语言是什么呢?这要从计算机的本质说起:

        简单来讲,计算机的本质就是一个做计算的机器,它的主要任务就是处理各种数据,而这些数据的类型,就是计算机的语言类型。

     数据类型



        在Python的魔法世界,最常用的数据类型有三种——字符串(str)、整数(int)和浮点数(float),他们三者分别具有不同的属性:

     字符串

        首先,我们要讲的就是代码届的“坦克”——字符串:


       字符串英文string,简写str。作为Python届的坦克,此数据类型组团必备随处可见,皮糙肉厚战斗力爆表。作为最常用的数据类型,字符串的识别方式非常简单——有层名为【引号】的皮。

        只要是被【单/双/三引号】这层皮括起来的内容,不论那个内容是中文、英文、数字甚至火星文。只要是被括起来的,就表示是字符串类型。

        比如,在昨天我们就见过的:


        在这组代码里,【'千寻'】、【"Let's play"】 和最后的契约都属于字符串类型。

        下面,请你先观察代码,然后点击运行按钮,跟我一起体验一下字符串的应用:


        运行结果如下:


        怎么样,字符串的使用是不是很简单?

       下面,吴老师喊你来双杀喽~请你也来试一试,输出下面代码框中的内容,具体文本可直接复制粘贴。【要点提示:1.文本用引号括住,创建字符串;2.将字符串赋值给变量;3. 使用4个print()函数,分别打印4个变量】。


        运行结果如下:


        怎么样,你做对了吗?

        关于字符串,大家一定要记得:字符串类型必须有引号的辅助。不然你这坦克,就只能被报错按在地上摩擦摩擦,躺遍召唤峡谷的每个角落。

        下面,我们来小结一下字符串的知识点。


        可是有的时候,某些数据它脱了引号的马甲,也照样能打印出来。例如在上一关我们见过的【print(2)】

        而这,就是我们要介绍的,常见数据类型中的第二种:代码届的刺客——整数。

     整数


        整数英文为integer,简写做int。代码世界的整数,和我们数学课本中定义的一样:是正整数、负整数和零的统称,是没有小数点的数字。

        比如在下面的代码框中,赋值语句中的数字都是整数:


        现在,我们再趁热打铁一下,请问以下三个数据【'hello panda'】、【108】、【'108'】中哪个是字符串,哪个是整数?

        现在思考10秒钟-------


        答对了!由单引号括起来的【'hello panda'】和【'108'】是字符串,无引号的【108】是整数。

        可我为什么说整数是代码届的刺客呢?其实,就本质来讲,整数和刺客一样,是一个灵活多变、可攻可受的脆皮英雄。

        首先,整数可以不穿名为引号的马甲,直接跟print()函数组团搞输出,比如下列代码:


        但是由于没有引号这层皮的保护,整数只能单独“行动”。一旦碰上其他文字类数据,譬如中文、英文。整数这个脆皮刺客,立马被报错秒杀。



        其次,整数的“灵活多变”又体现在它的用处上,它不仅可以脱离引号被直接打印,还可以和运算符号结合,进行数学计算。

        下面,就请你来点击运行按钮,跑一下这些代码。


        代码的运行结果如下:


        看,怎么样?代码届的刺客——【整数】的直接“输出”,以及计算功能是不是很强大?

        不过说到计算,肯定要使用运算符了。Python世界的算数运算符,和我们平时在纸上写的运算符号有相同点,也有不同点。

        首先,我们来看看不同的部分——样式:Python的运算符在写法上,与我们平时使用的运算符稍微有点区别。


        不过,对于这么多的算术运算符,老师建议你先看一遍,有个大致的印象就行。你可以先把这张图保存上,等用的时候再找出来,对应着查阅就可以。

        那么,说了不一样的,咱们再说说一样的——运算优先级:Python世界的运算优先级,和我们平时的计算优先级是一样的。


        比方说刚刚那串代码【print((5025-525)/100+18*17)】,他的运算顺序是从左到右:最先计算括号里的【5025-525】。

        然后将【5025-525】的结果除以100,第三步则计算【18*17】,最后将除法和乘法的结果相加。


        先思考一下,再看答案:

        答对了。答案是:A

        按照运算优先级口诀,从左到右先算括号里的,括号外的则乘除先于加减。

        掌握了方法,下一步就是实操“刺客”——整数的计算功能了。请你根据以下代码框中的题目,写出运算公式并计算出结果。【要点提示:运算符,运算优先级,print()函数】


        你做出来了吗,我的代码和运行结果是这样的:


        看一下老师的答案吧:


        下面,我们来总结一下整数这部分的知识点:


        到现在为止,我们已经知道了字符串和整数,这两种数据类型长啥样。可是,我们刚刚计算铭文攻击时产生的结果【3.2】,跟上面那两种类型长得都不一样,那【3.2】又叫啥呢?

        它就是我们常见三种数据类型中的最后一种:代码届自带眩晕技能的法师——浮点数。

     浮点数


        整数是不带小数点的数字,那么相对的,带小数点的数字,就是浮点数。非常好识别,比如下列代码中的数字都是浮点数。


        浮点数的英文名是float,与整数(int)和字符串(str)不同,浮点数没有简写。

        那我为什么说浮点数能让你眩晕呢?虽然浮点数识别起来非常简单,但是其运算却晦涩难懂、让人头秃。

        正如世界级C++大佬Herb Sutter说的:“世上的人可以分为3类:一种是知道自己不懂浮点运算的;一种是以为自己懂浮点运算的;最后一种是极少的专家级人物,他们想知道自己是否有可能,最终完全理解浮点运算。”

        所以,浮点运算没有你想的那么简单。那么现在,请大家跟我通过一道题,来感受一下浮点数的“眩晕技能”:

        请你先心算一道题【0.55+0.3】,结果是不是【0.85】?下面我们让Python算一下,请直接点击运行按钮,并阅读答案:


       看到没,程序算出来的结果,是不是多了很多0,在末尾还有一个1?那这一长串“尾巴”是怎么出来的?

        这是因为,Python计算浮点数的方式与我们不一样。Python计算浮点数时,会先把0.55和0.3转化成二进制数【注:二进制数由0和1表示,逢二进一】,如下列代码:


        然后,这俩二进制数通过二进制法则运算后,再通过复杂的计算公式,将二进制结果转成十进制小数。

        经过这两次转换,小数点后面就产生了多余的“尾巴”。这样,就造成了我们与程序计算结果的差异。

        不过对于浮点数,你也不用太担心,因为在前期我们很少会涉及浮点数运算。而在后期,随着学习的深入,你会接触到更多的相关知识,辅助你对浮点数的进一步理解。

        然后,我们来看一下浮点数这部分的主要知识:


        以上,就是我们最常接触的三种数据类型:坦克字符串、刺客整数、法师浮点数的全部内容了。


        你学得怎么样?来测试下?


        先思考一下,对了,答案是D

        恭喜大佬答对了!一眼看上去它们三个好像是同样的东西,但它们属于完全不同的数据类型。42是整数,由单引号扩起来的'42'是字符串,有小数点的42.0是浮点数。

        现在,你已经掌握了字符串、整数、浮点数的使用了,下面我们来学以致用一下。

        比方说,我有以下几个变量,然后想输出这样一句话:亚瑟团灭敌方获得ACE称号。你要怎么做呢?


        这就涉及到了我们下一个知识点——数据拼接。

     数据拼接



        数据拼接的方法可简单了,就是利用数据拼接符号【+】,将需要拼接的变量连在一起就行了。

        比如,上面的例子,我可以这么写:


       有了拼接符号,我不仅可以输出亚瑟团灭敌方获得ACE称号,还可以调整变量的拼接顺序,输出不同的内容。

       下面我们就来试一下,请你补全下列代码,同时打印出两个结果:【结果1】亚瑟秒掉李白获得First Blood;【结果2】李白秒掉亚瑟获得First Blood。【要点提示:print()函数,拼接符号+,无需标点符号,输出结果需与要求一模一样】。


        学会了数据拼接,就能让我们的数据整合更为灵活,组合出任意我们想要的内容。

        而这,就是我们数据拼接部分的要点:


        但是现在,你已经不是代码届的小萌新了,是随时可以自己放烟花的入门人士了。怎么可以止步“一血”呢,我们要增加输出内容,拿五杀!

        那么,为了输出结果【亚瑟秒杀5敌方获得Penta Kill】,我们是不是可以把代码写成这样?请直接点击运行按钮,如有报错请点击按钮【跳过本题】:


        梦想是美好的,但现实是残酷的,我们立马被报错【TypeError:can only concatenate str (not "int") to str】(类型错误:只能将字符串与字符串拼接)

        按在地上摩擦摩擦。


        虽然通过报错提示,我知道了错误来源于print()函数内,数据类型的拼接错误。但是到底是哪个数据类型不对呢?我们要怎么查看数据类型呢?

        拿刚刚那段报错代码来说,由于变量是由我们定义的,所以我们可以用人眼查找错误源。

        但是在未来,当我们学会了更为复杂的命令,可以用代码对其他人提问,收集其他人的答案时。我们无法确定他们回复你的内容,是用什么数据类型写的。

        所以,我们要学会善用Python的魔法,使用Python中一个已有的,既简单又实用的函数,来帮助我们查询不确定数据的类型。而这个函数,就是type()函数。

     type()函数

        那么,这个type()函数要怎么使用呢?答案就是:只需把查询的内容放在括号里就行。


        只要你把内容写在括号里,type()函数就会立即将它的类型查询出来。下面,请你用刚才的代码来试一下。请直接点击运行按钮,只要运行通过就请继续课程。


        哎?怎么什么都没出现呢?刚刚不是说过,只要按照type(需要查询的数据)这个格式写对了,就能出现数据的类型吗?

        其实,什么都没有就对了。对于Python来说,你只是下了一个命令——给我查询类型哟~然后Python就老老实实地查询了类型,再然后……就没有了。

        在你的命令里,并没有告诉Python:“你查到以后,记得告诉我这个类型的结果啊~”所以,异常老实的Python就把查询到的数据类型……存起来了,没告诉你。


        下面,请你再实操一下,补全代码,运用print()函数,将查询函数的结果打印出来。例如:print(type(hero))


        终端里出现的结果,是不是除了4个<class 'str'>,还有1个<class 'int'>?


        在type()函数的帮助下,我们知道了:原来字符串里面出了一个“奸细”整数。难怪当时在终端区会给我报错说:数据类型不同呢。

        可是为什么不同类型的数据不能拼接在一起呢?一句话:圈子不同不相融。

        我打个比方,这就类似我饭阿森纳,你饭热刺。虽说咱俩都是足球粉丝,但喜欢的球队却是死对头,所以根本没办法交朋友,没法把咱俩放在一起。

        但是,在某些时候,咱俩总得有低头不见抬头见,在一个球场看球的时候。那么这时候要怎么办呢?要如何把两个不同类型的数据拼在一起呢?

        这就涉及到了我们这关最后一个知识点:数据转换。

     数据转换


        负责转换数据类型的函数一共有3种:str()、 int()和float()。

        下面,我们先来学习一下,能帮我们解决刚才的代码Bug,拿到五杀的str()函数。

     str()函数


        str()函数能将数据转换成其字符串类型,不管这个数据是中文、数字、标点还是火星文,只要放到括号里。这个数据就能摇身一变,成为字符串类型。

        下面,请你看看老师是如何运用str()函数解决报错,完成数据拼接的。请先观察下方代码的书写,然后点击运行按钮。


        下面请你也来试一下:补全下方代码,成功打印出结果我一个电话立马有10000只山兔在你家楼下hola hola。【要点提示:str()函数,数据拼接,print()函数】

        老师的答案是这样的:


        整数转换字符串类型的方法是不是很方便?那如果我告诉你,还有一种转换成字符串的方法,而且这种方法你已经学会了呢?

        那就是借用引号的帮助,比方说我一个电话立马有10000只山兔在你家楼下hola hola这个结果,我也可以写成下面这样:


        下面,请你来实际运行一下,看能否出现两个一样的内容:

        你看,我们是不是用两种不同的写法:str()函数和引号,输出了同一种结果?

        可是,为什么引号内我们使用的是数字,而不是变量名number呢?这是因为,当我们使用引号时,引号里的东西,都会被强制转换为字符串格式。

        所以,如果我们把变量名number放进引号里后,被强制转换为字符串的,将是变量名number,而不是变量名代表的数字10000。

        可能有人会在心里吐槽:既然引号用着这么麻烦,那我直接用str()呗~你看这多省事。

        其实,我并不是单单地在教你编程方法,而是想传达给你一种编程思维——条条大路通罗马。

        代码的世界千变万化,同一个结果可能有千百万种答案,如果我们只心安理得地,局限在一种思维模式下。那这个思维定势一定会阻挡你的进步,阻止你成为真·大佬。

        所以,我希望你能尽情创新,尝试不同的选择,就像老祖宗说的:胆大心细,绝对没错。

        好了,题外话到此为止。现在我们来实操一下,锻炼一下编程思维。请补齐下方代码,并用两种方法打印出结果:我一个电话立马有500个吴亦凡在你家楼下skr skr。

        我自己的答案是这样的:


        怎么样,关于str()函数的内容你学会了吗?我们来做道题验证一下。


        答对了!'老铁来个双击'和'呗?'为字符串类型,无法与整数类型666拼接。

        下面,我们来小结一下str()函数部分的知识点。


        既然整数类型能转换为字符串,那字符串类型能转换为整数吗?

        那必须的。

     int()函数  


        将数据转换为整数类型的方法也很简单,就是int()函数。其使用方法同str()一样,将你需要转换的内容放在括号里就行,像这样:int(转换的内容)。

        下面我们来试验一下,请补全代码,计算出bug和hair这两个变量的和。【要点提示:1. int()函数转换数据类型;2. 运算符+计算;3. print()函数】

        老师的答案是这样的:

        不过对于int()函数的使用,大家要注意一点:只有符合整数规范的字符串类数据,才能被int()强制转换。

        别看它虽然只有一句话,但它其实带有三层含义:首先,整数形式的字符串比如'666'和'0',可以被int()函数强制转换。

        其次,文字形式,比如中文、火星文或者标点符号,不可以被int()函数强制转换。

        最后,小数形式的字符串,由于Python的语法规则,也不能使用int()函数强制转换。

        比方说下列代码,如果点击运行,程序会报错【ValueError:invalid literal for int() with base 10: '3.8'


        这是不是意味着,浮点数不能转换成整数类型了?

        不,虽然浮点形式的字符串,不能使用int()函数。但浮点数是可以被int()函数强制转换的。

        下面,请你先观察下方代码框中的代码,然后点击运行按钮。


        上方的代码串,就是一条将浮点数3.8强制转换的语句。但是,为什么输出的结果是3呢?

        你看,int()函数的本质是将数据转换为整数。所以对于浮点数,int()函数会做取整处理。但是,同我们平时对小数四舍五入的处理方法不同,int()函数会直接抹零,直接输出整数部分。

        现在,对于int()函数你是不是了解得很透彻了呢?我们来做道题检验一下吧。


        恭喜你C位出道!'C位出道'为文字类数据,无法转换为整数类型。

        最后,我们来小结一下int()函数的知识点。


        可是,如果遇到这种情况:字符串就是小数形式,比如'3.8'这种。我不想让它变为整数3,想让它保持小数形式的3.8,那我要怎么做呢?

        这就涉及到了我们这关,最后一个知识点——float()函数。

     float()函数


        首先float()函数的使用,也是将需要转换的数据放在括号里,像这样:float(数据)。

        其次,float()函数也可以将整数和字符串转换为浮点类型。但同时,如果括号里面的数据是字符串类型,那这个数据一定得是数字形式。

        那么,经过之前str()和int()操练,float()函数是不是好懂了一些?

        下面,我们来打段代码练练手。请补齐代码,将下列变量,转换为浮点类型,并打印出结果。【要点提示:print(float(数据))】


        答案是这样子的,是不是和你的一样呢?

        到现在为止,你已经知道了转换数据类型的方法了,最后我们再通过一张图总结一下这三种方法。


        下面,我们来解决刚进入float()函数部分时,我们的问题:字符串就是小数形式,比如'3.8',我如何将这个字符串,直接转换为浮点类型呢?

        比方说我想使用以下变量,输出这样一个结果人工智障说:3.8+1等于4。


        其中,输出结果中的4,是由字符串型变量【word = '3.8'】,加上整数型变量【number = 1】得出来的。

        那么,我先将字符串转换为整数,计算后再与其他数据拼接?可我这第一步int(word)就被报错卡住了,那要怎么办呢?

        不如,你先来看看我是怎么写的。【请不要更改代码,直接点击运行】


        额……猛的一看这串代码真是转换套转换……真是好嗨哟~是不是感觉代码人生到达了巅峰~

        先别急,让我们来一层一层拆解、分析一下。首先,我们先看float(word)这部分。


        为了与整数【number = 1】进行计算,我们需要将字符串形式的【word = '3.8'】变为能做计算的数据类型。

        经过我们上面的学习,我们知道,能做计算的类型有两种:整数型和浮点型。

        那么,既然无法用int()函数转换。那我们可以不可以用float()函数,将字符串型变量【word = '3.8'】,转换为同样可以做数学运算的浮点型呢?要不,咱试下?

        请在下方代码框中,用print()函数输出float(word)的结果,输出格式:print(float(变量))。


        怎么样,是不是没报错?下面请看一下老师的答案:


        经过转化后,我们的【word = '3.8'】已经成功脱去引号,成为了浮点型,可以做数学运算了。

        下面,请你补齐下方代码,将成为浮点型的变量word与【number = 1】相加,并输出结果。【要点提示:运算符+,浮点类型可直接加减】

        你的答案是不是也和老师一样呢?


        但是,为了得到4这个结果,我们需要将计算结果4.8,抹去小数部分取个整。

       下面,请你继续续补全代码。运用int()函数将上一步的计算结果转换,得出结果4。【要点提示:int()函数取整,print()函数,格式:print(int(需转化数据))】。


        好了,现在你是不是觉得,终于可以进行拼接,得出结果人工智障说:3.8+1等于4了?

        还不行,因为到现在为止,我们所有的数据都是整数类型,而数据拼接需要字符串的支持。

        所以,我们还要把刚刚得出的那一串数据,用str()函数转换一下。

        老规矩,请你继续补齐代码,将最下方代码串转换为字符串类型,并打印出字符串类型的结果4。【要点提示:print()函数,str()函数】。

        可以先思考一下,再看下面的答案。

        这回,我们终于来到了最后一步,可以与字符串型变量sentence = '人工智障说:3.8+1等于'拼接了。

        国际惯例:补代码喽~【要点提示:字符串拼接+,print()函数】。

        你做对了吗?我们再来瞄一眼老师的答案:


        这么看来,虽然看上去挺复杂的,但通过我们这么一步步拆解,是不是简单多了?


       我的答案如下:

        恭喜你抽中N卡,答案为A,int()函数无法转换小数形式的字符串。

        怎么样?掌握了数据类型、数据拼接以及数据转换的你,有没有成为大佬的成就感?

        但这仅仅是开始,以后你将学习更为复杂的代码及命令,掌握更多的与计算机沟通的技巧。

        比如在下一关,你将跟着我通过复仇者联盟:无限宝石的故事,一起学习与计算机沟通的逻辑。

        那么最后,我们来用一张总结图结束这关的内容吧,我们下关见!


     课后作业:



    答案如下:


    编程技能的提升没有捷径,需要你不断的刻意练习。


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容