循序渐进Python程序设计 课后习题答案及解析_第1页
循序渐进Python程序设计 课后习题答案及解析_第2页
循序渐进Python程序设计 课后习题答案及解析_第3页
循序渐进Python程序设计 课后习题答案及解析_第4页
循序渐进Python程序设计 课后习题答案及解析_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

课后习题答案及解析一单选题1.下面有关Python的描述中,错误的是(B)。A、支持面向对象程序设计B、代码由编译器执行C、是动态类型设计语言D、支持Windows、Linux等操作系统解析:Python是解释型语言,代码由解释器逐行执行,而非编译器编译后执行。正确的内容:A:Python支持面向对象编程(类、继承等);C:Python是动态类型语言(变量类型在运行时确定);D:Python是跨平台语言,支持多操作系统。2.在Windows命令窗口中,不能执行的Python命令是(D)。A、pipinstallnumpyB、python-mvenvmyenvC、python--versionD、importre解析:importre是Python代码语句,需在Python交互环境或脚本中执行,而非直接输入到Windows命令窗口。•其他选项是合法的命令行操作:A:通过pip安装第三方库;B:创建虚拟环境;C:查看Python版本。3.能返回字符Unicode码点的Python内置函数是(A)。A、ordB、printC、charD、input解析:ord(char)返回字符的Unicode码点(如ord('A')返回65)。•其他选项无关:B:输出函数;C:Python无此内置函数;D:用户输入函数。4.Python代码右缩进的默认空格数是(A)。A、4B、6C、8D、10解析:•Python官方风格指南(PEP8)规定:缩进默认4个空格。5.一行可以编写多条语句,语句之间的分隔符是半角字符(C)。A、逗号B、句号C、分号D、冒号解析:Python中用分号;分隔同一行的多条语句(如x=1;y=2)。6.一条语句可以分行输入,分行符是(B)。A、/B、\C、:D、;解析:行尾添加反斜杠\可将一条语句分多行书写(如长字符串或复杂表达式)。括号(圆括号、方括号等)内自然换行无需\。7.在PythonIDLE编辑窗口的“File”菜单中,能打开最近编辑的脚本的命令是(B)。A、OpenB、RecentFilesC、NewFilesD、OpenModule解析:RecentFiles列出最近打开的脚本文件。•其他选项功能:A:打开任意文件;C:新建文件;D:打开模块(如标准库模块);8.能作为变量名的是(D)。A、whileB、passC、returnD、name解析:name是合法变量名,其他选项(while、pass、return)是Python关键字,不能用作变量名。9.在Python交互式窗口中,输入help()后回车,进入help状态,这时提示符为help>,可以输入模块名、类名、函数名,得到相关操作的帮助信息。如果需要退出help状态,必须输入的命令是(A或B(两者均可))。A、quitB、exitC、closeD、goodbye解析:在Python的交互式help模式下,输入quit或exit均可退出。10.下面描述中错误的是(D)。A、print是Python的内置函数,用于输出0个、1个或多个数据B、input是Python的内置函数,代码运行到该函数时会暂停C、在PythonIDLE编辑器中,运行脚本的快捷键是F5D、在Python脚本中,文档字符串也是语句解析:D错误:文档字符串("""...""")是注释而非可执行语句。•其他选项正确:A:print()可输出任意数量参数;B:input()会阻塞程序直到用户输入;C:IDLE中F5是运行脚本的快捷键。二、操作题1.利用help函数,了解int、print和input的使用方法和主要作用。打开Python交互环境(IDLE或命令行),输入以下命令查看函数文档:help(int)#查看整数类型的构造函数及方法help(print)#了解print函数的参数(如sep、end等)help(input)#理解input函数的工作方式2.创建C:/z1t2.py脚本并输入以下代码后执行,理解各行语句的作用。"""第一章操作题第2题"""m=int(input("输入第一个正整数:"))n=int(input("输入第二个正整数:"))print(m,"+",n,"=",m+n)3.分别在第2题的第2.3行设置断点,利用PythonIDLE的调试器进行调试,观察变量的值和程序执行效果。尝试添加代码(仿效第4行)输出m-n和m*n的值。答案:(1)设置断点:在IDLE编辑器中,右键点击第2行(m=int(...))和第3行(n=int(...)),选择SetBreakpoint(行号会变黄)。(2)启动调试:按F5运行脚本,程序会在断点处暂停(进入调试模式)。(3)观察变量:在调试窗口中,查看Locals面板中的变量值(如m、n)。使用Step(F10)逐行执行,观察变量变化。(4)扩展输出:在调试过程中,可临时添加代码(如print(m-n))并观察结果。调试技巧:(1)变量监控:在调试器中右键变量选择Watch实时跟踪值变化。•(2)断点管理:通过Debug→ClearBreakpoints取消断点。

