一、学习知识点概要
本次是Python训练营的测试,在45分钟内完成25题,满分100分及格80分。题目主要考察Task1到Task3里面的Python基础知识。在我随到的25道题里,知识点有:
- 变量(包括数据类型和容器类型)
- 运算符
- 基本语句
- 基本方法(包括变量类型的内置方法)
- 类与对象
- 函数(包括魔法方法)
二、学习内容
以下图片为我的测试题和我的答案
第一题,在Task1的异常处理中可以知道,可以用raise语句手动抛出一个异常,配合try - except语句可以让代码正常运行。
第二题,考察模块导入和常用模块的内置属性,没什么好说的
第三题,也是考察模块导入。要只导入模块里具体的类的话是用 from 模块 import 类名 的方式导入,D选项反了。
第四题,考察基本内置方法,type(obj)用于查看obj的数据类型
第五题,考察函数和循环语句。for循环中,in后面跟的是一个可迭代对象,题中为形参numbers。ABC三个选项中传入的参数分别是列表、字符串、元组,都是可迭代的对象,而D选项传入的参数1234是数值型,不是可迭代对象。
第六题,可以用id()查看是不是同一个内存地址。AB选项是通过分别赋值产生的,生成的分别是列表和整型数据,其在内存开辟了不同的空间,内部指向的是相同的内存地址。C虽然也是分别赋值产生,但是C生成的是字符串,这样使得s1与s2是同一个内存地址。D选项产生的是整形数据,而不是元组。
第七题,final在Java中用于表示类不能被继承。但在Python中并没有final关键字。
第八题,要注意Python是严格按照缩进分语句块的,这样print("Hello"*2)是属于myfun()函数内部的代码。虽然调用时已经pass了中间部分,但是还是会执行print("Hello"*2)。*号是容器类型表示重复的符号,于是就输出了HelloHello
第九题,考察变量和运算符的使用。第一个部分x>=y易知结果为True;而第二部分ch<'b'是字符串的比较,单个字符比较的是其ASCII码值,大写字母的ASCII码值比小写字母的小,于是ch<'b'的结果也是True;第三部分是y,y=1,这样整个运算式就可以表示为True and True and 1。在布尔变量和逻辑运算的学习中可知,当布尔变量参与数字运算时由0代表False,1代表True。True and True and 1运算至下一步变为True and 1,由于数字1在and后面,返回值为数值,于是运算结果为1。
第十题,考察基本类型的内置函数。列表的append()函数是将参数当成一个整体添加至列表的末尾,列表长度总是+1的,于是输出列表的长度是5。
第十一题,break语句用于跳出循环,如果不在循环体内使用的话会报错。
第十二题,计算机基本原理,没什么好说的。
第十三题,Python中若变量不先创建和赋值就使用会报错。
第十四题,若用try - except语句,抛出的异常被except语句拦截就不会终止程序。
第十五题,字典中的键只能用不可变类型充当,C选项中的键是列表,列表是可变类型。
第十六题,容器类型的切片操作。s是字符串,s[::2]表示选取s从第一个字符开始,每隔两步(即一个字符)选取一次,最后选取结果是'aceg'。
第十七题,考察的是类与对象。要注意的是,当通过对象调用方法时,会向方法传入自身这个参数,如果方法定义时没有self这个参数,则只能通过类名调用。题目中D类所拥有的a(),b(),c(),方法均没有参数,不能通过对象调用。
第十八题,在类里定义了实例化方法__init__(),在每次创建对象时会自动调用,如果创建对象时没有参数传给name,则会出错。而定义的showInfo()方法只有self一个参数,当通过对象调用时会将自身传给self,因此通过对象调用该函数时无需再添加参数。
不过我在做这题时本来是选择了C选项,但是到交卷的时候这题就变成了D选项,导致我这题错了。不知道是系统的问题还是在我点下一题之前点错了。
第十九题,主要考察作用域。global关键字将函数内的counter声明为全局变量,于是调用函数doLotsOfStuff()时会对第一句声明的counter产生影响。
第二十题,考察类与对象。实例方法是和对象密切相关的,每个对象调用的结果可能不一样,必须指定一个对象作为参数才能调用,所以实例方法必须在创建对象后才可以调用,B错误。
第二十一题,正确选项是AC。这题有点没搞懂,我不知道是不是出题人不小心把self打成了sef。如果写的是self的话,应该是可以实例化,然后再在类外给 对象.x 赋值的话是可以正常通过对象调用的。但如果写的就是sef的话,showInfo()方法内的self.x中的self就不会被认为是self指针了,所以pycharm会说self没有定义,类的定义中出现语法错误,也就不可以实例化了。
第二十二题,考察魔法方法。魔法方法是内置的方法,可以通过在类中重写增加新的行为,但是并不表示如果类中不定义的话就没有任何方法,类中是即包含__dir__()也包含__hash__()的。
第二十三题,考察字符串类的内置方法。count()方法就是用于统计字符串中某个子字符串的出现次数。而find()方法和index()方法类似,都是查找子字符串的位置,如果找到就返回索引值,但是如果没有找到子字符串,find()会返回-1,index()会报错,选项BC是反了。
第二十四题,考察Python基本语法。A选项是用了三目运算符,是正确的。而B中的?在Python中没有定义。C选项中,如果用不是三目运算符的话,if(condition)后面要跟冒号,并且换行缩进,x放在print()小括号里面作为参数,这样才符合Python语法。D选项的语法是正确的,不过While循环体用Pass的话会无法跳出循环,程序会一直运行下去。
第二十五题。A选项中每次循环都会输出两个数字,最终输出结果是0,1,1,2,2,3。B选项明显正确。C选项只输出1,2,因为当i=3时 i<3的结果是False,会跳出循环,没有输出3。D选项也是正确的,range(3)生成包含0,1,2 三个数字的可迭代对象,输出时用print(i+1)是正确的。
最终我由于十八题和二十一题两题错误,获得了92分。
三、学习问题与解答
本次测验的题目只考Task1~Task3里的内容,都是Python里很基础的东西。第十八题我一开始是选C的,可能是我在点下一题的时候不小心点错更改了一次选项选到D导致错误。而二十一题也是被题目诱导了,再加之我没有用过pycharm,之前一直用IDEL进行学习。发现二十一题写错之后我下载了pycharm编辑器试了题目的代码,才知道是怎么回事。
四、学习思考与总结
Python训练营差不多就要结束了,学习了很多Python的基础内容。测验测的都是Python基础,也顺利通过了,以后要提升还得继续学习Python的进阶内容,例如Task4里的东西。用了一会pycharm发现这个比IDEL要好用得多,以后还是用pycharm进行学习好了🤣