PYTHON核心编程第二版课后题答案第八章
- 格式:pdf
- 大小:98.05 KB
- 文档页数:5
【02】Python核⼼编程(全)⼀、浅拷贝和深拷贝1.浅拷贝 是对于⼀个对象的顶层拷贝,通俗的理解是:拷贝了引⽤,并没有拷贝内容。
相当于把变量⾥⾯指向的⼀个地址给了另⼀个变量就是浅拷贝,⽽没有创建⼀个新的对象,如a=b。
2.深拷贝 ⾸先要import copy,然后c = copy.deepcopy(a),就表⽰把a的内容深拷贝到c中,如果发现了a中也存在引⽤的内容,则递归拷贝,也就是把当前的这个引⽤的对象继续深拷贝。
3. copy和deepcopy的区别 ①copy:浅拷贝,⾥⾯如果有可变类型,修改这个可变类型(如list),被拷贝的对象也会相应改变,仅仅拷第⼀层,如果是不可变类型,就⼀层都不拷,如果是可变类型就拷⼀层。
②deepcopy:深拷贝,⾥⾯不管是可变类型和不可变类型,被拷贝的对象都不会受到影响,递归拷贝。
4.copy和deepcopy拷贝元组的特点 使⽤copy模块的copy功能的时候,它会根据当前拷贝的数据类型是可变类型还是不可变类型有不同的处理⽅式,如元组是不可变类型,拷贝多份没有⽤,对copy来说,如果是可变类型就拷⼀层,如果是不可变类型,就⼀层都不拷。
⼆、属性property1.属性property-1 ①私有属性添加getter和setter⽅法 ②使⽤property升级getter和setter⽅法num = property(getNum,setNum) 注意: Num到底是调⽤getNum()还是setNum(),要根据实际的场景来判断,值得注意的是⼀定要先填getNum后setNum。
如果是给t.num赋值,那么⼀定调⽤setNum()。
如果是获取t.num的值,那么就⼀定调⽤getNum()。
property的作⽤:相当于把⽅法进⾏了封装,开发者在对属性设置数据的时候更⽅便。
2.属性property-2class Money(object):@property #修饰器def num(self):print("------getter-----")return self.__num@num.setter #修饰器def num(self,new_num):print("------setter------")self.__num = new_numt.num = 20print(t.num)三、迭代器1.迭代器 迭代是访问集合元素的⼀种⽅式。
《Python语言程序设计基础》第二版嵩天第二章程序练习题答案第一题:```python# 1. 编写一个程序,要求用户输入一个整数并输出它的平方值。
num = int(input("请输入一个整数:"))square = num ** 2print("该整数的平方值为:", square)```第二题:```python# 2. 编写一个程序,要求用户输入一个浮点数并输出它的绝对值。
num = float(input("请输入一个浮点数:"))absolute_value = abs(num)print("该浮点数的绝对值为:", absolute_value)```第三题:```python# 3. 编写一个程序,要求用户输入一个1到100之间的整数,并判断该数是奇数还是偶数。
num = int(input("请输入一个1到100之间的整数:"))if num % 2 == 0:print("该整数为偶数。
")else:print("该整数为奇数。
")```第四题:```python# 4. 编写一个程序,要求用户输入一个年份,并判断该年份是否为闰年。
year = int(input("请输入一个年份:"))if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:print("该年份是闰年。
")else:print("该年份不是闰年。
")```第五题:# 5. 编写一个程序,要求用户输入一个三位数,并将其倒序输出。
num = int(input("请输入一个三位数:"))reverse_num = int(str(num)[::-1])print("倒序输出的结果为:", reverse_num)```第六题:```python# 6. 编写一个程序,要求用户输入一个四位数,并将其每一位数倒序输出。
python二级考试题库8答案1. 题目:请写出Python中定义函数的语法。
答案:在Python中定义函数,可以使用`def`关键字,后跟函数名和括号内的参数列表,然后是冒号,最后是函数体,如下所示:```pythondef function_name(parameters):# 函数体```2. 题目:如何使用Python中的列表推导式来创建一个包含0到9的数字列表?答案:列表推导式是一种简洁的构建列表的方法,可以这样使用:```pythonnumbers = [i for i in range(10)]```3. 题目:解释Python中的异常处理机制。
答案:Python中的异常处理机制使用`try`和`except`关键字。
`try`块包含可能会引发异常的代码,`except`块则包含异常发生时执行的代码。
还可以使用`finally`块来执行无论是否发生异常都需要执行的代码。
4. 题目:请写出Python中如何实现继承。
答案:在Python中,子类可以通过在括号内指定父类名来实现继承。
例如:```pythonclass ParentClass:passclass ChildClass(ParentClass):pass```5. 题目:如何在Python中实现多态?答案:多态是指允许不同类的对象对同一消息做出响应的能力。
在Python中,多态可以通过定义具有相同名称的方法来实现,不同的对象可以有不同的方法实现。
6. 题目:解释Python中的垃圾回收机制。
答案:Python使用引用计数和标记-清除机制来管理内存。
引用计数是自动的,当一个对象的引用计数达到零时,它会被垃圾回收器回收。
标记-清除机制用于处理循环引用的情况。
7. 题目:如何在Python中使用装饰器?答案:装饰器是一种设计模式,用于在不修改类定义的情况下增加类的功能。
装饰器本质上是一个函数,它接受一个函数作为参数并返回一个函数。
大学《Python程序设计》试题及答案大学《Python程序设计》试题及答案一、选择题1、在Python中,以下哪个选项可以正确表示小于等于操作符? A) <=B) <* C) .≤ D) 以上都不是答案:A) <=2、下列哪个模块可用于绘制图形? A) math B) plot C) canvas D) none of the above 答案:C) canvas3、在Python中,如何将字符串转换为整数? A) str() B) int() C) float() D) 以上都不是答案:B) int()4、若要打印出所有的素数,以下哪个循环结构可以实现? A) whileB) for C) do-while D) switch-case 答案:B) for5、以下哪个选项可以用于导入模块? A) import math as m B) include math as m C) #include <math.h> D) #import <math.h> 答案:A) import math as m二、填空题1、Python中的注释符号是_____。
答案:#2、在Python中,所有变量都必须具有_____。
答案:类型(types)3、Python中的逻辑运算符用于执行_____运算。
答案:逻辑(logical)4、以下哪个函数可以用于将字符串转换为浮点数? A) str() B) int() C) float() D) none of the above 答案:C) float()5、以下哪个循环结构可以用于打印出所有的偶数? A) for i in range(0, 10): print(i2) B) for i in range(0, 10): if i % 2 == 0: print(i2) C) for i in range(0, 10): if i % 2 != 0: print(i2) D) none of the above 答案:B) for i in range(0, 10): if i % 2 == 0: print(i2)三、编程题编写一个Python程序,打印出所有的水仙花数(Narcissistic Number)。
PYTHON核心编程第二版习题解答及执行结果第二章PY3.4实现第二章习题解答2-4>>>num=input("please input a number:") please input a number:>>>num=int(input("please input a number:")) please input a number:2502-5(a)>>>i=0>>>while i<11:print(i)i+=11...(b)>>>i=0>>>for i in range(11):print(i)i+=11...2-6>>>num=int(input("please input a num:")) please input a num:366>>>if num<0:print('fushu')elif num>0:print('zheshu')else:print('zero')zheshu2-7>>>s=input('enter a string:') >>>for eachchar in s:print(eachchar)Field>>>for i in range(len(s)): print(i,s[i])0F1i2e3l4d>>>for i,x in enumerate(s): print(i,x)0F1i2e3l4d2-8>>>r=0>>>for i in range(5):r+=int(input('enter a num:'))enter a num:44enter a num:48enter a num:5563618enter a num:44662##uses sum()BIF and generator expressions>>>print(sum(int(input('please input a num:'))for i in range(5))) please input a num:2please input a num:2please input a num:2please input a num:2please input a num:210>>>2-10>>>while True:num=int(input("please input a num:(1-100)"))if num in range(101):print('corect')breakelse:print('error,try again!')please input a num:(1-100)122error,try again!please input a num:(1-100)12-15>>>num1=int(input("please input first number:")) please input first number:12>>>num2=int(input("please input2rd number:")) please input2rd number:5>>>num3=int(input("please input3st number:")) please input3st number:55>>>if num1>num2:num1,num2=num2,num1>>>if num1>num3:num1,num3=num3,num1>>>if num1>num3:num1,num3=num3,num1>>>print(num1,num2,num3)51255>>>print(num3,num2,num1)55125>>>makeT extFile.py#!/usr/bin/env/pythonprint('jhjjjjj')print('DONE'),附:第三四章例题执行结果及源码#例3.1#!/usr/bin/env python'makeTextFile.py--create text file'import os#get filenamewhile True:fname=input('Enter file name:')if os.path.exists(fname):#os.path.exists()函数:确认输入的文件名是否存在print("***ERROR:'%s'already exists"%fname)else:break#get file content(text)linesall=[]print("\nEnter lines('.'by itself to quit).\n")#loop until user terminates inputwhile True:entry=input('>')if entry=='.':breakelse:all.append(entry)#write lines to file with NEWLINE line terminatorfobj=open(fname,'w')#打开文件准备进行写操作fobj.write('\n'.join(all))#将内存中内容逐行写入文件fobj.close()#print('DONE!')'''#例3.2#!/usr/bin/env python'readTextFile.py--read and display text file'#get filenamefname=input('Enter file name:')print()#attempt to open file for readingtry:fobj=open(fname,'r')except IOError as e:#py3修改,旧版本为except IOError,e: print("***file open error:",e)else:#display contents to the screenfor eachLine in fobj:print(eachLine),fobj.close()#例4.1def displayNumType(num):print(num,'is',)if isinstance(num,(int,float,complex)):#isinstance()判断对象类型print('a number of type:',type(num).__name__)else:print('not a number at all!!')displayNumType(-69)displayNumType(9999999999999999999999)displayNumType(98.6)displayNumType(-5.2+1.9j)displayNumType('xxx')#v3.0后,确切的讲,int型(依赖运行环境C编译器中long型的精度)消失了,long 型替代int型,成为新的、不依赖运行环境的、无精度限制的(只要内存装得下)int型。
python二级考试题库8答案1. 单选题:以下哪个选项是Python中用于定义类的关键字?A. classB. functionC. defineD. struct答案:A2. 多选题:Python中支持哪些类型的数据结构?A. 列表B. 元组C. 字典D. 集合答案:A, B, C, D3. 判断题:Python中的列表和元组都是可变数据类型。
A. 正确B. 错误答案:B4. 填空题:在Python中,使用____运算符可以连接字符串。
答案:+5. 简答题:解释Python中的GIL(全局解释器锁)是什么,并说明其对多线程程序的影响。
答案:GIL(全局解释器锁)是Python解释器中的一个机制,它确保在任何时刻只有一个线程执行Python字节码。
这意味着即使在多核处理器上,Python程序也不能利用多核并行执行。
因此,在CPU密集型的多线程程序中,GIL限制了程序的性能,因为它阻止了线程同时执行,导致多线程程序可能无法充分利用多核处理器的优势。
6. 编程题:编写一个Python函数,该函数接受一个整数列表作为参数,并返回列表中所有偶数的和。
```pythondef sum_even_numbers(numbers):return sum(num for num in numbers if num % 2 == 0)# 示例print(sum_even_numbers([1, 2, 3, 4, 5, 6])) # 输出应为 2 + 4 + 6 = 12```7. 单选题:以下哪个选项是Python中用于异常处理的关键字?A. tryB. catchC. exceptD. all of the above答案:D8. 多选题:Python中哪些模块可以用来处理日期和时间?A. datetimeB. timeC. calendarD. dateutil答案:A, B, C, D9. 判断题:Python中的装饰器是一种特殊的函数,它可以用来修改其他函数的行为。
python二级考试题库8答案1. 以下哪个选项是Python中的合法变量名?A. 2variableB. variable-nameC. variable$nameD. variable name答案:B2. Python中,以下哪个数据类型是不可变的?A. 列表B. 字典C. 元组D. 字符串答案:C3. 在Python中,如何实现字符串的反转?A. 使用reverse()方法B. 使用split()方法C. 使用join()方法D. 使用切片操作答案:D4. Python中,以下哪个关键字用于定义类?A. classB. functionC. defD. struct答案:A5. 在Python中,以下哪个函数用于计算一个数的平方根?A. sqrt()B. square()C. root()D. power()答案:A6. Python中,以下哪个模块提供了日期和时间的功能?A. datetimeB. timeC. dateD. calendar答案:A7. 在Python中,以下哪个操作符用于成员检查?A. inB. not inC. isD. not答案:A8. Python中,以下哪个函数用于将字符串转换为浮点数?A. int()B. float()C. str()D. bool()答案:B9. 在Python中,以下哪个语句用于循环遍历列表中的每个元素?A. for element in listB. while element in listC. for list in elementD. while list in element答案:A10. Python中,以下哪个关键字用于定义函数?A. defB. functionC. classD. struct答案:A。
9–1. 文件过滤. 显示一个文件的所有行, 忽略以井号( # )开头的行. 这个字符被用做Python , Perl, Tcl, 等大多脚本文件的注释符号.附加题: 处理不是第一个字符开头的注释. 答案:f = open('test1.txt','r')for eachline in f:if eachline[0] == '#':continueelif '#' in eachline:loc = eachline.find('#')print eachline[:loc]else:print eachline,9–2. 文件访问. 提示输入数字N 和文件F, 然后显示文件F 的前N 行.答案:N = int(raw_input('Enter a number: '))f = raw_input('Enter filename :')f1 = open(f,'r')allline = f1.readlines()f1.close()for i in range(N):print allline[i],9–3. 文件信息. 提示输入一个文件名, 然后显示这个文本文件的总行数.答案:f = raw_input('Enter filename :')f1 = open(f,'r')sum = 0for i in f1:sum += 1print sumf = raw_input('Enter filename :')f1 = open(f,'r')sum = 0for i in f1:sum += 1print sum方法二:f = raw_input('Enter filename :')f1 = open(f,'r')allline = f1.readlines()f1.close()print len(allline)9–4. 文件访问. 写一个逐页显示文本文件的程序. 提示输入一个文件名, 每次显示文本文件的25 行, 暂停并向用户提示"按任意键继续.", 按键后继续执行.答案:f = raw_input('Enter filename :')f1 = open(f,'r')allline = f1.readlines()f1.close()sum = 0for i in allline:print i,sum += 1if sum == 25:a = raw_input("press any key to continue:")sum = 0方法二import osF=raw_input('pls input a file name:')n=0f=open(F,'r')for i in f:print i,n+=1if n==25:n=0os.system('pause')f.close()9-5 考试成绩,改进你的考试成绩问题(练习5-3和6-4),要求能从多个文件中读入考试成绩。
9.11 练习9–1. 文件过滤. 显示一个文件的所有行, 忽略以井号( # )开头的行. 这个字符被用做Python , Perl, Tcl, 等大多脚本文件的注释符号.附加题: 处理不是第一个字符开头的注释.9–2. 文件访问. 提示输入数字N 和文件F, 然后显示文件F 的前N 行.9–3. 文件信息. 提示输入一个文件名, 然后显示这个文本文件的总行数.9–4. 文件访问. 写一个逐页显示文本文件的程序. 提示输入一个文件名, 每次显示文本文件的25 行, 暂停并向用户提示"按任意键继续.", 按键后继续执行.9–6. 文件比较. 写一个比较两个文本文件的程序. 如果不同, 给出第一个不同处的行号和列号.9–7. 解析文件. Win32 用户: 创建一个用来解析Windows .ini 文件的程序.这道题我没看懂,如何解析???9–9. Python 文档字符串. 进入Python 标准库所在的目录. 检查每个 .py 文件看是否有__doc__ 字符串, 如果有, 对其格式进行适当的整理归类. 你的程序执行完毕后, 应该会生成一个漂亮的清单. 里边列出哪些模块有文档字符串, 以及文档字符串的内容. 清单最后附上那些没有文档字符串模块的名字.附加题: 提取标准库中各模块内全部类(class)和函数的文档.这道题忽悠了我一个晚上。
第一:根本就不存在__doc__的字符串,当我们运行模块.__doc__的时候,实际上是读取开头的字符串。
所以我们要判断是开头是否存在“”“字符串”“”这样的格式。
程序如下:最近还花了点时间学习wxpython,专门用来对付习题9-10,9-11这种图形界面的设计,但是发现学习的蛋疼,可能我这人不太喜欢用UI这些东西吧。
所以,习题9-10,9-11,9-12就不做了。
9–13. 命令行参数a) 什么是命令行参数, 它们有什么用?b) 写一个程序, 打印出所有的命令行参数.a)跟随着命令写入的参数,主要用于linux下运行程序习题9-14程序输入输出:9–15. 复制文件. 提示输入两个文件名(或者使用命令行参数). 把第一个文件的内容复制到第二个文件中去.9–16. 文本处理. 人们输入的文字常常超过屏幕的最大宽度. 编写一个程序, 在一个文本文件中查找长度大于80 个字符的文本行. 从最接近80 个字符的单词断行, 把剩余文件插入到下一行处.程序执行完毕后, 应该没有超过80 个字符的文本行了.9–17. 文本处理. 创建一个原始的文本文件编辑器. 你的程序应该是菜单驱动的, 有如下这些选项:1) 创建文件(提示输入文件名和任意行的文本输入),2) 显示文件(把文件的内容显示到屏幕),3) 编辑文件(提示输入要修改的行, 然后让用户进行修改),4) 保存文件, 以及5) 退出.9–18. 搜索文件. 提示输入一个字节值(0 - 255)和一个文件名. 显示该字符在文件中出现的次数.9–19. 创建文件. 创建前一个问题的辅助程序. 创建一个随机字节的二进制数据文件, 但某一特定字节会在文件中出现指定的次数. 该程序接受三个参数:1) 一个字节值( 0 - 255 ),2) 该字符在数据文件中出现的次数, 以及3) 数据文件的总字节长度.这道题很难。
defloop(f,t,i):
'''8-2输入3个数字,从f计数到t,i为步长'''
forninxrange(f,t+1,i):
printn,
defisprime(num):
'''8-4输入数字,返回是否是素数'''
#素数表示只能被1和本身整除的数,所以在count>1的情况下如果都无法除尽,
那么就是素数
#count为什么要num/2呢?
#因为2是最小的偶数,获得的值就是num的最大可能被除的数,
#num不可能被一个比2
更小的整数除,
#因为如果是1,那么就反应不出(素数也可以被1整除),而如果大于2则是无不能
确定,如果是3,而输入是4,无疑效率会变得更低?
#更容易理解的是1
的时候是
不可能被除尽的,这些循环是多余的
count=num/2
whilecount>1:
ifnum%count==0:
returnFalse
count-=1
returnTrue
defgetfactors(num,addself=True):
'''8-5返回数所有的约数,包括1和它本身'''
#addself
表示,约数中是否包含它本身
count=num/2
factors=[]
ifaddself:factors=[num]
whilecount:
ifnotnum%count:
factors.append(count),
count-=1
returnfactors
defprimesplit(num):
'''8-6素因子分解'''
#所谓素因子分解就是将num分解成几个素数相乘
#我们要求的就是哪几个素数乘积为num
,显示这几个素数
#比如num=20返回[2,2,5]
#分析首先,如果输入的num是素数,那么返回的就是1和它本身
#如果不是素数,那么获得他的约数,约数中2肯定是有的,关键是几个2
的问题
咯?
#这里会用到上面的isprime和getfactors函数
re=[]
ifisprime(num):re=[1,num]
else:
#素数一定是从2
开始的
prime=2
count=num/2
#素数一定是小于num/2
的
whileprime
num/=prime
re.append(prime)
continue
prime+=1
returnre
defisperfect(num):
'''8-7全数就是他的约数之和为它本身,比如6的约数是1,2,31+2+3=6'''
ifisprime(num):return0
else:
ifsum(getfactors(num,False))==num:return1
return0
deffactorial(num,step=1):
'''8-8阶乘'''
#阶乘就是返回num!就是1到num所有数的乘积,例如6!1*2*3*4*5*6
#add表示的是阶层的步进,默认是1
#0的阶乘是1
#负数没有阶乘
#
小数没有阶乘
ifnotfloat(num).is_integer():returnFalse
ifnum<0:returnFalse
ifnum==0ornum==1:return1
else:
re=1
foriinxrange(1,num+1,step):
re*=i
returnre
deffibonacci(num):
'''8-9fibonacci数列,给定num返回第num个的值'''
#fibonacci数列形如1,1,2,3,5,8,13,21
#也就是说下一个值是数列前2个和
ifnum<1orint(num)!=num:returnFalse
ifnum==1:return1#第一个其实是没规律的,只返回一个1
,从第二个开始就是
0+1,1+1...
#分析:
#第0个是0
#第1个是1
#第二个是1+01
#第三个是1+12
#第四个是2+13
#第五个是2+355=3+2
#从这样看,其实第2个,应该是第三个,因为第0
个也是一个
#我在这里是这样分析的,既然要求第N个,我们知道N是N-1和N-2的和,那
么我们需要在运行中保存
#N-1和N-2这两个临时变量N-2我设为N1,N-1我设为N2
re=0#第0位是0
foriinxrange(num-1):
ifre==0:N1,N2=0,1
re=N1+N2
N1,N2=N2,re
returnre
defcounteng(string):
'''8-10统计一下一句话中元音,辅音,和单词的个数,忽略元音和辅音等特殊情况'''
#所谓特殊情况就是某些单词用元音开头,但是不发元音,有些单词辅音开头但是
发元音
#如果要处理这些特殊单词,那么需要有特殊单词表或者规律,这个我就不做了,
不难实现
#思路:匹配单词,如果符合特殊规则或者单词表,那么元音[辅音]数量相应减1
或
者加
1
#我这里只要处理a,e,i,o,u的个数即可
#所谓单词数,特别是英文中,比较容易,只要用空格分隔就可
words=len(string.split())
string=string.upper()#换成大写,方便一点
yuans=fus=0
#
统计元音数
foriinstring:
#只处理那啥字母,不处理特殊符号
#大写元音的ord是65,69,73,79,85
#大写字母即ord65-90
n=ord(i)
ifninxrange(65,91):
ifnin[65,69,73,79,85]:
yuans+=1
else:
fus+=1
return[yuans,fus,words]
definname():
'''8-11文本处理,输入英文名格式:LastName,Firstname
如果输入的格式是FirstnameLastName(也就是没有逗号)
那么互换位置,提示错误,记录错误数
输入完毕后,显示名字列表
'''
#分析,书中首先要求用户输入要输入名字的数量,这个不自然,我改成输入q则
退出
print'输入英文名字,格式如名,姓\n输入q则退出'
names=[]
error=0
whileTrue:
name=raw_input('请输入姓名:').strip().split(',')
ifname[0]=='':continue
iflen(name)==1:
ifname[0].lower()=='q':break
error+=1
print'格式错误...正确应该是名,姓\n你已经错了%d次。修复输入...\n'%error
name=name[0].split()
name=name[1]+','+name[0]
else:
name=name[0].strip()+','+name[1].strip()
names.append(name)
foriinnames:
printi
defout():
'''8-12输入整数1,整数2,显示一张表格,包括十进制,二进制,八进制,十六进
制和ASCII'''
#ASCII中0-32127这34
个是控制符,不用输出
#超过127的数字也不用输出,因为没有对应的ASCII
num1=int(raw_input('Enterbeginvalue:').strip())
num2=int(raw_input('Enterendvalue:').strip())
#这里的dl,bl,ol,hl,al表示每一列的宽度
dl,bl,ol,hl,al=\
len(str(num2))+5,len(bin(num2))+3,len(oct(num2))+4,len(hex(num2))+3,5
#输出标题,居中
print
'DEC'.center(dl),'BIN'.center(bl),'OCT'.center(ol),'HEX'.center(hl),'ASCII'.center(al)
#输出横线
print'-'*(sum([dl,bl,ol,hl,al])+5)
ascii=''
foriinxrange(num1,num2+1):
#Ascii只有在这个区间内才显示
if32print
str(i).center(dl),bin(i)[2:].center(bl),oct(i)[1:].center(ol),hex(i)[2:].center(hl),ascii.center(
al)
ascii=''