面向对象习题测试(含答案)

这篇博客介绍了面向对象的基本概念,包括对象与类的关系,并通过设计桌子和账户类的实例来展示面向对象的设计。还讨论了Python中列表推导式、自定义浮点数步长迭代器以及异常处理在文件操作中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 什么是面向对象?

:   面向对象的方法主要是把事物给对象化,包括其属性和行为。面向对象编程更贴近实际生活的思想。总体来说面向对象的底层还是面向过程,面向过程抽象成类,然后封装,方便使用就是面向对象,(万物皆对象)。”

  • 类和对象的关系是什么

“它们的关系是,对象是类的实例,类是对象的模板。对象是通过new classname产生的,用来调用类的方法;类的构造方法 。”

  • 设计一个桌子类,长度宽度和高度 (类和对象)
class Desk():
    lenth = input('请输入您预计购买桌子得长度:(单位:cm)')  #输入想要的桌子长度
    wide = input('请输入您预计购买桌子得宽度:(单位:cm)')   #输入想要的桌子宽度
    def __init__(self):
        print('您购买的桌子规格如下:')
desk = Desk()
print(f'您购买的桌子长度为:{desk.lenth}cm\n您购买的桌子宽度为:{desk.wide}cm')
  • 定义一个账户类,可以创建账户、存款、取款、查询余额、以及注销账户操作( 三大特性 )
class Account:
    # 初始化方法
    def __init__(self, name, pwd, money=0):
        self.name = name
        self.pwd = pwd
        self.money = money

    # 存款
    def deposit(self, pwd, money):
        if pwd == self.pwd:
            if isinstance(money, (int, float)) and money >= 0:
                self.money += money
                print("您已成功存款%.2f元,卡上余额为%.2f" % (money, self.money))
            else:
                print('对不起,请输入正确的金额')
        else:
            print('对不起,您的密码输入错误')

    # 取款
    def withdraw(self, pwd, money):
        if pwd == self.pwd:
            if isinstance(money, (int, float)) and money >= 0:
                if self.money >= money:
                    self.money -= money  # self.money = self.money - money
                    print("您已成功取款%.2f元,卡上余额为%.2f" % (money, self.money))
                else:
                    print('对不起,您的卡上余额已不足,请输入正确的金额')
            else:
                print('对不起,请输入正确的金额')
        else:
            print('对不起,您的密码输入错误')

    # 查询余额
    def query(self, pwd):
        if pwd == self.pwd:
            print('卡上的余额为%.2f元' % self.money)
        else:
            print('对不起,您的密码输入错误')

    #     注销账户
    def close(self, pwd):
        if pwd == self.pwd:
            if self.money == 0:
                self.name = ''
                self.money = 0
                self.pwd = ''
                li.remove(user1)
            else:
                print('卡上尚有余额,请先取出')
        else:
            print('对不起,您的密码输入错误')


# 登录之后需要调用的函数
def func():
    while True:
        num2 = int(input('1.存款 2.取款 3.查询余额 4.注销账户 5.退出  \t请输入您的选择'))
        if num2 == 1:
            pwd3 = input('请输入密码:')
            while pwd3 != pwd1:
                print('密码输入错误')
                pwd3 = input('请输入密码:')

            else:
                money = eval(input('请输入金额:'))
                a.deposit(pwd3, money)

        elif num2 == 2:
            pwd3 = input('请输入密码:')
            while pwd3 != pwd1:
                print('密码输入错误')
                pwd3 = input('请输入密码:')

            else:
                money = eval(input('请输入金额:'))
                a.withdraw(pwd3, money)  # 对象名.实例方法()

        elif num2 == 3:
            pwd3 = input('请输入密码:')
            while pwd3 != pwd1:
                print('密码输入错误')
                pwd3 = input('请输入密码:')

            else:
                a.query(pwd3)

        elif num2 == 4:
            pwd3 = input('请输入密码:')
            while pwd3 != pwd1:
                print('密码输入错误')
                pwd3 = input('请输入密码:')

            else:
                a.close(pwd3)
                break
        elif num2 == 5:
            print('退出成功')
            break
        else:
            print('输入错误')


