第5章 函数设计与使用
答:原因是对于函数的默认值参数只会被处理一次,下次再调用函数并且不为默认值参数赋值时会继续使用上一次的结果,对于列表这样的结构,如果调用函数时为默认值参数的列表插入或删除了元素,将会得到保留,从而影响下一次调用。
编写函数,判断一个整数是否为素数,并编写主程序调用该函数。 import math def IsPrime(v): n = int(v)+1)
for i in range(2,n): if v%i==0: return 'No' else:
return 'Yes' print(IsPrime(37)) print(IsPrime(60)) print(IsPrime(113))
编写函数,接收一个字符串,分别统计大写字母、小写字母、数字、其他字符的个数,并以元组的形式返回结果。 def demo(v):
capital = little = digit = other =0 for i in v:
if 'A'<=i<='Z': capital+=1 elif 'a'<=i<='z': little+=1 elif '0'<=i<='9': digit+=1 else:
other+=1
return (capital,little,digit,other) x = 'capital = little = digit = other =0' print(demo(x))
在Python程序中,局部变量会隐藏同名的全局变量吗?请编写代码进行验证。 答案:会。 >>> def demo(): a=3 print a
>>> a=5 >>> demo() 3 >>> a 5
编写函数,可以接收任意多个整数并输出其中的最大值和所有整数之和。 def demo(*v): print(v)
print(max(v)) print(sum(v)) demo(1,2,3) demo(1,2,3,4) demo(1,2,3,4,5)
编写函数,模拟内置函数sum()。 def Sum(v): s = 0 for i in v: s += i return s x = [1,2,3,4,5] print(Sum(x)) x = (1,2,3,4,5) print(Sum(x))
编写函数,模拟内置函数sorted()。 def Sorted(v): t = v[::] r = [] while t:
tt = min(t) (tt) (tt) return r
x = [1,3,5,2,1,0,9,7] print(x)
print(Sorted(x))
第6章 面向对象程序设计
继承节例2中的Person类生成Student类,填写新的函数用来设置学生专业,然后生成该类对象并显示信息。
import types
class Person(object): #基类必须继承于object,否则在派生类中将无法使用super()函数 def __init__(self, name = '', age = 20, sex = 'man'): (name) (age) (sex)
def setName(self, name):
if not isinstance(name,str):
print('name must be string.') return = name
def setAge(self, age):
if not isinstance(age,int):
print('age must be integer.') return = age
def setSex(self, sex):
if sex != 'man' and sex != 'woman':
print('sex must be \ return = sex def show(self): print print print
class Student(Person):
def __init__(self, name='', age = 30, sex = 'man', major = 'Computer'): #调用基类构造方法初始化基类的私有数据成员 super(Student, self).__init__(name, age, sex) (major) #初始化派生类的数据成员 def setMajor(self, major):
if not isinstance(major, str):
print('major must be a string.') return = major def show(self):
super(Student, self).show() print
if __name__ =='__main__':
zhangsan = Person('Zhang San', 19, 'man') ()
lisi = Student('Li Si',32, 'man', 'Math') ()
设计一个三维向量类,并实现向量的加法、减法以及向量与标量的乘法和除法运算。 class Vecter3:
def __init__(self, x=0, y=0, z=0): = x = y = z
def __add__(self, n): r = Vecter3() = + = + = + return r
def __sub__(self, n): r = Vecter3() = - = - = - return r
def __mul__(self, n): r = Vecter3() = * n = * n = * n return r
def __truediv__(self, n): r = Vecter3() = / n = / n = / n return r
def __floordiv__(self, n): r = Vecter3()
= 类名__xxx”这样的特殊方式来访问。Python中没有纯粹的C++意义上的私有成员。
与运算符“**”对应的特殊方法名为 __pow__() ,与运算符“.except...else...语句。 3)在实际开发中,同一段代码可能会抛出多个异常,需要针对不同的异常类型进行相应的处理。为了支持多个异常的捕捉和处理,Python提供了带有多个except的异常处理结
构,这类似于多分支选择结构,一旦某个except捕获了异常,则后面剩余的except子句将不会再执行。语法为: try: try块 except Exception1: except块1 except Exception2: except块2
#被监控的语句
#处理异常1的语句 #处理异常2的语句
4)将要捕获的异常写在一个元组中,可以使用一个except语句捕获多个异常,并且共用同一段异常处理代码,当然,除非确定要捕获的多个异常可以使用同一段代码来处理,并不建议这样做。
5)最后一种常用的异常处理结构是try...except...finally...结构。在该结构中,finally子句中的内存无论是否发生异常都会执行,常用来做一些清理工作以释放try子句中申请的资源。语法如下: try: …… finally:
......
#无论如何都会执行的代码
异常和错误有什么区别? 答:
异常是指因为程序执行过程中出错而在正常控制流以外采取的行为。严格来说,语法错误和逻辑错误不属于异常,但有些语法错误往往会导致异常,例如由于大小写拼写错误而访问不存在的对象,或者试图访问不存在的文件,等等。
使用pdb模块进行Python程序调试主要有哪几种用法? 答:主要有三种方式,
1)在交互模式下使用pdb模块提供的功能可以直接调试语句块、表达式、函数等多种脚本。
2)在程序中嵌入断点来实现调试功能
在程序中首先导入pdb模块,然后使用()在需要的位置设置断点。如果程序中存在通过该方法调用显式插入的断点,那么在命令提示符环境下执行该程序或双击执行程序时将自动打开pdb调试环境,即使该程序当前不处于调试状态。