博客
关于我
Python面向对象程序设计期末考试复习题及答案(含编程题)
阅读量:253 次
发布时间:2019-03-01

本文共 5442 字,大约阅读时间需要 18 分钟。

一、选择题

  • 关于面向过程和面向对象,下列说法错误的是(B).

    • A. 面向过程和面向对象都是解决问题的一种思路
    • B. 面向过程是基于面向对象的
    • C. 面向过程强调的是解决问题的步骤
    • D. 面向对象强调的是解决问题的对象
  • 关于类和对象的关系,下列描述正确的是(D).

    • A. 类是面向对象的核心
    • B. 类是现实中事物的个体
    • C. 对象是根据类创建的,并且一个类只能对应一个对象
    • D. 对象描述的是现实的个体,它是类的实例
  • 构造方法的作用是(C).

    • A. 一般成员方法
    • B. 类的初始化
    • C. 对象的初始化
    • D. 对象的建立
  • 构造方法是类的一个特殊方法,Python中它的名称为(C).

    • A. 与类同名
    • B. _construct
    • C. init
    • D. init
  • Python类中包含一个特殊的变量(A),它表示当前对象自身,可以访问类的成员.

    • A. self
    • B. me
    • C. this
    • D. 与类同名

  • 二、填空题

  • Python安装扩展库常用的是___工具。(pip)
  • Python程序文件扩展名主要有___和___两种,其中后者常用于GUI程序。(py、pyw)
  • 查看变量类型的Python内置函数是______。(type())
  • 列表对象的sort()方法用来对列表元素进行原地排序,该函数返回值为_____。(None)
  • 查看变量内存地址的Python内置函数是_______。(id())
  • Python源代码程序编译后的文件扩展名为___。(pyc)
  • 为了提高Python代码运行速度和进行适当的保密,可以将Python程序文件编译为扩展名____的文件。(pyc)
  • ____命令既可以删除列表中的一个元素,也可以删除整个列表。(del)

  • 三、判断题

  • 在Python中定义类时,如果某个成员名称前有2个下划线则表示是私有成员。(对)
  • 在类定义的外部没有任何办法可以访问对象的私有成员。(错)
  • Python中一切内容都可以称为对象。(对)
  • 在一个软件的设计与开发中,所有类名、函数名、变量名都应该遵循统一的风格和规范。(对)
  • 定义类时所有实例方法的第一个参数用来表示对象本身,在类的外部通过对象名来调用实例方法时不需要为该参数传值。(对)
  • 对于Python类中的私有成员,可以通过“对象名._类名__私有成员名”的方式来访问。(对)
  • 使用内置函数open()且以“w”模式打开的文件,文件指针默认指向文件尾。(错)
  • 使用内置函数open()打开文件时,只要文件路径正确就总是可以正确打开的。(错)
  • 假设已导入random标准库,那么表达式max([random.randint(1,10) for i in range(10)])的值一定是10。(错)
  • Python是一种跨平台、开源、免费的高级动态编程语言。(对)
  • Python3.x完全兼容Python2.x。(错)
  • 使用内置函数open()且以“w”模式打开的文件,文件指针默认指向文件尾。(错)
  • 使用内置函数open()打开文件时,只要文件路径正确就总是可以正确打开的。(错)
  • Python变量使用前必须先声明,并且一旦声明就不能再当前作用域内改变其类型。(错)
  • Python采用的是基于值的自动内存管理方式。(对)
  • 在定义函数时,某个参数名字前面带有一个*符号表示可变长度参数,可以接收任意多个普通实参并存放于一个元组之中。(对)
  • 在定义函数时,某个参数名字前面带有两个*符号表示可变长度参数,可以接收任意多个关键参数并将其存放于一个字典之中。(对)
  • 定义函数时,带有默认值的参数必须出现在参数列表的最右端,任何一个带有默认值的参数右边不允许出现没有默认值的参数。(对)
  • 在调用函数时,可以通过关键参数的形式进行传值,从而避免必须记住函数形参顺序的麻烦。(对)
  • 在调用函数时,必须牢记函数形参顺序才能正确传值。(错)
  • 调用函数时传递的实参个数必须与函数形参个数相等才行。(错)

  • 四、解答题

  • 阅读下面的代码,并分析假设文件“D:\test.txt”不存在的情况下两段代码可能发生的问题。

    • 代码1
      try: fp = open(r'd:\test.txt') print('Hello world!', file=fp) finally: fp.close()

      如果文件不存在,会抛出FileNotFoundError,因为无法打开文件。

    • 代码2
      try: fp = open(r'd:\test.txt', 'a+') print('Hello world!', file=fp) finally: fp.close()

      如果文件不存在,open会自动创建该文件,因此不会抛出异常,代码可以正常运行。

  • 写出下面代码的优化版本,提高运行效率。

    • 原代码:
      x = list(range(500)) for item in x: t = 5**5 print(item + t)
    • 优化版本:
      x = list(range(500)) t = 5**5
      for item in x: print(item + t)
  • 写出下面代码的运行结果。

    • 代码
      def Sum(a, b=3, c=5): return sum([a, b, c]) print(Sum(a=8, c=2)) print(Sum(8)) print(Sum(8, 2))
      • 输出
        13
        16
        15
  • 阅读下面的程序,判断其是否可以正常运行,如果可以运行则写出执行结果,如果不能运行则写出理由。

    • 程序
      class Test: def __init__(self, value): self.__value = value @property def value(self): return self.__value t = Test(3) t.value = 5 print(t.value)
      • 理由
        该程序无法正常运行,因为value被定义为只读属性,无法修改其值。

  • 五、代码设计题

  • 代码

    import re
    value = []
    print("请输入:")
    items = [x for x in input().split(',')]
    for p in items:
    if len(p) < 6 or len(p) > 12:
    continue
    if not re.search("[a-z]", p):
    continue
    if not re.search("[0-9]", p):
    continue
    if not re.search("[A-Z]", p):
    continue
    if not re.search("[$#@]", p):
    continue
    if re.search("\s", p):
    continue
    value.append(p)
    print(",".join(value))
    • 解释
      代码用于过滤并格式化输入的字符串,保留符合特定规则的项。
  • 代码

    x = input("x=")
    l = x.split()
    d = {}
    for i in l:
    d[i] = d.get(i, 0) + 1
    l2 = sorted(d)
    for i in l2:
    print(f"{i}: {d[i]}")
    l = []
    for i in range(3):
    x = int(input("x="))
    l.append(x)
    l.sort()
    print(" ".join(map(str, l)))
    • 解释
      代码用于统计单词出现次数并排序,然后输出结果。
  • 代码

    class Person:
    def __init__(self, name, weight):
    self.name = name
    self.weight = weight
    def __str__(self):
    return f'我的名字叫 {self.name} 体重是 {self.weight:.2f}'
    def run(self):
    print(f'{self.name} 爱跑步')
    self.weight -= 0.5
    def eat(self):
    print(f'{self.name} 吃东西')
    self.weight += 1
    xx = Person('小明', 75.0)
    xx.run()
    xx.eat()
    print(xx)
    xm = Person('小美', 45.0)
    xm.run()
    xm.eat()
    print(xm)
    print(xx)
    • 解释
      代码模拟了小明和小美的体重变化,分别进行跑步和吃东西的动作,并输出结果。
  • 代码

    class Home:
    def __init__(self, home_type, area):
    self.home_type = home_type
    self.area = area
    self.freearea = area
    self.jiaju = []
    def __str__(self):
    return ('户型:%s\n总面积:%.2f\n剩余面积:%.2f\n家具名:%s'
    %(self.home_type, self.area, self.freearea, self.jiaju))
    def add_jiaju(self, itm):
    if itm.area > self.freearea:
    print('%s的面积太大,无法添加!'%(itm.name))
    return
    self.jiaju.append(itm.name)
    self.freearea -= itm.area
    class jiaju:
    def __init__(self, name, area):
    self.name = name
    self.area = area
    def __str__(self):
    return f'[{self.name}]:占地 {self.area:.2f} 平米'
    bed = jiaju("床", 4)
    chest = jiaju("衣柜", 2)
    table = jiaju("餐桌", 1.5)
    print(bed)
    print(chest)
    print(table)
    myhome = Home('三室一厅', 100)
    myhome.add_jiaju(bed)
    myhome.add_jiaju(chest)
    myhome.add_jiaju(table)
    print(myhome)
    • 解释
      代码定义了一个房子的类,用于添加家具并计算剩余面积,最后打印房子的信息。
  • 代码

    class Gun(object):
    def __init__(self, model):
    self.model = model
    self.bullet_count = 0
    def add_bullet(self, count):
    self.bullet_count += count
    def shoot(self):
    if self.bullet_count <= 0:
    print('%s没有子弹' % self.model)
    else:
    self.bullet_count -= 1
    print('%s的子弹数量为%s' % (self.model, self.bullet_count))
    class Soldier(object):
    def __init__(self, name):
    self.name = name
    self.gun = None
    def fire(self):
    if self.gun is None:
    print('%s没有枪' % self.name)
    else:
    self.gun.add_bullet(5)
    self.gun.shoot()
    ak47 = Gun('AK47')
    ak47.add_bullet(10)
    ak47.shoot()
    ruien = Soldier('RE')
    ruien.gun = ak47
    ruien.fire()
    • 解释
      代码模拟了士兵和枪的交互,展示了如何添加子弹并射击。
  • 转载地址:http://igvt.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现UDP传输系统源码(附完整源码)
    查看>>
    Objective-C实现UDP内网穿透(附完整源码)
    查看>>
    Objective-C实现ugly numbers丑数算法(附完整源码)
    查看>>
    Objective-C实现unescape函数功能(附完整源码)
    查看>>
    Objective-C实现unet模型(附完整源码)
    查看>>
    Objective-C实现wc函数功能(附完整源码)
    查看>>
    Objective-C实现weight conversion权重转换算法(附完整源码)
    查看>>
    Objective-C实现wiggle sort摆动排序算法(附完整源码)
    查看>>
    Objective-C实现word frequency functions词频函数算法(附完整源码)
    查看>>
    Objective-C实现XOR Cipher异或密码算法(附完整源码)
    查看>>
    Objective-C实现XZordering算法(附完整源码)
    查看>>
    Objective-C实现y = sinx函数的积分运算(附完整源码)
    查看>>
    Objective-C实现y = x的平方函数的积分运算(附完整源码)
    查看>>
    Objective-C实现z-algorithm算法(附完整源码)
    查看>>
    Objective-C实现Zeller 的同余算法 (附完整源码)
    查看>>
    Objective-C实现zellers congruence泽勒一致算法(附完整源码)
    查看>>
    Objective-C实现Zero One Knapsack零一背包计算算法(附完整源码)
    查看>>
    Objective-C实现一个Pangram字符串至少包含一次所有字母算法(附完整源码)
    查看>>
    Objective-C实现一个stack算法(附完整源码)
    查看>>
    Objective-C实现一个通用的堆算法(附完整源码)
    查看>>