课后习题答案及解析一、单项选择题1.能够用作变量名的选项是(D)。A、3vrB、forC、whileD、name解析:Python变量名规则:不能以数字开头(排除A);不能是关键字(for、while是关键字,排除B、C);name是合法变量名。2.能够表示整数的字面量的是(C)。A、3.2E2(科学计数法,实际为浮点数320.0)B、0b1012(二进制,但包含非法数字2)C、0xE8F(十六进制,合法)D、0o92(八进制,包含非法数字9)解析:整数字面量支持:二进制(0b开头,仅含0-1);八进制(0o开头,仅含0-7);十六进制(0x开头,含0-9和A-F);0xE8F是合法的十六进制整数(十进制为3727)。3.设s="1234567",则值为"7531"的是(A)。A、s[::-2]B、s[::2]C、s[-1::2]D、s[::-1]解析:切片语法[start:end:step]:[::-2]:从后向前,步长2(7,5,3,1);[::2]:从前往后,步长2(1,3,5,7);[::-1]:反转字符串(7654321)。4.设a=(1,2,3,4),下面选项中错误的语句是(B)。A、b=a[0]+1(合法,b=2)B、a[0]=5(错误,元组不可修改)C、b=a[-1]+1(合法,b=5)D、a=a[0]+1(合法,但a变为整数5)解析:元组是不可变对象,不能通过索引修改元素(B错误);D虽然合法,但会改变变量类型(从元组变为整数)。5.表示x是[1,6]上的数值的表达式是(A)。A、1<=x<=6B、0<x<6C、(x>1)and(x<6)D、not((x<1)and(x>6))解析:A正确表示闭区间[1,6](含端点);B和C表示开区间(1,6);D逻辑错误(应为not(x<1orx>6))。6.下列语句中,错误的是(A)。A、a={5,2}*6(集合不支持乘法)B、a=[1,7]*2(合法,[1,7,1,7])C、a=(1,2)*3(合法,(1,2,1,2,1,2))D、a="abc"*5(合法,"abcabcabcabcabc")解析:集合(set)不支持乘法运算(A错误);列表、元组、字符串支持乘法(重复元素)。7.下列描述中错误的是(C)。A、字符串是不可变对象(正确)B、set集合是可迭代对象(正确)C、元组不支持索引和切片(错误)D、可利用切片修改列表的子序列(正确)解析:元组支持索引和切片(如a[0]、a[1:3]),但结果仍是不可变的元组;D正确示例:lst[1:3]=[4,5]。8.不能返回视图对象的字典内置方法是(D)。A、itemsB、keysC、valuesD、get解析:items()、keys()、values()返回视图对象(动态反映字典变化);get(key)直接返回值,不返回视图。9.设A、B均为set集合,则与A^B等效的是(B)。A、A|B(并集)B、(A-B)|(B-A)(对称差集)C、B-A(差集)D、(A-B)&(B-A)(空集)解析:A^B是对称差集(仅在A或B中,但不同时在两者中),数学等价于(A-B)|(B-A)。10.设a=b=[1,2,3,4]、c=a.copy()、d=b[::]、e=b[:]。则与a引用同一对象的是(A)。A、bB、cC、dD、e解析:a=b是引用赋值(共享同一列表);•c=a.copy()、d=b[::]、e=b[:]均为浅拷贝(创建新对象)。二、编程题1.a=['21','8','16','5','8','19','5'],编程实现:输入多个正整数串并插入a中,删除a中的重复数据并按元素表示的整数大小升序排序,输出处理后的列表。程序执行效果如下:输入正整数序列:3,16,2,8,10处理后的a元素为:'2','3','5','8','10','16','19','21'参考代码:a=['21','8','16','5','8','19','5']input_str=input("输入正整数序列:")#示例输入:3,16,2,8,10new_numbers=input_str.split(',')#拆分输入为列表a.extend(new_numbers)#将输入的数添加到a中#去重并转换为整数排序a=sorted(set(int(x)forxina),key=lambdax:int(x))#转回字符串格式a=[str(x)forxina]print("处理后的a元素为:",','.join(a))2.输入字典的键值对,将字典按键值降序排序后输出。程序执行效果如下:输入字典的键值对:S01=90,S02=76,S03=85,S04=66,S05=92,S06=72按键值降序排序后字典为:{'S05':92,'S01':90,'S03':85,'S02':76,'S06':72,'S04':66}参考代码:input_str=input("输入字典的键值对:")#示例输入:S01=90,S02=76,S03=85,S04=66,S05=92,S06=72pairs=input_str.split(',')#拆分为键值对列表data={}forpairinpairs:key,value=pair.split('=')data[key]=int(value)#按值降序排序sorted_data=dict(sorted(data.items(),key=lambdax:x[1],reverse=True))print("按键值降序排序后字典为:",sorted_data)3.输入日期,输出该日期是一年中的第几天。程序执行效果如下:输入日期:2022-8-28输出:2022-8-28是一年的第240天参考代码:fromdatetimeimportdatetimedate_str=input("输入日期:")#示例输入:2022-8-28date=datetime.strptime(date_str,"%Y-%m-%d")day_of_year=date.timetuple().tm_ydayprint(f"{date_str}是一年的第{day_of_year}天")4.输入你的出生农历,输出你的生肖(即属相)。程序执行效果如下:输入你的出生农历:2013你的生肖:蛇参考代码:zodiacs=["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"]year=int(input("输入你的出生农历:"))#示例输入:2013index=(year-2008)%12#2008年是鼠年,作为基准print("你的生肖:",zodiacs[index])