li = []
while 1:
    print('=====欢迎来星月模拟银行======')
    num = int(input('1.注册账户\n2.登录\n3.退出 \n 请输入您的选择'))
    if num == 1:
        user = input('请输入用户名:')
        pwd1 = input('请输入密码:')
        pwd2 = input('请再次输入密码:')
        if pwd1 == pwd2:
            li.append(user)
            # 创建实例对象
            a = Account(user, pwd1)
            print("恭喜你注册成功")
        else:
            print('对不起,您输入的两次密码不一致')
            user = input('请输入用户名:')
            pwd1 = input('请输入密码:')
            pwd2 = input('请再次输入密码:')

    elif num == 2:
        user1 = input('请输入用户名:')
        pwd3 = input('请输入密码:')
        if user1 in li:
            if pwd3 == pwd1:
                func()
            else:
                print('对不起,您的密码输入错误')

        else:
            print('对不起,该用户未注册')

    elif num == 3:
        print('退出成功')
        break

    else:
        print('请输入正确的选项:')
  • 测试列表推导式和不用列表推导式哪一种速度更快( 异常和协议 )
import time


class Runtime:
    # 只要with语句一出现,enter方法就会被触发
    # 拟定上下文协议,固定使用with开始做什么事情,需要有返回值
    def __enter__(self):
        self.start_time = time.time()  # time.time() 得到当前时间戳
        return self.start_time

    # 当enter方法执行完毕就会执行exit方法
    '''
    exc_type:异常类型
    exc_val:异常值
    exc_tb: 追踪信息
    只有当enter方法或者with下的代码出现异常,才会有值,否则都为None
    '''

    def __exit__(self, exc_type, exc_val, exc_tb):
        self.end_time = time.time()
        self.run_time = self.end_time - self.start_time
        print(f'运行时间为:{self.run_time}')


# with Runtime():
#     li = [i for i in range(100000)]
#
# with Runtime():
#     li1 = []
#     for i in range(100000):
#         li1.append(i)
  • range不可以使用小数做步长,实现一个可迭代对象可以实现小数步长( 异常和协议 )
import decimal


class Float_range:
    def __init__(self, start, end=None, step=1):
        # 如果开始值不属于int或者float类型,就抛出类型错误
        if not isinstance(start, (int, float)):
            raise TypeError  # 主动抛出异动
        # 如果end有值,并且不属于int或者float类型,就抛出类型错误
        elif end != None and not isinstance(end, (int, float)):
            raise TypeError

        # 如果step不属于int或者float,就抛出类型错误
        elif not isinstance(step, (int, float)):
            raise TypeError

        elif end and end < start:
            print('结束值不能小于开始值')

        elif step <= 0:
            print('步长不能小于等于0')
        # 其它都是正常的情况
        else:
            # 如果传入一个参数值
            if end == None:
                self.start = 0
                self.end = start
                self.step = step

            # 如果传入两个数值或者三个参数值
            else:
                self.start = 0
                self.end = end
                self.step = step

    def __iter__(self):
        return self

    def __next__(self):
        # self.index = self.start
        if self.start >= self.end:
            raise StopIteration
        self.start = decimal.Decimal(str(self.start)) + decimal.Decimal(str(self.step))
        return self.start


#
# for i in Float_range(1,10,1.2):
#     print(i)


# print(1.1+0.1)
# print(decimal.Decimal('1.1') + decimal.Decimal('0.1'))

注意点:这里把step改成2.1时会出现多个小数      原因是 :  python计算机中数据以0和1存储,浮点数并不能准确地表示十进制。并且,即便是最简单的数学运算,也会带来不可控制的后果。而print函数也会舍去精度范围外的尾数(也不精确)

  • 打开一个只读文件,如果文件不存在,则去创建这个文件,通过异常去完成( 异常和协议 )
try:
    file_name = input('请输入您需要打开的文件名字:')
    T = open(file_name,'r+',encoding='utf-8')
    print('您打开的文件如下:')
    for i in T:
        print(i)
except IOError:
    new_T = open(f'{file_name}','w')
finally:
    file_name.close()
    print('我已经执行完毕了')

(在此特别感谢我们的阿言进行优化)

阿言.txt
欢迎我们:
   吐纳樱唇,氛氲兰气,玉纤握处堪怜
   云想衣裳花想容,春风拂槛露华浓
   众里嫣然通一顾,人间颜色如尘土
   垆边人似月,皓腕凝霜雪
   柳怯云松,更何必、十分梳洗
   手如柔荑,肤如凝脂。领如蝤蛴,齿如瓠犀
   瓠犀发皓齿,双蛾颦翠眉。红脸如开莲,素肤若凝脂
   一顾倾人城,再顾倾人国的阿言
  • 复习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值