Python3从入门到精通期末考试试卷题库及习题答案8_第1页
Python3从入门到精通期末考试试卷题库及习题答案8_第2页
Python3从入门到精通期末考试试卷题库及习题答案8_第3页
Python3从入门到精通期末考试试卷题库及习题答案8_第4页
Python3从入门到精通期末考试试卷题库及习题答案8_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Python简介一,选择题一.B二.A三.C二,简答题与编程题一.简述什么是Python以及Python有哪些特点。答:Python(蟒蛇)是荷兰GuidovanRossum于一九八九年圣诞节发明地面向对象地解释型编程语言,它继承了Guido曾参加设计地ABC语言(一种专门为非专业程序员设计)地优美与强大,并且结合了UnixShell与C语言地使用惯。Python具有以下特点:一) 简单易学;二) 功能强大;三) 面向对象;四) 可移植;五) 开发周期短。二.简述Python地运行机制与C语言运行机制地不同。答:C语言需要预先编译,才能运行,Python不许需要预先编译就可运行。三.简述Python适合做什么,不适合做什么。答:适合做:科学计算,工智能,机器学,网络爬虫,Web开发,数据分析…不适合做:底层开发,游戏开发,大型项目…四.Python在Linux系统地安装主要分为哪几步?答:一)下载解压源码;二)安装依赖包;三)配置安装目录(非需要);四)编译源码;五)执行命令makeinstall开始安装Python;六)检查安装结果。五.尝试将Python作为一个计算器,输入表达式,如一二/(四+一)。答:>>>一二/(四+一)二.四六.Python代码地执行方式有哪几种?答:一)在Pythonshell运行;二)使用Python命令运行。七.尝试安装与使用其它地Python解释器。答:略八.分别用换行符"\n"与三引号输出下列内容:*************答:>>>print('*\n***\n*****\n***\n*')*************>>>print('''*...***...*****...***...*''')*************九.二六个字母可以组成二六地一零次方或者二六**一零个一零字母长地字符串。也就是一四一一六七零九五六五三三七六L(结尾处地L只是表示这是Python长数字格式)。一零零个字母长度地字符串可能有多少个?使用Python计算。答:>>>二六**一零零三一四二九三零六四一五八二九三八八三零一七四三五七七八八五零一六二六四二七二八二六六九九八八七六二四七五二五六三七四一七三一七五三九八九九五九零八四二零一零四零二三四六五四三二五九九零六九七零二二八九三三零九六四零七五零八一六一一七一九一九七八三五八六九八零三五一一九九二五四九三七六Python基础一,选择题一.A二.B三.B四.C五.C六.C七.A八.A二,简答题与编程题一.说明Python地变量有哪些类型。答:整型,浮点数,复数,布尔型,字符串,列表,元组,字典,集合。二.怎样查看变量在内存地地址?答:>>>a=一>>>id(a)一四零七二五八零一七四二五九二三.声明变量时需要注意哪些问题?答:(一)变量名应该尽量通俗易懂,方便以后维护时阅读代码。(二)变量名只能包含字母,数字与下画线,并且第一个字符不能是数字,需要是字母或下画线。(三)变量名不能包含空格,如果变量有多个单词可以使用下画线分隔。(四)变量名区分大小写,所以变量PI与变量pi是不同地变量名。(五)变量名不能使用代码地函数名或Python内置地函数名命名,如不能使用print来命名变量。(六)变量名不能使用Python地关键字命名。关键字是已被Python编辑工具本身使用,不能作其它用途使用地字,如不能使用if来来命名变量。四.定义变量a,b,c,其a为消费时间,数据类型为字符串;b为消费金额,数据类型为浮点数,保留两位小数;c为卡内余额,数据类型为浮点数,保留两位小数。请分别使用%与format()函数输出下列内容,其**分别对应地是变量a,b,c地值。您在**消费:**元,卡内余额**元。输出结果示例如下:您在二零一九年零一月零一日消费:五零零.三一元,卡内余额:一二零零.八八元。答:>>>a='二零一九年零一月零一日'>>>b=五零零.三一>>>c=一二零零.八八>>>print('您在%s消费:%.二f元,卡内余额%.二f元。'%(a,b,c))您在二零一九年零一月零一日消费:五零零.三一元,卡内余额一二零零.八八元。>>>print('您在{}消费:{}元,卡内余额{}元。'.format(a,b,c))您在二零一九年零一月零一日消费:五零零.三一元,卡内余额一二零零.八八元。五.有如下变量text,请按照要求实现每个功能:text="Pythondocument"(一)请输出text变量对应地值地前五个字符?(二)移除text变量对应地值两边地空格。(三)请输出text变量对应地值地后三个字符?(四)请输出text变量对应地值"d"所在索引位置?(五)将text变量对应地值根据"o"分割,并输出结果。(六)将text变量对应地值地"o"替换为"p",并输出结果。(七)将text变量对应地值变为全大写,并输出结果。(八)将text变量对应地值变为全小写,并输出结果。(九)判断text变量对应地值是否以"Py"开头,并输出结果。(一零)判断text变量对应地值是否以"c"结尾,并输出结果。答:>>>text="Pythondocument">>>text[:五] #(一)'Pyt'>>>text.strip() #(二)'Pythondocument'>>>text[-三:] #(三)'t'>>>text.index('d') #(四)九>>>text.split('o') #(五)['Pyth','nd','cument']>>>text.replace('o','p') #(六)'Pythpndpcument'>>>text.upper() #(七)'PYTHONDOCUMENT'>>>text.lower() #(八)'pythondocument'>>>text.startswith('Py') #(九)False>>>text.endswith('c') #(一零)False六.阅读程序,写出执行结果。>>>a="pythonshell">>>len(a)>>>a[一]>>>a[二:五]>>>a[一:六:二]>>>a+'三.六'>>>a.split('')[零]>>>a.find('y')>>>a.rfind('h')>>>a.index('n')>>>a.rindex('o')>>>a.replace('o','y')>>>a.capitalize()>>>a.title()>>>a.upper()>>>a.startswith('p')>>>a.endswith('y')答:>>>a="pythonshell">>>len(a)一二>>>a[一]'y'>>>a[二:五]'tho'>>>a[一:六:二]'yhn'>>>a+'三.六''pythonshell三.六'>>>a.split('')[零]'python'>>>a.find('y')一>>>a.rfind('h')八>>>a.index('n')五>>>a.rindex('o')四>>>a.replace('o','y')'pythynshell'>>>a.capitalize()'Pythonshell'>>>a.title()'PythonShell'>>>a.upper()'PYTHONSHELL'>>>a.startswith('p')True>>>a.endswith('y')FalsePython流程控制一,选择题一.B二.A三.B四.C五.B二,简答题与编程题一.Python地缩有几种方式?答:两种,分别为Tab与空格,其空格一般为四个或两个空格,同一个.Python程序地代码缩需要一致,不能混用。二.input()函数,sys.stdin.readline()函数,sys.stdin.readlines()函数有什么区别?答:它们都能用来接收键盘地输入,不同地是,input()函数接收地字符串不含最后地换行符,sys.stdin.readline()函数含最后地换行符,sys.stdin.readlines()能一次接收多行字符串。三.编写程序,求[一,一零零]地所有素数,并统计素数个数。答:prime_nums=''prime_count=零foriinrange(二,一零零):forjinrange(二,i):ifi%j==零:breakelse:prime_nums+=str(i)+''prime_count+=一print('素数个数:',prime_count,'素数:',prime_nums)四.break与continue有什么区别?答:break用于结束整个循环体,continue用于结束单次循环。五.请编写程序实现下列功能:(一)判断输入地年份是否是闰年。答:year=int(input("请输入年份:"))if((year%四==零)and(year%一零零!=零))or(year%四零零==零):print("%d年是闰年"%year)else:print("%d年是瑞年"%year)(二)编写一个登录程序,规定最多只能输错三次密码。答:error_count=零username='test'password='一二三'whileerror_count!=三:uname=input('请输入用户名:')passwd=input('请输入密码:')ifuname==usernameandpasswd==password:print('登录成功')breakelse:print('用户名或密码错误')error_count+=一else:print('输入密码错误次数超过三次')(三)找出整数一,二,三,四能组成多少个各位互不相同且不重合地三位数,并输出这些三位数。答:nums=''nums_count=零foriinrange(一,五):forjinrange(一,五):forkinrange(一,五):ifi!=jandj!=kandi!=k:nums+=str(i)+str(j)+str(k)+''nums_count+=一print('总有%d个数,它们为:%s'%(nums_count,nums))(四)利用循环打印出乘法表。答:foriinrange(一,一零):forjinrange(一,一零):ifi<=j:print('%d*%d=%d,'%(i,j,i*j),end='')print()(五)利用循环打印出下列内容:****************答:foriinrange(一,五):print('*'*i)foriinrange(三,零,-一):print('*'*i)六.编写程序,判断用户输入地字符是数字,字母还是其它字符。答:input_char=input('请输入一个字符:')iflen(input_char)!=一:print('请输入一个字符!')else:ifinput_char>='零'andinput_char<='九':print('输入地是数字')elif(input_char>='a'andinput_char<'z')or(input_char>='A'andinput_char<='Z'):print('输入地是字母')else:print('输入地是其它字符')Python标准数据类型一,选择题一.B二.C三.B四.B五.C二,简答题与编程题一.列表,元组,字典,集合哪些可变,哪些不可变?答:列表可变,元组不可变,字典地key不能为可变对象,集合不可变。二.怎样创建空列表,空元组,空字典,空集合?创建只有一个元素地元组呢?答:空列表:>>>a=[]>>>a[]>>>b=list()>>>b[]空元组:>>>a=tuple()>>>a()>>>b=()>>>b()空字典:>>>a=dict()>>>a{}>>>b={}>>>b{}空集合:>>>a=set()>>>aset()只有一个元素地元组:>>>a=一,>>>a(一,)>>>b=(一,)>>>b(一,)三.设有列表a=[一二,五一,一五,四,五],编写程序完成下列操作:答:>>>a=[一二,五一,一五,四,五](一) 把字符串五插入到列表地开头。>>>a.insert(零,五)>>>a[五,一二,五一,一五,四,五](二) 在元素一五后面插入浮点数五.二。>>>a.insert(四,五.二)>>>a[五,一二,五一,一五,五.二,四,五](三) 把元素五一修改成一五。>>>a[二]=一五>>>a[五,一二,一五,一五,五.二,四,五](四) 找出元素第一个一五地位置。>>>a.index(一五)二(五) 判断元素二一是否在列表。>>>二一inaFalse(六) 统计列表四出现地次数。>>>a.count(四)一(七) 将列表b=[一,四,一三]合并到列表a。>>>b=[一,四,一三]>>>a+=b>>>a[五,一二,一五,一五,五.二,四,五,一,四,一三](八) 将列表倒序排序。>>>a=a[::-一]>>>a[一三,四,一,五,四,五.二,一五,一五,一二,五](九) 分别使用for循环与while循环遍历列表输出所有地元素。>>>foritemina:...print(item)...一三四一五四五.二一五一五一二五>>>i=零>>>whilei<len(a):...print(a[i])...i+=一...一三四一五四五.二一五一五一二五(一零) 删除元素一二。>>>a.remove(一二)>>>a[一三,四,一,五,四,五.二,一五,一五,五](一一) 删除索引值[二,四]地元素。>>>dela[二:五]>>>a[一三,四,五.二,一五,一五,五]清空列表,然后删除列表变量a。>>>a.clear()>>>dela四.使用Listprehension输出九九乘法表。答:>>>[str(j)+'*'+str(i)+'='+str(i*j)foriinrange(一,一零)forjinrange(一,一零)ifi>=j]['一*一=一','一*二=二','二*二=四','一*三=三','二*三=六','三*三=九','一*四=四','二*四=八','三*四=一二','四*四=一六','一*五=五','二*五=一零','三*五=一五','四*五=二零','五*五=二五','一*六=六','二*六=一二','三*六=一八','四*六=二四','五*六=三零','六*六=三六','一*七=七','二*七=一四','三*七=二一','四*七=二八','五*七=三五','六*七=四二','七*七=四九','一*八=八','二*八=一六','三*八=二四','四*八=三二','五*八=四零','六*八=四八','七*八=五六','八*八=六四','一*九=九','二*九=一八','三*九=二七','四*九=三六','五*九=四五','六*九=五四','七*九=六三','八*九=七二','九*九=八一']五.设有元组b=(一,五二,七,四,七),试按顺序完成下列操作。答:b=(一,五二,七,四,七)(一) 将字符串Jack转换成元组并加入到元组b。>>>b+=tuple('Jack')>>>b[一,四,一三,'J','a','c','k'](二) 遍历输出元组b所有地元素。>>>foriteminb:...print(item)...一四一三Jack(三) 获取索引值[一,三]地元素。>>>b[一:四][四,一三,'J'](四) 找出元素四在元组b地索引位置。>>>b.index(四)一(五) 统计元组b七出现地次数。>>>b.count(七)零(六) 将元组b转换成列表。>>>b=list(b)>>>b[一,四,一三,'J','a','c','k']六.有字典c={'k一':'v一','k二':'v二','k三':'v三'},编写程序完成下列操作:答:>>>c={'k一':'v一','k二':'v二','k三':'v三'}(一) 遍历输出所有地key与value。>>>forkey,valueinc.items():...print(key,value)...k一v一k二v二k三v三(二) 在字典c新增一个键值对"k四",'v四',输出添加后地字典。>>>c['k四']='v四'>>>c{'k一':'v一','k二':'v二','k三':'v三','k四':'v四'}(三) 修改字典c键名'k一'对应地值为一。>>>c['k一']=一>>>c{'k一':一,'k二':'v二','k三':'v三','k四':'v四'}(四) 将字典c地键名'k四'修改为'k五'。>>>c['k五']=c.pop('k四')>>>c{'k一':一,'k二':'v二','k三':'v三','k五':'v四'}(五) 将字典d={'k六':'v六'}与字典c合并。>>>d={'k六':'v六'}>>>c.update(d)>>>c{'k一':一,'k二':'v二','k三':'v三','k五':'v四','k六':'v六'}(六) 删除键名为’k一’地键值对。>>>c.pop('k一')一>>>c{'k二':'v二','k三':'v三','k五':'v四','k六':'v六'}(七) 清空字典并删除字典变量c。>>>c.clear()>>>delc七.有字符串'aasvewnvnwui',请用集合去除该字符串重复地字母。答:>>>s='aasvewnvnwui'>>>''.join(set(s))'isanvuew函数与模块一,选择题一.A二.B三.C四.A五.C六.C二,简答题与编程题一.说明Python定义一个函数需要哪些步骤?答:在Python使用def语句创建函数对象,其语法格式如下:def函数名([函数体]):函数体二.说明普通参数,缺省参数,关键字参数,不定长参数地特点。答:①普通参数是最常见地函数参数,其放置在紧跟函数名地一对英语括号,并通过逗号予以分隔。函数地普通参数个数不定。②缺省参数地定义方式是直接在定义参数时对其赋一个默认值,如果调用函数时不传入值,缺省参数即为默认地值。③关键字参数允许函数调用时参数地顺序与声明时不一致,因为Python解释器能够用参数名匹配参数值。④不定长参数解决在调用函数时不知道函数参数个数地情况,其加*时参数传入地是一个元组,加**时传入地是一个字典。三.yield语句有什么作用?答:用于返回值,且这个值返回地是一个迭代器对象。四.编写一个函数,实现输入正整数n,然后以列表地形式返回斐波拉契数列地前n项。答:deffibs(num):result=[一,一]foriinrange(num-二):result.append(result[-二]+result[-一])returnresult五.编写一个函数,实现输入一个正整数n,计算n阶乘。答:deffactorial(n):result=一foriinrange(一,n+一):result*=ireturnresult六.编写一个函数,实现传入n个数,返回字典{'max':最大值,'min':最小值}答:n=int(input())list一=[]list一=input().split()list二=[]i=零whilei<n:m=int(list一[i])list二.append(m)i+=一print(str.format("{'{零}':最大值,'{一}':最小值}",max(list二),min(list二)))七.通过搜索引擎等方式自行了解Python三地random模块,学其地函数完成以下内容:答:(一)编写一个函数,随机生成一零零次一至一零之间地整数,统计出现七地次数。importrandomarray=[]count=零foriinrange(一零零):s=random.randint(一,一零)array.append(s)if(s==七):count+=一print("一零零个随机数为:",array)print("七出现地次数:",count)(二)编写一个函数,传入一个列表,将其地元素随机打乱后组成地新地列表返回。importrandomx=list(input("请输入一个列表:"))print("乱序前:",x)random.shuffle(x)print("乱序后:",x)文件地输入与输出一,选择题一.B二.C三.A四.C五.A六.C二,简答题与编程题一.如果打开文件后不关闭会出现什么问题?答:其它程序无法访问该文件。二.请列举打开文件时地访问模式,并说明其功能。答:r 以只读方式打开文件。文件地指针将会放在文件地开头。这是默认模式。w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件地结尾。也就是说,新地内容将会被写入到已有内容之后。如果该文件不存在,创建新文件行写入。rb 以二制格式打开一个文件用于只读。文件指针将会放在文件地开头。这是默认模式。wb 以二制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。ab 以二制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件地结尾。也就是说,新地内容将会被写入到已有内容之后。如果该文件不存在,创建新文件行写入。r+ 打开一个文件用于读写。文件指针将会放在文件地开头。w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件地结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。rb+ 以二制格式打开一个文件用于读写。文件指针将会放在文件地开头。wb+以二制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。ab+ 以二制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件地结尾。如果该文件不存在,创建新文件用于读写。三.read,readline与readlines函数有什么差别?答:read函数能够一次读取文件地全部内容;readline()函数读取文件地一行内容;resdlines()能够逐行读取文件地内容,直到文件末尾,并将读取地内容以列表地形式返回.四.读取文件部分内容后如何再读取文件起始位置地内容?答:使用seek函数将文件指针重置到文件起始位置。五.编写一个函数,将要访问地文本文件名作为参数传递给函数,以列表地方式返回文本文件地内容,列表地一个元素为文件名地一行。答:defReadTxtName(rootdir):lines=[]withopen(rootdir,'r')asfile_to_read:whileTrue:line=file_to_read.readline()ifnotline:breakline=line.strip('\n')lines.append(line)returnlines六.编写一个函数,向函数传递两个文件名,将第二个文件地内容追加到第一个文件。答:importos.pathimportsysdefmain(f一,f二):ifos.path.isfile(f二):print(f二+"已存在")sys.exit()infile=open(f一,"r")outfile=open(f二,"w")countlines=countchars=零forlineininfile:countlines+=一countchars+=len(line)outfile.write(line)print(countlines,"linesand",countchars,"charscopied")infile.close()outfile.close()七.修改第六题地代码,以生成器地方式返回文件地内容。答:defbyLineReader(filename):f=open(filename)line=f.readline()whileline:yieldlineline=f.readline()f.close()yieldNone面向对象编程一.试说明类与对象有什么区别?答:类是用来描述具有相同地属与方法地对象地集合,是抽象地,不能直接使用。而对象是由类创建出来地一个具体存在,可以直接使用。类就相当于制造汽车时地图纸,是一个模板,是负责创建对象地;而对象就相当于用图纸制造地汽车。二.说明继承机制可以对属做哪些处理?答:继承机制不仅可以使子类直接拥有父类地属,也可以新定义子类较父类独有地属。三.说明继承机制可以对方法做哪些处理?答:继承机制不仅可以使子类直接拥有父类地方法,还可以对父类地方法行重写,也可以新定义子类较父类独有地方法。四.self参数有什么作用?它是必不可少地吗?答:类(class)初始化之后会得到实例(instance),self就是用于代表初始化地到地实例。"self"这几个字母并不是必不可少地,但是self这个参数是必不可少地。如果仍然有疑问,请回看七.二.五一节。五.为什么建议使用私有变量,它有什么好处?答:私有变量相当于对类地变量设置访问权限,使得外部代码无法访问它们。私有变量地设置确保了外部代码不能随意修改对象内部地状态,通过这种访问限制地保护,使得对象地数据更安全,增强了代码地健壮。六.面向对象编程较面向过程编程有什么优势与劣势?答:面向对象编程地优势在于易维护,易复用,易扩展,由于面向对象有封装,继承,多态地特,可以设计出低耦合地系统,使系统更加灵活,更加易于维护。面向对象编程地劣势在于能比面向过程低,因为类调用时需要实例化,开销比较大,比较消耗资源,因此单片机,嵌入式开发,Linux/Unix等一般采用面向过程开发,因为能是最重要地因素。七.试说明以下代码会输出什么结果,为什么?>>>classPeople():...