基本语句一、单选题1.可以终止循环的语句是(B)。A.continue B.break C.else D.match解析:break语句用于立即终止当前循环,continue用于跳过当前循环的剩余部分,else和match不用于终止循环。2.下列关于循环for语句的说法中错误的是(B)。A.可以使用break终止for循环 B.for语句不能与while语句嵌套使用C.for语句可以遍历字符串 D.for语句可以遍历集合解析:for语句可以与while语句嵌套使用,其他选项均正确。3.else子句不可以搭配的语句是(A)。A.match B.while C.if D.try解析:else子句可以与while、if和try语句搭配使用,但不能与match语句搭配。4.设a=70,则'C'ifa<60else('B'ifa<80else'A')的值是(B)。A.'A' B.'B' C.'C' D.False解析:表达式'C'ifa<60else('B'ifa<80else'A')中,a=70满足a<80,因此返回'B'。5.语句assert0<=a<=9的作用是(D)。A.在a>0且a<9时触发异常 B.在a>0或a<9时触发异常 C.在a是[0,9]上的数值时触发异常 D.在a不是[0,9]上的数值时触发异常解析:assert0<=a<=9的作用是当a不在[0,9]范围内时触发异常。6.在match语句中,模式*_的作用是(D)。A.匹配序列中任意数量的连续元素,并且会将它们绑定到变量B.匹配序列中的一个元素,并且会将它们绑定到变量C.匹配序列中的一个元素,不会将它们绑定到变量D.匹配序列中任意数量的连续元素,不会将它们绑定到变量解析:在match语句中,模式*_用于匹配序列中任意数量的连续元素,但不会将它们绑定到变量。7.try语句中,finally子句的执行条件是(D)。A.try语句中触发异常 B.try语句中未触发异常C.未使用except子句 D.无论是否触发异常,均会执行解析:finally子句无论try语句中是否触发异常,都会执行。8.list(range(5))的值是(C)。A.[1,2,3,4] B.[1,2,3,4,5] C.[0,1,2,3,4] D.[0,1,2,3,4,5]解析:list(range(5))生成[0,1,2,3,4],因为range(5)包含0到4。9.使用未定义的变量时,触发的异常是(C)。A.TypeErrorB.ValueError C.NameError D.IndexError解析:使用未定义的变量会触发NameError。10.在match语句中,多模式匹配使用的符号是(A)。A.| B.& C.or D.#解析:在match语句中,多模式匹配使用|符号。二、编程题输入两个正整数m、n,输出满足m+(m+1)+...+(m+k)>n的最小整数k。参考代码:whileTrue:m,n=map(int,input("输入两个正整数:").split(','))if10<=m<=200and1000<=n<=9999:breakprint("输入无效,请重新输入。")total=0k=0whiletotal<=n:total+=m+kk+=1print(f"k={k}")2.使用Eratosthenes筛法统计[3,n]上质数的个数。参考代码:n=int(input("输入一个正整数n:"))ifnot100<=n<=10000:print("输入无效")else:sieve=list(range(2,n+1))primes=[]whilesieve:prime=sieve[0]primes.append(prime)sieve=[numfornuminsieveifnum%prime!=0]print(f"[3,{n}]上共有{len([pforpinprimesifp>=3])}个质数")如果正整数k是k²的尾数,则称k是同构数。输入两个正整数m,n(m<n),输出[m,n]上同构数的个数。参考代码:m,n=map(int,input("输入两个正整数(m,n):").split(','))ifm>=norm<=0:print(0)else:count=0forkinrange(m,n+1):ifstr(k)==str(k**2)[-len(str(k)):]:count+=1print(f"[{m},{n}]上共有{count}个同构数")4.输入一个正整数,将其分解为质数的乘积(质数从小到大排序)。参考代码:num=int(input("输入一个正整数:"))ifnum<=1:print("ERROR")else:factors=[]d=2whiled*d<=num:whilenum%d==0:factors.append(d)num//=dd+=1ifnum>1:factors.append(num)print('*'.join(map(str,factors))iffactorselse"ERROR")5.青蛙跳井问题参考代码:whileTrue:n=int(input("输入井的深度(一个正整数,单位为尺):"))ifn>10:breakprint("输入无效,请重新输入。")jumps=0height=0whileTrue:jumps+=1height+=3ifheight>=n:breakheight-=2print(f"需跳次数={jumps}")

