第5章 函数设计与使用
5.1 运行5.3.1小节最后的示例代码,查看结果并分析原因。
答:原因是对于函数的默认值参数只会被处理一次,下次再调用函数并且不为默认值参数赋值时会继续使用上一次的结果,对于列表这样的结构,如果调用函数时为默认值参数的列表插入或删除了元素,将会得到保留,从而影响下一次调用。
5.2 编写函数,判断一个整数是否为素数,并编写主程序调用该函数。
答:这里给出Python 3.4.2代码,如果使用Python 2.7.8的话只需要修改其中的print()函数为print语句即可。 import math def IsPrime(v):
n = int(math.sqrt(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))
5.3 编写函数,接收一个字符串,分别统计大写字母、小写字母、数字、其他字符的个数,并以元组的形式返回结果。
答:这里给出Python 3.4.2代码,如果使用Python 2.7.8的话只需要修改其中的print()函数为print语句即可。
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))
5.4 在Python程序中,局部变量会隐藏同名的全局变量吗?请编写代码进行验证。 答案:会。 >>> def demo(): a=3 print a >>> a=5 >>> demo() 3 >>> a 5
5.5 编写函数,可以接收任意多个整数并输出其中的最大值和所有整数之和。 答:这里给出Python 3.4.2代码,如果使用Python 2.7.8的话只需要修改其中的print()函数为print语句即可。 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)
5.6 编写函数,模拟内置函数sum()。
答:这里给出Python 3.4.2代码,如果使用Python 2.7.8的话只需要修改其中的print()函数为print语句即可。 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))
5.7 编写函数,模拟内置函数sorted()。
答:这里给出Python 3.4.2代码,如果使用Python 2.7.8的话只需要修改其中的print()函数为print语句即可。 def Sorted(v): t = v[::] r = [] while t:
tt = min(t) r.append(tt) t.remove(tt) return r
x = [1,3,5,2,1,0,9,7] print(x)
print(Sorted(x))
第6章 面向对象程序设计
6.1 继承6.5节例2中的Person类生成Student类,填写新的函数用来设置学生专业,然后生成该类对象并显示信息。
答:Python 3.4.2代码为
import types
class Person(object): #基类必须继承于object,否则在派生类中将无法使用super()函数 def __init__(self, name = '', age = 20, sex = 'man'): self.setName(name) self.setAge(age) self.setSex(sex) def setName(self, name):
if not isinstance(name,str):
print('name must be string.') return
self.__name = name def setAge(self, age):
if not isinstance(age,int):
print('age must be integer.') return
self.__age = age def setSex(self, sex):
if sex != 'man' and sex != 'woman':
print('sex must be \ return
self.__sex = sex def show(self):
print(self.__name) print(self.__age) print(self.__sex) class Student(Person):
def __init__(self, name='', age = 30, sex = 'man', major = 'Computer'): #调用基类构造方法初始化基类的私有数据成员 super(Student, self).__init__(name, age, sex)
self.setMajor(major) #初始化派生类的数据成员 def setMajor(self, major):
if not isinstance(major, str):
print('major must be a string.') return
self.__major = major def show(self):
super(Student, self).show()