1、 关于python类 说法错误的是:
A 类的实例方法必须创建对象后才可以调用 B 类的实例方法必须创建对象前才可以调用 C 类的类方法可以用对象和类名来调用 D 类的静态属性可以用类名和对象来调用 答案:B
2、 如下类的定义,下列描述错误的是?
class A(object): pass class B(A): pass b=B()
A、 isinstance(b,A)==True
B、 isinstance(b,object)==True C、 issubclass(B,A)==True D、 issubclass(b,B)==True 答案:D
3、 定义类如下
class Hello():
def __init__(self,name) self.name=name
def showInfo(self) print(self.name) 下面代码能正常执行的:
A、 h = Hello h.showInfo() B、 h = Hello()
h.showInfo(‘张三’) C、 h = Hello(‘张三’) h.showInfo() D、 h = Hello(‘admin’)
showInfo 答案:C
4、 导入模块的方式错误的是:
A、 import mo B、 from mo import * C、 import mo as m D、 import m from mo
答案:D
5、 以下关于模块说法错误的是:
A、 一个xx.py就是一个模块
B、 任何一个普通的xx.py文件可以作为模块导入
C、 模块文件的扩展名不一定是 .py
D、 运行时会从制定的目录搜索导入的模块,如果没有,会报错异常 答案:C
6、 多重继承的执行顺序,请解答以下输出结果是什么?并解释。 class A(object): def __init__(self): print('A')
super(A, self).__init__() class B(object): def __init__(self): print('B')
super(B, self).__init__() class C(A): def __init__(self): print('C')
super(C, self).__init__() class D(A): def __init__(self): print('D')
super(D, self).__init__() class E(B, C): def __init__(self): print('E')
super(E, self).__init__() class F(C, B, D): def __init__(self): print('F')
super(F, self).__init__() class G(D, B): def __init__(self):
print('G')
super(G, self).__init__() g = G() f = F() 答案:
G D A B F C B D A
7、 编写程序,创建类Temperature,其包含成员变量degree(表示温度)以及实例方法
ToFahrenheit(将摄氏温度转换为华氏温度)和ToCelsius(将华氏温度转换为摄氏温度),其中,(华氏度-32)*5/9=摄氏度,摄氏度*9/5+32=华氏度
答案:
class Temperature:
def __init__(self, degree): self.degree = degree def toFahrenheit(self):
return self.degree*9/5 + 32 def toCelsius(self):
return (self.degree -32) * 5/9
n1 = float(input(\请输入摄氏温度:\t1 = Temperature(n1)
print(\摄氏温度 = {0:.2f}, 华氏温度 = {1:.2f}\n2 = float(input(\请输入华氏温度:\t2 = Temperature(n2)
print(\摄氏温度 = {0:.2f}, 华氏温度 = {1:.2f}\
8、 定义一个至少有两个方法的类: getString:从控制台输入获取字符
串 printString:打印输入字符串对应的大写形式。 答案:
class InputOutString(object): def __init__(self):
self.s = \
def getString(self):
print('请输入字符串:') self.s = input() def printString(self): print(self.s.upper())
strObj = InputOutString() strObj.getString() strObj.printString()
9、 定义一个学生Student类。有下面的类属性:1)姓名 name 2)年龄 age 3)成绩 score
(语文,数学,英语) [每课成绩的类型为整数]
类方法:1)获取学生的姓名:get_name() 2)获取学生的年龄:get_age() 3)返回3门科目中最高的分数。
写好类以后,可以定义2个同学测试下: zm = Student('zhangming',20,[69,88,100]) 返回结果: zhangming 20 100
答案:
class Student(): # 构造函数
# 对当前对象的实例的初始化 def __init__(self, name, age, score): self.name = name self.age = age self.score = score
def get_name(self): return self.name
def get_age(self): return self.age
def get_course(self): a = max(self.score) if isinstance(a, int): return a
zm = Student('zhangming', 20, [69, 88, 100])
print(zm.get_name()) print(zm.get_age()) print(zm.get_course())
10、 编程实现如下要求。
1)创建员工类Employee,属性有姓名name、能力值ability、年龄age(能力值为100-年龄),功能有doWork(),该方法执行一次,该员工的能力值-10。
2)创建老板类Boss,属性有金钱money,员工列表employeeList(存储员工类对象),工作量work,功能有雇佣员工addEmployee(),雇佣后将员工添加至列表中,雇佣一人money减5000,金额不足时不能雇佣新员工;开始工作startWork(),工作开始后,依次取出员工列表中的员工开始工作,员工能力值减少的同时总的工作量work也减少,当工作量work为0时,工作结束,如果所有员工使用完后,依然没有完成工作,则提示老板需要雇佣新员工,并打印剩余工作量
3)创建Boss类对象,默认执行雇佣3个员工,年龄分别为30,40,50,然后死循环开始工作,直至工作完成。
答案:
class Employee:
def __init__(self,name,age): self.name = name self.age = age
self.ability = 100-age def doWork(self):
if self.ability >=10:
print(self.name,\开始工作\ self.ability -= 10 return 5 else:
print(\员工需要休息\ return 0 class Boss:
def __init__(self,money,work): self.money = money self.work = work self.employeeList =[]
def addEmployee(self,employee): if self.money >= 5000:
self.employeeList.append(employee) self.money -= 5000 else:
print(\资金不足\
def startwork(self):
for employee in self.employeeList: if self.work == 0:
print(\工作完成\ break
while employee.ability != 0:
self.work -= employee.doWork() if self.work == 0:
print(\工作完成\ break if self.work != 0:
print(\工作未完成,请继续雇佣员工,剩余工作量为\
boss = Boss(1000000,100)
employee1 = Employee(\张三\employee2 = Employee(\李四\employee3 = Employee(\王五\boss.addEmployee(employee1) boss.addEmployee(employee2) boss.addEmployee(employee3)
boss.startwork() 11、 编程实现如下要求。
1)创建Person类,属性有姓名、年龄、性别,创建方法personInfo,打印这个人的信息
2)创建Student类,继承Person类,属性有学院college,班级class,重写父类personInfo方法,除调用父类方法打印个人信息外,将学生的学院、班级信息也打印出来。创建方法learn参数为Teacher对象,调用Teacher类的teach方法,接收老师教授的知识点,然后打印‘老师xxx,我终于学会了!’xxx为老师的teach方法返回的信息。
3)创建Teacher类,继承Person类,属性有学院college,专业professional,重写父类personInfo方法,除调用父类方法打印个人信息外,将老师的学院、专业信息也打印出来。创建teachObj方法,返回信息为‘今天讲了如何用面向对象设计程序’
4)创建三个学生对象,分别打印其详细信息 5)创建一个老师对象,打印其详细信息 6)学生对象调用learn方法
答案:
class Person:
def __init__(self,name,age,sex): self.name = name self.age = age self.sex = sex
def printInfo(self):
print(\我叫\年龄\性别\
class Student(Person):
def __init__(self,name,age,sex,college,banji): super().__init__(name,age,sex) self.college = college self.banji = banji
def printInfo(self):
print(\我叫\年龄\性别\,我是\的\班的学生\
def learn(self,teacher):
print(\我是\老师,\我终于学会了\
class Teacher(Person):
def __init__(self,name,age,sex,college,professional): super().__init__(name,age,sex) self.college = college
self.professional = professional
def printInfo(self):
print(\我叫\年龄\性别\,我是来自\的一名\讲师\
def teach(self):
return \今天讲了面向对象编程\
stu1 = Student(\张三\男\计算机学院\stu2 = Student(\李四\女\计算机学院\stu3 = Student(\王五\男\计算机学院\stu1.printInfo() stu2.printInfo() stu3.printInfo()
tea = Teacher(\张老师\男\计算机学院\tea.printInfo() stu1.learn(tea) stu2.learn(tea) stu3.learn(tea)
12、 修改第11题,使用模块化来实现,即:将Person、Student和Teacher分别放在
不同的模块中,然后再创建一个文件,在其中1)创建三个学生对象,分别打印其详细信息;2)创建一个老师对象,打印其详细信息;3)学生对象调用learn方法 答案:
Person.py参考第11题中的class Person
Student.py和Teacher.py分别在第11题的class Student(Person)和class Teacher(Person)前增加from Person import Person 主程序文件:
from Student import Student from Teacher import Teacher
stu1 = Student(\张三\男\计算机学院\stu2 = Student(\李四\女\计算机学院\stu3 = Student(\王五\男\计算机学院\stu1.printInfo() stu2.printInfo() stu3.printInfo()
tea = Teacher(\张老师\男\计算机学院\tea.printInfo() stu1.learn(tea) stu2.learn(tea) stu3.learn(tea)
第9章 面向对象编程习题及答案 - 图文