函数一、单选题1.下面关于函数的说法,错误的是(D)。A.函数的参数是局部变量B.函数的返回值可以是NoneC.可以定义名为*的函数参数D.调用函数时,可选参数必须传递数据解析:可选参数在调用时可以不传递数据,会使用默认值。2.自定义函数使用的关键字是(C)。A.functionB.funcC.defD.sub解析:Python中使用def关键字定义函数。3.定义匿名函数使用的关键字是(A)。A.lambdaB.mainC.functionD.def解析:Python中使用lambda定义匿名函数。4.在Python中,函数不能(D)。A.嵌套定义B.没有返回值C.递归调用D.检查参数类型解析:Python是动态类型语言,函数定义时不能检查参数类型。5.下面说法正确的是(D)A.函数的名称可以随意命名B.默认值参数一定位于参数列表的末尾C.局部变量的作用域是整个程序D.函数不调用就不会执行解析:函数定义后必须调用才会执行。6.定义名为"/"的参数的作用是该参数(B)。A.之后的参数必须按位置参数传递B.之前的参数必须按位置参数传递C.之后的参数必须按关键字参数传递D.之前的参数必须按关键字参数传递解析:"/"表示其之前的参数必须按位置参数传递。7.在函数的嵌套定义中,内函数要修改非局部变量的值,必须使用关键字(A)声明。A.nonlocalB.nolocalC.globalD.globals解析:使用nonlocal声明非局部变量。8.在lambda函数内(A)。A.只能使用表达式B.可以为变量赋值C.可以使用if语句D.只能使用语句解析:lambda函数只能包含一个表达式。9.值为3的平方根的是(C)。A.31/2B.pow(3,1,2)C.pow(3,0.5)D.3^0.5解析:pow(3,0.5)计算3的平方根。10.执行"x=3;a=eval("2,x,x+1")"后,sum(a)的值是(A)。A.9B.(2,3,4)C.[2,3,4]D.None解析:a是元组(2,3,4),sum(a)为9。二、编程题1.编写函数,接收任意多个实数,返回一个元组参考代码:defavg_and_above(*args):avg=sum(args)/len(args)above=tuple(xforxinargsifx>avg)return(avg,)+above2.编写函数,返回最大公约数和最小公倍数参考代码:defgcd_lcm(a,b):defgcd(x,y):whiley:x,y=y,x%yreturnxg=gcd(a,b)l=a*b//greturn(g,l)3.判断回文数参考代码:defis_palindrome(n):s=str(n)returns==s[::-1]4.将正整数写为连续正整数的和参考代码:defgetexp(n):result=[]forkinrange(2,int((2*n)**0.5)+1):if(2*n)%k==0:m=(2*n)//k-k+1ifm>0andm%2==0:start=m//2seq="+".join(str(start+i)foriinrange(k))result.append(seq)ifnotresult:returnNonereturnf"{n}="+"=".join(reversed(result))5.计算星期几参考代码:defweek(y,m,d):ifm<3:m+=12y-=1c=y//100y=y%100w=(y+(y//4)+(c//4)-2*c+(26*(m+1)//10)+d-1)%7return["日","一","二","三","四","五","六"][w]6.计算数列前n项和参考代码:defxsum(a,count=10):total=0forninrange(1,count+1):total+=eval(a)returntotal