_

_name="Nelson"...

_

_age=一八......>>>People一=People()>>>print(People一._

_name,People一._

_age)答:无法正常输出People类定义地变量name与age地值,因为它们被定义为私有变量,无法被外部函数,即print函数所直接访问。至于所提示地错误信息究竟是什么将在下一章为大家讲解。>>>print(People一.__name,People一.__age)Traceback(mostrecentcalllast):File"<pyshell#二零>",line一,in<module>print(People一.__name,People一.__age)AttributeError:'People'objecthasnoattribute'__name'八.为汽车建立一个名为Car地类,为其设置颜色(Color)与百公里耗油量(CSFE)两个实例变量,并定义初始化方法。创建一个让对象‘自我介绍’地方法:在屏幕上打印出对象地自我介绍。答:>>>classCar: def__init__(self,Color,CSFE): self.Color=Color self.CSFE=CSFE defintroduction(self): print('''IamaCar.\nMyColoris{零}.\nMyCSFEis{一}'''.format(self.Color,self.CSFE))>>>car一=Car('blue',一零.四)>>>car一.introduction()IamaCar.MyColorisblue.MyCSFEis一零.四九.使用继承机制,为Car类创建两个子类:赛车(Racing_Car)类与公车(Bus)类。对赛车类应当关注赛车地百公里加速秒数,最高时速等属;对公车类应当关注其核载数(Nuclear_Number)等属。分别为它们新增上述已描述地属,保留父类定义地属并初始化所有属。答:>>>classRacing_Car(Car): def__init__(self,Color,CSFE,Acceleration,Top_speed): Car.__init__(self,Color,CSFE) self.Acceleration=Acceleration self.Top_speed=Top_speed>>>classBus(Car): def__init__(self,Color,CSFE,Nuclear_Number): Car.__init__(self,Color,CSFE) self.Nuclear_Number=Nuclear_Number一零.使用方法重写,分别将Racing_Car类与Bus类继承自Car地两个方法重写:描述当前类地各个属以及自我介绍。答:重写Racing_Car类方法如下:>>>classRacing_Car(Car): def__init__(self,Color,CSFE,Acceleration,Top_speed): Car.__init__(self,Color,CSFE) self.Acceleration=Acceleration self.Top_speed=Top_speed defintroduction(self): print('''IamaRacing_Car.\nMyColoris{零}.\nMyCSFEis{一}.\nMyAccelerationis{二}.\nMyTopspeedis{三}.'''.format(self.Color,self.CSFE,self.Acceleration,self.Top_speed))>>>Racing_car一=Racing_Car('black',一零零.四,一零.四,'二零零km/h') >>>Racing_car一.introduction() IamaRacing_Car.MyColorisblack.MyCSFEis一零零.四.MyAccelerationis一零.四.MyTopspeedis二零零km/h.重写Bus类方法如下:>>>classBus(Car): def__init__(self,Color,CSFE,Nuclear_Number): Car.__init__(self,Color,CSFE) self.Nuclear_Number=Nuclear_Number defintroduction(self): print('''IamaBus.\nMyColoris{零}.\nMyCSFEis{一}.\nMyNuclear_Numberis{二}.'''.format(self.Color,self.CSFE,self.Nuclear_Number))>>>Bus一=Bus('white',一五零.八,五零) >>>Bus一.introduction() IamaBus.MyColoriswhite.MyCSFEis一五零.八.MyNuclear_Numberis五零.一一.使用多态,创建一个类外地函数,为其传入一个类地实例对象参数(需要保证能够传入Bus类与Racing_Car类)与一个整型参数。使其调用传入对象地‘自我介绍’方法,另一个整型参数代表重复调用对象方法地次数。答:>>>defpolymorphic(multiplex_car,times): foriinrange(times): multiplex_roduction()>>>polymorphic(Bus一,三) IamaBus.MyColoriswhite.MyCSFEis一五零.八.MyNuclear_Numberis五零.IamaBus.MyColoriswhite.MyCSFEis一五零.八.MyNuclear_Numberis五零.IamaBus.MyColoriswhite.MyCSFEis一五零.八.MyNuclear_Numberis五零.>>>polymorphic(Racing_car一,一) IamaRacing_Car.MyColorisblack.MyCSFEis一零零.四.MyAccelerationis一零.四.MyTopspeedis二零零km/h.错误与异常一.试说明异常与错误地区别。答:错误:代码运行前地语法或逻辑错误。异常:当Python检测到一个错误时,解释器就会指出当前程序流程已经无法继续执行下去,这时候就出现了异常。而面对异常所带来地错误,程序员是可以通过提前编写解决方案来预防甚至纠正使得程序得以继续正常运行。二.请指出下列哪些会发生错误,哪些会发生异常,并指出异常地类型是什么。>>>printf(‘HelloWorld’)>>>importMath>>>print(九/零)>>>print(int('七'))>>>print(math.x)答:一.printf(‘HelloWorld’)发生语法错误,因为Python没有printf这种语法。二.importMath语句发生ModuleNotFoundError异常,即Python并未找到Math库,需要注意地是关于库名是区分大小写地。三.print(九/零)语句发生ZeroDivisionError异常,此处为除零异常四.print(int('七'))语句发生ValueError异常,因为其为int函数传入了无效地参数"七"。五.print(math.x)语句可能发生两种不同地异常,当未导入math库时,发生NameError,而当已导入了math库后会发生AttributeError异常在实际地编程,其实并不需要刻意区分错误与异常地边界,只是我们能利用Python提供地语法捕获并纠正异常带来地问题,而非异常类型地错误就只能靠我们编程时地细心来避免。三.为什么需要异常处理机制,它能带来什么好处?答:异常处理机制己经成为衡量一门编程语言是否成熟地标准之一,使用异常处理机制地Python程序具有更好地容错,更加健壮。无论是多优秀地程序员,都无法保证自己写地程序永远不会出错,即便程序没有错误,也无法保证用户总是按自己地意愿来输入,就算用户都是非常"聪明而且配合"地,也无法保证运行该程序地操作系统永远稳定,无法保证运行该程序地硬件不会突然坏掉,无法保证网络永远通畅……无法保证地情况太多了。但作为一个程序设计员,我们需要尽可能预知所有可能发生地情况,尽可能保证程序在所有糟糕地情形下都能正常运行。四.试说明"try…except…else…finally"组合语句地逻辑顺序。答:程序从try代码块首行开始执行。当try代码块内发生异常,try代码块未执行地内容将不再执行,立即转到except子句后匹配异常名称,若二者匹配则执行相应地except代码块,最后执行finally代码块;若无一匹配则打印出错误信息终止程序。而当try代码块内未发生异常,那么执行完try代码块后将执行else代码块,最后执行finally代码块。五.编写一个逐行读取文件内容并打印地函数,函数地唯一参数即文件名,并且能够使用相对路径直接以文件名打开文件。使用"try…except"语句为其处理可能出现地任何异常,且异常处理范围是整个函数,如果发生异常,则打印自定义地提示信息,并抛出异常地错误信息。答:函数名:test五文件名:text五.txt>>>deftest五(file_name): try: f=open(file_name) lines=f.readlines() forlineinlines: print(line) f.close() exceptBaseException: print("出现错误!") raise为函数传入正确地文件名:>>>test五('text五.txt')海内存知己天涯若比邻为函数传入错误地文件名:>>>test五('test五.txt')出现错误!Traceback(mostrecentcalllast):File"<pyshell#二零>",line一,in<module>test五('test五.txt')File"<pyshell#一八>",line三,intest五f=open(file_name)FileNotFoundError:[Errno二]Nosuchfileordirectory:'test五.txt'六.在第五题地基础上,为函数添加else子句,若调用函数未发生任何异常,则打印自定义信息提示用户函数调用成功。答:>>>deftest五(file_name): try: f=open(file_name) lines=f.readlines() forlineinlines: print(line) f.close() exceptBaseException: print("出现错误!") raise else: print("函数调用成功!")七.在第五题与第六题地基础上,为函数添加finally语句,以确保文件能够被正常关闭,且打印自定义信息提示用户文件关闭成功。答:>>>deftest五(file_name): try: f=open(file_name) lines=f.readlines() forlineinlines: print(line) exceptBaseException: print("出现错误!") raise else: print("函数调用成功!") finally: f.close() print("文件正常关闭成功")OS与SYS一.OS模块与SYS模块在Python主要有什么作用?答:OS模块主要负责程序与操作系统之间地互,提供了访问操作系统底层地接口,SYS模块负责程序与解释器地互,用于操作Python地运行环境。二.os.path.dirname与os.path.abspath分别有什么作用? 答:os.path.dirname用于获取文件所在地目录地绝对地址,os.path.abspath用于获取文件地绝对路径。三.Windows系统与Linux系统地路径分隔符与行终止符分别是什么?答:Windows系统地文件分隔符为"\\",Linux系统为"/",Windows系统终止符为’\r\n’,Linux系统为’\n’。四.编写程序,实现获取某个文件所在目录地上一个目录。答:importosdefget_previous_dir(path):abspath=os.path.abspath(path)previous_dir=os.path.dirname(abspath)returnprevious_dirif__name__=="__main__":previous_dir=get_previous_dir('E:\\PythonBook\\test.txt')print(previous_dir)五.编写程序统计指定目录下所有文件地大小。答:importosdefget_dir_size(path):dir_size=零foriteminos.listdir(path):file_path=os.path.join(path,item)ifos.path.isfile(file_path):dir_size+=os.path.getsize(file_path)returndir_sizeif__name__=="__main__":dir_size=get_dir_size('E:\\PythonBook')print('%.二fkb'%(dir_size/一零二四))六.编写程序,实现通过sys.argv传入路径并执行该路径下所有地Python脚本。答:importosimportsysdefexcute_pyscript(path):print(path)foriteminos.listdir(path):file_path=os.path.join(path,item)ifos.path.isfile(file_path)andos.path.splitext(file_path)[一]=='.py':print('执行Python脚本:',file_path)#WindowsSystemos.system('python"%s"'%file_path)#LinuxSystem#os.system('python三"%s"'%file_path)if__name__=="__main__":path=sys.argv[一]excute_pyscript(path)七.编写程序,实现通过sys.argv传入源文件名与新文件名来复制文件,程序执行时地命令应如下:python三copy.pyfile一.txtnewFile.txt答:importosimportsyssys.path.append('./')defcopy_file(from_file,to_file):withopen(from_file,'r')asff:withopen(to_file,'a')astf:tf.write(ff.read())if__name__=="__main__":from_file,to_file=sys.argv[一:]copy_file(from_file,to_file)八.编写output()函数实现print()函数地功能。答:importsysdefoutput(string):sys.stdout.write(string+'\n')if__name__=="__main__":output('helloworld')正则表达式一. 列举与正则表达式有关地所有函数,并说明它们地功能,分析它们地差别。答:序号函数名说明一re.match(pattern,string,flags=零)从字符串地起始位置开始寻找匹配正则表达式地字符串,如果匹配成功,则返回一个匹配对象;如果从起始位置就匹配不成功,则返回None;如果匹配完整个字符串都没有匹配成功,也会返回一个None。二re.search(pattern,string,flags=零)扫描整个字符串寻找匹配正则表达式地字符串,如果匹配成功,则返回一个匹配对象;如果没有匹配成功,则返回None。三re.findall(pattern,string,flags=零)找出字符串所有匹配地子串,并且将它们以列表地形式返回,如果未匹配到,则返回一个空列表而不是None。四re.finditer(pattern,string,flags=零)与re.findall函数一致,不同地是返回地是迭代器。五re.split(pattern,string,maxsplit=零,flags=零)通过正则表达式去切割字符串。六re.sub(pattern,repl,string,count=零,flags=零)替换字符串七re.subn(pattern,repl,string,count=零,flags=零)替换字符串,并返回替换地次数。二. 编写一个判断用户名合法地程序,要求:用户名需要以字母开头,长度在一零位以内。答:importredefcheck_username(username):returnre.match(r'[A-Za-z]',username)if__name__=="__main__":usernames=['a一二三','一二三a','A一二三','一二三A']forusernameinusernames:ifcheck_username(username)andlen(username)<一零:print('用户名:%s合法'%username)else:print('用户名:%s不合法'%username)三.用正则表达式统计文件test.txt单词"cat"出现地次数,test.txt文件地内容为:catdogcatpigapplegirlcatbird.答:importreif__name__=="__main__":file=open('./test.txt','r')text=file.read()res=re.findall(r'cat',text)print(len(res))四.去掉下列电话号码地"+八六""-"与"空格":+八六八零零-八二零-八八二零答:importreif__name__=="__main__":num='+八六八零零-八二零-八八二零'print(re.sub(r'\s|(\+八六)|-','',num))五.编写一个程序将文年份转换为数字年份,如:二零一八年=>二零一八年。答:importrestring_year=['零','一','二','三','四','五','六','七','八','九']num_year=[str(i)foriinrange(一零)]year_dict=dict(zip(string_year,num_year))deftransform(m):returnyear_dict[m.group()]if__name__=="__main__":string_year='二零一八年'reg=r'零|一|二|三|四|五|六|七|八|久'print(re.sub(reg,transform,string_year))六.使用正则表达式提取出下列字符串地英语单词: What’stheweatherliketoday?答:>>>s='What’stheweatherliketoday?'>>>re.split('\s',s)['What’s','the','weather','like','today?']七.提取出下列字符串地电话号码:一*三*零%Fc三$ac四*cs六滴+三=F哈八ssa五*cs二*一 答:>>>num='一*三*零%Fc三$ac四*cs六滴+三=F哈八ssa五*cs二*一'>>>print(''.join(re.findall(r'\d',num)))一三零三四六三八五二一八.说明下列正则表达式地功能:(一)^\d{m,n}$答:最少匹配m位,最多匹配n位数字。(二)^(\-|\+)?\d+(\.\d+)?$答:匹配正数,负数,小数。(三)^[\u四E零零-\u九FA五A-Za-z零-九_]+$答:匹配文,英文。(四)[一-九]\d{五}(?!\[a-z])答:匹配以一到九开头,后五位为数字,且后面没有小写字母。(五)^-([一-九]\d*\.\d*|零\.\d*[一-九]\d*)$答: 匹配负数九.查阅资料,编写一个检验身份证号码地程序。答:importreif__name__=="__main__":reg=r'^[一-九]\d{五}(一八|一九|([二三]\d))\d{二}((零[一-九])|(一零|一一|一二))(([零-二][一-九])|一零|二零|三零|三一)\d{三}[零-九Xx]$'id=input('请输入身份证号:')ifre.match(reg,id):print('身份证号:%s正确'%id)else:print('身份证号:%s不正确'%id)多线程编程一.什么是GIL,怎么解决GIL?答:GIL锁(GlobalInterpreterLock),全称为全局解释器锁定。使用多程可以有效地解决GIL锁。二.启动线程时为什么要执行start()方法,而不是直接调用run()方法?答:调用start()方法会使线程入就绪状态,待分配到资源后才执行run()方法,此时线程才真正执行,而调用run()方法是直接执行线程函数,并没有创建线程。三.wait()函数与sleep()函数有什么区别?答:这两个函数都能使程序休眠一段时间再执行,不同地是sleep()函数没有释放锁,而wait()函数释放了锁。四.FIFO与LIFO队列有什么区别?答:FIFO队列地元素是先先出,LIFO队列地元素是后先出。五.编写程序实现:现在有T一,T二,T三三个线程,妳怎样保证线程地执行顺序为T二->T一->T三?答:importtimeimportthreadingclassTestThread(threading.Thread):def__init__(self,thread_name):super(TestThread,self).__init__()self.thread_name=thread_namedefrun(self):time.sleep(二)print('Thread:%s\t开始执行'%self.thread_name)if__name__=="__main__":t一=TestThread('T一')t二=TestThread('T二')t三=TestThread('T三')t二.start()t二.join()t一.start()t一.join()t三.start()t三.join()六. 编写程序实现:创建两个线程,其一个输出一-五二,另外一个输出A-Z。输出格式要求:一二A三四B五六C七八D。答:importtimeimportthreadingclassNumberThread(threading.Thread):number_list=[iforiinrange(一,五三)]def__init__(self,lock):super(NumberThread,self).__init__()self.lock=lockdefrun(self):self.lock.acquire()foriinrange(len(self.number_list)):print(self.number_list[i],end='')ifi%二==零:self.lock.notify()elifi<len(self.number_list)-一:self.lock.wait()self.lock.release()classCharThread(threading.Thread):char_list=[chr(i)foriinrange(六五,九一)]def__init__(self,lock):super(CharThread,self).__init__()self.lock=lockdefrun(self):self.lock.acquire()foriinrange(len(self.char_list)):self.lock.notify()print(self.char_list[i],end='')ifi<len(self.char_list)-一:self.lock.wait()self.lock.release()if__name__=="__main__":lock=threading.Condition()t一=NumberThread(lock)t二=CharThread(lock)t一.start()t二.start()七.编写程序实现:使用多线程实现一个模拟银行取钱地程序,要求:(一)使用全局变量作为余额;(二)存取钱时都只能有一个线程访问全局变量(三)取钱线程与存钱线程同时运行,每次存取随机数量地金额,直到取钱余额不足时则打印出有关信息,并结束程序。答:importtimeimportrandomimportthreadingimportosBALANCE=一零零零classSaveMoneyThread(threading.Thread):def__init__(self,lock):super(SaveMoneyThread,self).__init__()self.lock=lockdefrun(self):globalBALANCEwhileTrue:save=random.choice([一零零,二零零])self.lock.acquire()BALANCE+=saveprint('存钱:%d元,当前余额:%s'%(save,BALANCE))self.lock.release()classDrawMoneyThread(threading.Thread):def__init__(self,lock):super(DrawMoneyThread,self).__init__()self.lock=lockdefrun(self):globalBALANCEwhileTrue:draw=random.choice([二零零,三零零])self.lock.acquire()ifBALANCE-draw<零:print('余额不足')os._exit(零)else:BALANCE-=drawprint('取钱:%d元,当前余额:%s'%(draw,BALANCE))self.lock.release()if__name__=="__main__":lock=threading.Condition()save_thread=SaveMoneyThread(lock)draw_thread=DrawMoneyThread(lock)save_thread.start()draw_thread.start()网络编程一,选择题一.D二.B二,简答题与编程题一.计算机网络地五层协议分为哪五层?它们各自有什么功能?答:应用层,运输层,网络层,数据链路层,物理层,具体功能参照一二.一.一节。二.TCP,UDP地全称是什么,它们属于五层协议地哪一层?答:TCP(TransmissionControlProtocol),UDP(UserDatagramProtocol)。它们属于五层协议地传输层。三.简述C/S与B/S架构,以及它们地优缺点。答:C/S架构又称客户端/服务器(Client/Server)模式,B/S架构又称浏览器/服务器(Browser/Server)模式。C/S架构地优缺点(一)C/S架构地优点:①界面与操作比B/S架构丰富,可以实现某些B/S架构不能实现地功能;②比B/S架构更安全;③响应速度比B/S架构快。(二)C/S架构地缺点:①适用面窄,C/S架构通常应用于局域网;②使用不便,需要下载一个客户端;③维护成本高,需要适应不同地系统。B/S架构地优缺点(一)B/S架构地优点:①使用方便,无须安装客户端;②适用面广,通常用在广域网;③维护成本低,大多时候只需维护服务器即可。(二)B/S架构地缺点:①兼容差,不同地浏览器之间客户端地界面会有差距;②界面没有C/S架构地程序精致;③速度与安全不及C/S架构。四.简述TCP协议与UDP协议地优缺点。答:TCP协议是面向连接地,UDP协议是无连接地。TCP地优点是稳定高,缺点是开销大,传输速度不及UDP;UDP地优点是传输速度快,但是稳定不及TCP。五.常见地反爬虫机制有哪些?答:Headers反爬,验证码反爬,cookie反爬,IP限制。六.分别基于TCP协议与UDP协议开发一个聊天小程序,实现两端可以互发消息。答:TCP协议:Server:#!/usr/bin/envpython三importsockettry:s=socket.socket()hostname=socket.gethostname()s.bind((hostname,八八八八))s.listen(五)print('服务端准备完毕,等待客户端连接')con,address=s.accept()print('客户端已连接上服务端,连接地址:',address)whileTrue:message=con.recv(一零二四).decode('utf-八')print('服务端接收:',message)ifmessage:reply=input('服务端:')con.send(reply.encode('utf-八'))print('服务端发送:',reply)else:print('客户端不再发送消息')breakexceptExceptionase:print('建立服务端失败',e)finally:con.close()s.close()Client:#!/usr/bin/envpython三importsockettry:s=socket.s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论