面向对象一、单选题1.在Python中,以下哪个关键字用于定义类(B)。A.defB.classC.structD.object解析:Python中使用class关键字来定义类,def用于定义函数,struct不是Python关键字,object是所有类的基类。2.在Python中,以下哪个方法是类的构造函数(A)。A.__init__B.__new__C.__start__D.__construct__解析:__init__是Python类的构造函数,用于初始化对象。__new__负责创建实例,__start__和__construct__不是Python的特殊方法。3.假定Car为自定义类,语句"Car.n=1"执行时未抛出异常,则下面描述中正确的是(B)。A.一定定义了类属性nB.可能没有定义类属性nC.一定定义了对象属性nD.可能定义了对象属性n解析:Python允许动态添加类属性,因此即使之前没有定义类属性n,执行"Car.n=1"也会成功创建一个新的类属性。4.下面给出的名称中,可以作为类的私有属性的是(A)。A.__sidB.__sid__C.sid__D._sid_解析:Python中双下划线开头但不以双下划线结尾的名称(如__sid)会被自动改名,形成私有属性。其他选项:__sid__是特殊方法名,sid__和_sid_不是私有属性命名方式。5.静态方法使用的装饰器是(B)。A.@setattrB.@staticmethodC.@propertyD.classmethod解析:@staticmethod用于定义静态方法,@property用于定义属性,classmethod用于定义类方法,@setattr不是Python内置装饰器。6.下列说法中错误的是(C)。A.在类的内部和外部,均可以访问类的公有属性和私有属性B.可以为创建的对象再定义属性C.子类不能调用父类的构造方法D.子类可以重写父类的公有方法解析:子类可以通过super().__init__()调用父类的构造方法,因此C选项错误。其他选项描述正确。7.由类创建的对象可以(D)。A.读取类属性B.修改类属性C.添加类属性D.删除对象属性解析:对象可以删除自己的属性(使用delobj.attr),但不能直接删除类属性。对象可以读取类属性,但修改类属性需要通过类名。8.在父类中,以下哪个选项可以防止子类重写父类的方法(D)。A.使用final关键字B.使用private关键字C.使用双下画线命名方法D.无法防止解析:Python没有提供机制完全防止子类重写父类方法。final和private不是Python关键字,双下划线命名只能增加重写难度,不能完全防止。9.能正确实现多重继承的是(B)。A.classC(A+B)B.classC(A,B)C.classC(AandB)D.classC(A|B)解析:Python多重继承语法是在括号中用逗号分隔父类,如classC(A,B)。10.下面给出的方法中,不是Python规定的有特殊作用的方法的是(D)。A.__init__B.__del__C.__new__D.__saveinfs__解析:__saveinfs__不是Python的特殊方法名。其他选项都是Python的特殊方法:__init__是构造函数,__del__是析构函数,__new__负责创建实例。二、编程题1.Student类定义参考代码:classStudent:def__init__(self,name,age):self.__name=name#私有属性self.__age=age#私有属性defgetinfs(self):returnself.__name,self.__age#返回姓名和年龄解析:使用双下划线定义私有属性,通过方法提供访问接口。2.CollegeStudent子类定义参考代码:classCollegeStudent(Student):def__init__(self,name,age,major,class_):super().__init__(name,age)#调用父类构造方法self.major=major#新增专业属性self.class_=class_#新增班级属性defgetinfs(self):name,age=super().getinfs()#获取父类信息returnname,age,self.major,self.class_#返回扩展信息解析:通过继承扩展功能,使用super()调用父类方法,添加新属性并重写方法。3.Equation类定义参考代码:classEquation:def__init__(self,formula):self.formula=formula.split('=')[0]#提取方程左边defsolve(self,a,b):min_diff=float('inf')#初始化最小差值solution=Nonex=awhilex<=b:try:current=abs(eval(self.formula.replace('x',str(x))))ifcurrent<min_diff:#找到更接近的解min_diff=currentsolution=xexcept:pass#忽略计算错误x+=0.01#步进returnsolution解析:使用数值方法近似求解,通过eval动态计算表达式值,步进搜索最接近0的解。4.newdate类定义参考代码:fromdatetimeimportdate,timedeltaclassnewdate(date):defgetdate(self,days):returnself+timedelta(days=days)#计算新日期defweekday(self):weekdays=["星期一","星期二","星期三","星期四","星期五","星期六","星期日"]returnweekdays[super().weekday()]#重写返回中文星期解析:继承内置date类,添加新方法和重写方法,使用timedelta进行日期计算。5.NewStr类定义参考代码:importreclassNewStr(str):@propertydefis_palindrome(self):returnself==self[::-1]#判断回文@classmethoddefget_nums(cls,s):returnlist(map(int,re.findall(r'-?\d+',s)))#提取所有整数def__and__(self,other):common=set(self)&set(other)#获取公共字符#按原字符串顺序排列return''.join(sorted(common,key=lambdax:self.index(x)))def__rand__(self,other):returnself.__and__(other)#反向运算解析:继承str类,添加属性和方法,使用正则表达式提取数字,重载&运算符实现特殊功能。

模块一、单选题1.在Python中,标准库模块的作用是(B)。A.只能用于学习,不能用于实际项目B.提供了各种常用的功能和工具C.仅包含基本的数据类型和函数D.必须手动安装才能使用解析:Python标准库提供了各种常用的功能和工具,可以直接使用,无需额外安装。2.执行"frommathimportcos"后,下面正确的语句是(D)。A.x=math.cos(1)B.x=cosC.x=cos1D.x=cos(1)解析:使用frommathimportcos后,可以直接使用cos()函数,不需要加math.前缀。3.使用frommathimport*导入模块后,以下说法正确的是(C)。A.这种导入方式不会导致命名冲突B.这是一种推荐的导入方式,方便快捷C.可以直接使用math中的所有函数和变量D.可以使用"math.成员名"方式导入math中的所有函数和变量解析:frommathimport*会导入math模块中的所有函数和变量,可以直接使用,但可能导致命名冲突,不推荐使用。4.以下关于自定义模块中类的定义规范,正确的是(A)。A.类名一般采用大写字母开头的驼峰命名法B.类中不需要定义__init__方法C.类的属性和方法可以随意命名,没有规范要求D.一个模块中只能定义一个类解析:Python中类名一般采用大写字母开头的驼峰命名法,如MyClass。5.运行d:\pt\sun\a.py程序时,sys模块的path变量的数据中一定存在的路径是(D)。A.d:\B.d:\ptC.d:\pt\sun\aD.d:\pt\sun解析:运行脚本时,sys.path会自动包含脚本所在目录的路径,即d:\pt\sun。6.以下关于文件夹中__init__.py文件的说法中,错误的是(C)。A.表明该文件夹是一个Python包(或库)B.可以在__init__.py文件中定义变量、函数和类C.__init__.py文件中一定包含__all__变量D.__init__.py文件可以为空文件解析:__init__.py文件可以包含__all__变量,但不是必须的,可以为空文件。7.执行os.listdir("D:\\datas")的作用是(B)。A.设置当前工作路径为D:\datasB.列出D:\datas的全部文件和文件夹C.删除D:\datas文件夹D.创建D:\datas文件夹解析:os.listdir()函数用于列出指定目录下的所有文件和文件夹。8.random模块中能够随机产生多个元素的函数是(A)。A.sampleB.randintC.uniformD.choice解析:random.sample()可以从序列中随机选取多个不重复的元素。9.如果任何Python脚本都能导入自定义模块,可以将其保存到(B)。A.任意一个临时文件夹B.Python第三方库安装目录C.电脑的桌面D.某个加密的文件夹解析:将自定义模块保存到Python第三方库安装目录(如site-packages)可以让任何脚本导入。10.安装第三方模块scipy的命令是(C)。A.installscipyB.condainstallscipyC.pipinstallscipyD.setupscipy解析:使用pipinstallscipy命令可以安装第三方模块scipy。二、编程题1.编写函数getdate(d,step=100),返回日期d第step天后的日期。其中d和函数值均为形如"2022-09-03"格式的日期字符串,step为整数。要求分别使用time模块和datetime模块实现。参考代码:#使用time模块importtimedefgetdate_time(d,step=100):t=time.strptime(d,"%Y-%m-%d")timestamp=time.mktime(t)+step*86400returntime.strftime("%Y-%m-%d",time.localtime(timestamp))#使用datetime模块fromdatetimeimportdatetime,timedeltadefgetdate_datetime(d,step=100):dt=datetime.strptime(d,"%Y-%m-%d")new_dt=dt+timedelta(days=step)returnnew_dt.strftime("%Y-%m-%d")2.编写函数replaces(s,data=1,operator="+"),将字符串s中的数值v替换为v与data的运算。其中参数operator指定运算符。如replace("abc34.5def7",2,"*")的值为"abc68def14"。要求利用re模块实现。参考代码:importredefreplaces(s,data=1,operator="+"):defrepl(match):num=float(match.group())ifoperator=="+":returnstr(num+data)elifoperator=="-":returnstr(num-data)elifoperator=="*":returnstr(num*data)elifoperator=="/":returnstr(num/data)else:returnmatch.group()returnre.sub(r"\d+\.?\d*",repl,s)3.创建一个名为"myfuns"的Python包,要求:•包含newdates模块,将前面第1题、第5题中的函数写到该模块中,并且,其他脚本文件导入该模块后,可以调用datetime模块的全部成员。•包含newmath模块,将前面第2.3.4题中的函数写到该模块中,并且,其他脚本文件导入该模块后,可以调用math模块的全部成员。•包含__init__.py文件。在该文件中指定使用"frommyfunsimport*"导入该包时默认导入以下成员:pi、e、date.today、getdate、getnums、getfileinfs。myfuns/├──__init__.py├──newdates.py└──newmath.py参考代码:newdates.py模块:fromdatetimeimport*fromtimeimport*defgetdate(d,step=100):dt=datetime.strptime(d,"%Y-%m-%d")new_dt=dt+timedelta(days=step)returnnew_dt.strftime("%Y-%m-%d")defgetfileinfs(path):importosreturnos.listdir(path)newmath.py模块:frommathimport*defgetnums(s):importrereturnlist(map(float,re.findall(r"-?\d+\.?\d*",s)))defreplaces(s,data=1,operator="+"):defrepl(match):num=float(match.group())ifoperator=="+":returnstr(num+data)elifoperator=="-":returnstr(num-data)elifoperator=="*":returnstr(num*data)elifoperator=="/":returnstr(num/data)else:returnmatch.group()importrereturnre.sub(r"\d+\.?\d*",repl,s)__init__.py文件:from.newdatesimportgetdate,getfileinfsfrom.newmathimportgetnumsfrommathimportpi,efromdatetimeimporttoday__all__=['pi','e','today','getdate','getnums','getfileinfs']

文件一、单选题1.在Python中,使用open函数以"w"模式打开文件,如果文件不存在,会(B)。A.抛出异常B.创建文件C.不进行任何操作D.弹出保存对话框解析:在Python中,使用"w"模式打开文件时,如果文件不存在,会自动创建该文件。2.要读取文件的全部内容,应使用的方法是(C)。A.readlineB.readlinesC.readD.write解析:read()方法可以一次性读取文件的全部内容,而readline()和readlines()分别读取一行和多行。3.当使用open函数以'a'模式打开文件时,以下描述正确的是(C)。A.只能读取文件B.清空文件内容C.在文件尾追加内容D.数据加到文件头解析:'a'模式表示追加模式,新写入的内容会添加到文件末尾。4.以二进制写入模式打开文件的是(D)。A.'r'B.'w'C.'rb'D.'wb'解析:'wb'表示以二进制写入模式打开文件,'rb'是二进制读取模式。5.readline方法的作用是(B)A.读取文件所有行B.读取文件下一行C.读取文件第一行D.读取文件最后一行解析:readline()方法每次调用会读取文件的下一行。6.使用reader(file)函数可以读取CSV文件中的数据,其中参数file是(C)。A.文件名称(含路径)B.文件名称(不含路径)C.以"r"模式打开的文件对象D.以"w"模式打开的文件对象解析:reader()函数需要传入一个已打开的文件对象,通常是以"r"模式打开的。7.为了正确处理文本的换行符,在打开CSV文件时,需将参数newline设置为(A)。A.空字符B.空格C."\n"D."\r\n"解析:将newline设置为空字符可以确保CSV文件中的换行符被正确处理。8.使用openpyxl库以只写模式创建Workbook对象时包含的工作表数目是(B)。A.0B.1C.2D.无法确定解析:使用openpyxl创建新的Workbook对象时,默认包含一个工作表。9.使用openpyxl库以只读模式创建Workbook对象时工作表的对象类型是(C)。A.WorksheetB.ReadWorksheetC.ReadOnlyWorksheetD.WriteWorksheet解析:在只读模式下,工作表对象的类型是ReadOnlyWorksheet。10.使用openpyxl库以只读模式创建Workbook对象wb后,不可能创建工作表对象的是(C)。A.st=wb.activeB.st=wb[0]C.st=wb["infs"]D.wb.worksheets[0]解析:在只读模式下,不能通过工作表名称创建工作表对象。二、编程题1.编写一个加密小程序,要求:•提供启动菜单:***********************************1-加密2-解密3-退出***********************************•"加密"功能:输入任意文件名,对文件进行加密处理。•"解密"功能:输入使用以上加密方法加密后的文件名,完成解密后调用Windows的默认程序打开该文件。参考代码:importosimportsubprocessdefencrypt_file(filename):withopen(filename,'rb')asfile:data=file.read()encrypted_data=bytes([byte^0x55forbyteindata])withopen(filename+'.enc','wb')asfile:file.write(encrypted_data)print(f"文件{filename}已加密为{filename}.enc")defdecrypt_file(filename):withopen(filename,'rb')asfile:encrypted_data=file.read()decrypted_data=bytes([byte^0x55forbyteinencrypted_data])decrypted_filename=filename[:-4]iffilename.endswith('.enc')elsefilename+'.dec'withopen(decrypted_filename,'wb')asfile:file.write(decrypted_data)print(f"文件{filename}已解密为{decrypted_filename}")try:os.startfile(decrypted_filename)except:print("无法自动打开文件,请手动打开")defmain():whileTrue:print("***********************************")print("1-加密2-解密3-退出")print("***********************************")choice=input("请选择操作:")ifchoice=='1':filename=input("请输入要加密的文件名:")ifos.path.exists(filename):encrypt_file(filename)else:print("文件不存在!")elifchoice=='2':filename=input("请输入要解密的文件名:")ifos.path.exists(filename):decrypt_file(filename)else:print("文件不存在!")elifchoice=='3':breakelse:print("无效的选择!")if__name__=="__main__":main()2.将表7.4的数据(不含总分列和平均值行)分别保存到CSV文件、SQLite数据库文件和EXCEL工作薄中,实现数据的读取并输出每个学生的总分和每门课程的平均值。参考代码:importcsvimportsqlite3fromopenpyxlimportWorkbook#示例数据data=[["姓名","语文","数学","英语"],["张三",85,90,88],["李四",78,85,92],["王五",92,88,85]]#保存到CSV文件withopen('students.csv','w',newline='',encoding='utf-8')asfile:writer=csv.writer(file)writer.writerows(data)#保存到SQLite数据库conn=sqlite3.connect('students.db')cursor=conn.cursor()cursor.execute('''CREATETABLEIFNOTEXISTSstudents(姓名TEXT,语文INTEGER,数学INTEGER,英语INTEGER)''')forrowindata[1:]:cursor.execute("INSERTINTOstudentsVALUES(?,?,?,?)",row)mit()#保存到Excel文件wb=Workbook()ws=wb.activeforrowindata:ws.append(row)wb.save('students.xlsx')#从CSV文件读取并计算withopen('students.csv','r',encoding='utf-8')asfile:reader=csv.reader(file)header=next(reader)students=list(reader)print("\n从CSV文件读取:")forstudentinstudents:total=sum(int(score)forscoreinstudent[1:])print(f"{student[0]}的总分:{total}")foriinrange(1,len(header)):avg=sum(int(student[i])forstudentinstudents)/len(students)print(f"{header[i]}的平均分:{avg:.1f}")#从SQLite数据库读取并计算cursor.execute("SELECT*FROMstudents")students=cursor.fetchall()print("\n从数据库读取:")forstudentinstudents:total=sum(student[1:])print(f"{student[0]}的总分:{total}")foriinrange(1,len(data[0])):cursor.execute(f"SELECTAVG({data[0][i]})FROMstudents")avg=cursor.fetchone()[0]print(f"{data[0][i]}的平均分:{avg:.1f}")conn.close()#从Excel文件读取并计算wb=Workbook()ws=wb.activewithopen('students.csv','r',encoding='utf-8')asfile:reader=csv.reader(file)forrowinreader:ws.append(row)wb.save('students.xlsx')print("\n从Excel文件读取:")wb=Workbook()ws=wb.activeforrowindata:ws.append(row)forrowinws.iter_rows(min_row=2,values_only=True):total=sum(row[1:])print(f"{row[0]}的总分:{total}")forcolinrange(2,ws.max_column+1):scores=[cell.valueforcellinws[col][1:ws.max_row]]avg=sum(scores)/len(scores)print(f"{ws.cell(row=1,column=col).value}的平均分:{avg:.1f}")

爬虫一、单选题1.以下哪个库是Python中常用的HTTP请求库是(B)。A.BeautifulSoupB.requestsC.lxmlD.selenium解析:requests是Python中最常用的HTTP请求库,用于发送各种HTTP请求。2.使用requests发送GET请求时,传递相关数据的参数是(C)。A.dataB.jsonC.paramsD.headers解析:在GET请求中,使用params参数传递查询参数,数据会附加在URL后面。3.以下哪个方法可以用来解析HTML并提取数据的方法是(B)。A.requests.get()B.BeautifulSoup(response.text,"lxml")C.driver.get(url)D.time.sleep(5)解析:BeautifulSoup是专门用于解析HTML和XML的库,可以方便地提取数据。4.在Selenium中,无头模式的目的是(B)。A.提高网页加载速度B.隐藏浏览器界面,后台运行C.避免反爬机制检测D.自动填写表单数据解析:无头模式(Headless)可以让浏览器在后台运行,不显示图形界面。5.使用lxml解析HTML时,将字符串转换为可查询的树结构的函数是(A)。A.etree.HTML()B.etree.parse()C.etree.tostring()D.etree.xpath()解析:etree.HTML()可以将HTML字符串转换为可查询的树结构。6.表示请求成功HTTP的状态码是(C)。A.404B.500C.200D.403解析:HTTP状态码200表示请求成功,404表示未找到,500表示服务器错误,403表示禁止访问。7.在爬取动态网页时,requests.get()可能失败的原因是(A)。A.网页内容由JavaScript动态生成B.缺少请求头C.URL拼写错误D.网络连接超时解析:requests.get()只能获取静态HTML,无法执行JavaScript,因此可能无法获取动态生成的内容。8.可以匹配所有class属性包含"item"的<div>元素的表达式是(B)。A.//div[@class="item"]B.//div[contains(@class,"item")]C./div[@class="item"]D.//div[starts-with(@class,"item")]解析:contains(@class,"item")可以匹配class属性中包含"item"的元素。9.在requests中,能够处理超时错误的是(A)。A.使用try-except捕获requests.TimeoutB.设置timeout=NoneC.使用response.raise_for_status()D.添加time.sleep(10)解析:可以通过try-except捕获requests.Timeout异常来处理超时错误。10.在Selenium中,等待元素可点击的正确方法是(B)。A.WebDriverWait(driver,10).until(EC.presence_of_element_located())B.WebDriverWait(driver,10).until(EC.element_to_be_clickable())C.driver.find_element(By.ID,"btn").click()D.time.sleep(5)解析:EC.element_to_be_clickable()专门用于等待元素可点击。二、编程题1.编写一个爬虫程序,利用requests库的GET请求访问豆瓣网首页(),并输出返回的HTML数据中所有标签<a>的内容。参考代码:importrequestsfrombs4importBeautifulSoupurl=""headers={"User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/91.0.4472.124Safari/537.36"}response=requests.get(url,headers=headers)soup=BeautifulSoup(response.text,"lxml")links=soup.find_all("a")forlinkinlinks:print(link.text.strip())2.编写一个简单的API接口,要求:•输入":5000"打开首页•输入":5000/users"查看用户信息•用户信息以JSON

温馨提示

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

评论

0/150

提交评论