python面向对象综合练习

python面向对象基础练习题 编写列表 放入三个人, 遍历列表依次打印每个人的信息(包含汽车)创建Rectangle类,其中People类具有name、age两个成员变量,分别为String类型、整型,随机生成10个学生放入列表(年纪随机即可),按学生的年纪对列表中的学生排序。对于猫类和狗类都有一个吃eat方法,但是猫和狗的吃eat方法的实现不同,且具有公有的GetAge成员函数,用于返回age变量的值。输入数字1,添加学生信息(id名字,年纪,性别)随机10个角色(血量,攻击力随机)放入列表。输入数字3,统计学生平均年纪。 阅读详情

练习1:定义一个类来表示平面上的点,提供移动点和计算到另外一个点距离的方法。

class Point():
    #点的静态属性
    def __init__(self,x,y):
        self.x = x
        self.y = y
    # 移动到的点
    def move_to(self,x,y):
        self.x = x
        self.y = y
    # 移动了
    def move_by(self,dx,dy):
        self.x += dx
        self.y += dy

    def distance(self,other):
        lens=((self.x - other.x)**2 + (self.y - other.y)**2)**0.5
        return f'{lens:.2f}'

d1=Point(10,28)
d1.move_to(50,89)  # 表示移动到这个点(50,89)
d1.move_by(10,10)  # 表示在原坐标的基础上移动,移动后的点为(20,38)

练习2:在练习1的基础上,定义一个类来表示平面上的线段,提供长度属性和判断两条线段(对应的直线)是否平行的方法,重叠(共线)也算平行。

class Line():
    # start和end是练习一中的实例化对象
    def __init__(self,start,end):
        self.start = start
        self.end = end

    def length(self):
        # 返回练习一中的距离方法
        return self.start.distance(self.end)

    def relationship(self,other):
        # 给四个点
        sx1, sy1, ex1, ey1 = self.start.x, self.start.y, self.end.x, self.end.y
        sx2, sy2, ex2, ey2 = self.start.x, self.start.y, self.end.x, self.end.y

        # 斜率法判断两条线之间的关系,斜率不等则相交
        if (ey1-sy1)/(ex1-sx1) != (ey2-sy2)/(ex2-sx2):
            print('相交')
        else:
            print('平行')

p1=Point(2,3)
p2=Point(4,5)
p3=Point(8,9)
p4=Point(10,12)

print(p3.distance(p4))
line1=Line(p1,p2)
line2=Line(p3,p4)
line1.relationship(line2)

练习3:定义一个类实现倒计时的计时器(请参考手机上的计时器)。

import time
class Countdown():
    def __init__(self,hour,minute,second):
        self.hour = hour
        self.minute = minute
        self.second = second
    
    # 展示时间信息
    def show(self):
        return f'{self.hour:0>2d}:{self.minute:0>2d}:{self.second:0>2d}'

    # 退出终止方法
    def over(self):
        return self.hour != 0 or self.minute != 0 or self.second != 0

    # 走时间
    def run(self):
        if self.over():
            self.second -=1
            if self.second<0:
                self.second = 59
                self.minute -=1
                if self.minute <0:
                    self.minute = 59
                    self.hour -=1
# 调用部分
clock = Countdown(0,2,6)
print(clock.show())

while clock.over():
    time.sleep(1)          # 循环一次间隔一秒
    clock.run()            # 循环跑时间的方法
    print(clock.show())    # 跑一次展示一次

练习4:定义表示银行卡和ATM(自动柜员机)的类,要求ATM可以实现读卡、存钱、取钱、转账的功能。

 解题思路:

  1. 定义一个card类:属性:卡号、截止日期、卡的类型
  2. 定义第二个ATM类:

        属性:装入一个具备银行卡信息的数据库、声明一个卡的空容器、声明一个存放当前卡信息的容器

        方法(功能):

  • a.读卡:传入卡,通过卡号判断是否在数据库中;输入密码,密码加循环限制输入次数;如果成功  return  True  ,否则 return  False 。
  • b.展示余额:如果卡的的信息容器不为空,则展示余额信息
  • c.存钱:添加限制判断条件,余额累加
  • d.取钱:添加限制判断条件,余额累减
  • e.转账:传入转账卡卡号信息,及转账金额,本账户余额累减,转入账户余额累加
  • f.拔卡:返回卡片初始容器,即退出
class AccountCard():
    '''创建卡片的静态属性'''
    def __init__(self,card_no,expiry_date,card_type='储蓄卡'):
        self.card_no=card_no
        self.card_type=card_type
        self.expiry_date=expiry_date
    # 格式化输出卡片信息
    def __repr__(self):
        return f'卡号:{self.card_no}  有效日期:{self.expiry_date}  卡类型:{self.card_type}'

class ATM():
    '''创建一个ATM机类,定义静态属性,传入一个账户信息数据库'''
    def __init__(self):
        self.accounts={
            '1122334455667788': {'password': '123321', 'balance': 12000.0 ,'valid':'True'},
            '1122334455667789': {'password': '123456', 'balance': 54321.0,'valid':'True'},
            '1122334455667790': {'password': '147258', 'balance': 0.0,'valid':'True'}
            }
        # 声明一个卡片容器属性、一个卡片信息容器属性
        self.current_card=None
        self.current_account=None

    def read_card(self,card):
        '''定义一个读取卡片信息的方法'''
        # 判断传入的卡片信息是否在数据库中
        if card.card_no in self.accounts:
            # 将数据库中对应的卡片信息赋值给信息容器
            self.current_account=self.accounts[card.card_no]
            # 密码输入次数限制
            for i in range(3):
                password = input('请输入密码:')
                if password==self.current_account['password']:
                    # 密码正确,则卡片读取成功,返回卡插入成功
                    self.current_card=card
                    return True
                else:
                    print('密码错误!')
            else:
                print('密码输入次数已经超过三次,已锁卡')
        else:
            print('账户不存在!')
            return False

    def show_blance(self):
        '''定义一个账户余额展示方法'''
        # 判断信息容器是否有信息
        if self.current_account:
            print(f"余额:{self.current_account['balance']}")

    def save_money(self,money):
        '''定义存钱的方法'''
        # 加入存钱限制条件
        if self.current_account and money >=100:
            self.current_account['balance'] += money
            print('存钱成功!')
            return True
        return False

    def get_money(self,money):
        '''定义一个取钱的方法'''
        # 添加限定条件
        if 100 <= money < self.current_account['balance'] and self.current_account:
            self.current_account['balance']-=money
            print('取钱成功!')
            return True
        return False

    def transfer(self,other_card_no,money):
        '''定义一个转账功能,传入转账卡号,金额'''
        # 添加限制条件
        if self.current_account and other_card_no in self.accounts:
            other_account=self.accounts[other_card_no]
            if money < self.current_account['balance']:
                self.current_account['balance'] -= money
                other_account['balance'] += money
                print('转账成功!')
                return True
            else:
                print('转账金额超限!')
            return False
        else:
            print('无效账户名')
        return False

    def move_card(self):
        '''拔卡'''
        self.accounts=None
        self.current_account=None

if __name__ == '__main__':
    # 准备两张卡片的信息
    card1=AccountCard('1122334455667788','2050-05-11','信用卡')
    card2=AccountCard('1122334455667789','2070-08-29')

    a=ATM()
    # 读取卡片信息
    a.read_card(card1)
    a.show_blance()
    # 存钱并查看
    a.save_money(5000)
    a.show_blance()
    #取钱并查看
    a.get_money(8000)
    a.show_blance()
    
    # 展示转账后卡2的信息
    a.transfer('1122334455667789',6666)
    a.read_card(card2)
    a.show_blance()

运行结果:

 

 

练习5:某公司有三种类型的员工,分别是部门经理、程序员和销售员。

其中,部门经理每月固定月薪15000元;

程序员计时支付月薪,每小时200元;

销售员按照1800元底薪加上销售额5%的提成支付月薪。

需求:设计一个工资计算系统,录入员工信息,计算员工的月薪。

from abc import ABCMeta,abstractmethod

class Employee(metaclass=ABCMeta):  # 抽象类不能实例化,但是子类可以继承
    '''继承抽象类'''
    def __init__(self,name):
        self.name=name
    # 将这个方法变成抽象方法,对象不能直接调用,但是子类可以重写这个方法
    @abstractmethod
    def give_salary(self):
        pass

class Magnaer(Employee):
    '''创建一个部门经理类'''
    def give_salary(self):
        return 15000.00

class Programmer(Employee):
    '''创建一个程序员类,添加一个工作时间属性'''
    def __init__(self,name,work_hour=0):
        super(Programmer, self).__init__(name)
        self.work_hour=work_hour

    def give_salary(self):
        return self.work_hour*200

class SalesMan(Employee):
    '''创建一个销售员类,添加一个销售额属性'''
    def __init__(self,name,sales=0):
        super(SalesMan, self).__init__(name)
        self.sales=sales

    def give_salary(self):
        return self.sales*0.05+1800

if __name__ == '__main__':
    emps = [Magnaer('曹操'),Programmer('诸葛亮'),Programmer('周瑜'), Programmer('关羽'),SalesMan('大乔'), SalesMan('小乔')]
    for emp in emps:
        if isinstance(emp,Programmer):
            emp.work_hour=float(input(f'请输入{emp.name}工作时长:'))
        elif isinstance(emp,SalesMan):
            emp.sales=float(input(f'请输入{emp.name}的销售额:'))
        print(f'{emp.name}的本月月薪为¥{emp.give_salary()} ')

运行结果如下:

 

python面向对象练习题01 练习题一 # 1.定义一个Person类,它包含数据成员age, name和gender。 # a.从Person中派生一个类Employee,在新类中添加一个数据成员,存储个人的number. # b、再从Employee中派生一个类Executive,每个派生类都应该定义一个方法, # 来显示相关的信息(名称和类型,如”Fred Smith is an Employee”)。 # c.编写一个列表,包含3个Executive对象,2个一般的Employee对象,然后显示它们的信息。 代码展示: . 阅读详情

相关推荐

Python 面向对象(练习题)

python 面向对象章节,组合和继承,工厂模式和单例模式结合,@property装饰器用法的练习

weixin_42979760的博客 1402

python练习|面向对象

个人学习笔记

py_hope 1747

ads传统功放设计笔记(3)

传统功放设计的流程一般包括以下这些步骤: 1、明确设计目标 2、选择功放管子 3、确定静态工作点 4、设计偏置电路 5、判断稳定性 6、负载与源牵引 7、输入输出阻抗匹配 8、原理图优化 9、大信号仿真 10、版图设计 11、版图联合仿真 12、pcb设计 第二节我们设计仿真了功放的原理图。之后我们需要对版图进行设计和仿真。 10、版图设计 首先将S参数控件都打叉,还要去掉电源、源负载阻抗、地、芯片、电容。在原先电容和芯片的位置加上gap,设置好长度和间隔。之后在电源引脚、输入输出引脚和隔离的两端加上端口。

qq_40995480的博客 6026

Python基础——面向对象基础(练习)

文章目录一、二、 一、 面向对象编程:OOP 面向对象编程的关注点在于谁来做,相比较函数,面向对象是更大的封装,根据职责在一个对象中封装多个方法 二、

Alice 2305

【5G NB-IoT NTN】3GPP R17 NB-IoT NTN介绍_nbiot ntn

在3GPP R17协议中,将NB-IoT集成到了NTN(非陆地网络,即卫星通信)中,并定义了一个系统架构。在这个架构中包括一个可配置再生payload的低轨道(LEO)卫星,这意味着该卫星可以执行传统基站的全部或部分功能。该系统架构还可以适配同步轨道(GEO)卫星,这些卫星与LEO卫星类似,也可以配置再生payload。系统高度范围轨道波束覆盖范围LEO300~1500km绕地球转100~1000kmGEO35786km与地球自转同步200~3500km。

2401_84010302的博客 3568

CTP接口入门

该文章主要讲什么 这篇文章的面向对象是有一些C++基础,并且想用C++来做程式化交易的同学。 这篇文章可以算是我的程式化学习笔记中的一篇。其中介绍了CTP的简单的使用方式,并且附上了一些代码以及我在试用的时候遇到的一些小坑。 什么是CTP CTP是上海期货推出的一套可供程序调用的交易接口。就好比官方给程序化交易提供了的一个专门的业务窗口。 接口相关文件下载 CTP接口可以在上期...

weizehua的专栏 4万+

Python 面向对象练习

3.创建一个学员类,并设计三个字段用于表示学生的成绩(语文、数学、英语):然后定义一个列表表示一个班的学生(10人),依次输入每个学生的信息和成绩,输入的同时将学员的每科成绩划分等级(100-90:A 89-80:B 79-70:C 69-60:D 60以下:E)最后输出所有学员的信息。2.定义一个三角形类(Strange),属性是三边的长度,求三角形的面积和周长。1.定义一个圆类(Circle),求圆的面积和周长。每个学生的信息包括姓名和某门功课的成绩。字段:角色名、血量、魔法、状态。

繁星 695

Palantir的本体论建模跟数仓建模的异同

Palantir的Foundry Ontology通过构建组织的数字孪生体,将数据集和模型映射为对象类型、属性、链接和操作类型,形成完整的语义知识网络。与传统数仓建模相比,本体建模以业务问题为驱动,强调细粒度语义和实时决策能力,采用图语义技术实现灵活的映射关系。

轩哥的个人研究和成长记录 1594

python面向对象的综合练习

户型家具面积问题 士兵瑞恩

yyh_linux_note的博客 364

西门子PLC编程之⑦编程开始之点位配置及注释

紧接上篇,点位梳理后,进入PLC编程。1、新建工程,配置系统模块2、配置I点并做中文符合,直接上中文,smart支持中文点位编程,用起来很方便。3、配置Q点并做中文符合5、配置AIW模拟量输入点,配置AQW模拟量输出点并做中文符合6、配置手动启动辅助触点,并做中文符合7、 配置自动启动辅助触点,并做中文符合8、 配置传感器浮点型数据变量点位,并做中文符合9、配置系统运行参数设置区点位,做中午符合,做掉电保持.....................

学技术,人生不误——谁也是寂寞宇宙里的流星,只是你的坚持决定了你划过的痕迹。而且,铸造了普遍里的你的唯一。 4889

IDM 的免费替代品来了!这款开源下载器速度提升500%

💡分享一款开源的下载管理工具,支持多线程加速(最高提升500%)、队列管理、计划任务和浏览器集成,界面现代化且支持深色模式,跨平台支持Windows/Linux,是IDM的优秀替代方案🎈

XiaoqiangClub的博客 730

python-面向对象-学生库类的综合练习

# coding:utf-8 # author:我本善良 # create_time:2021/6/1 21:34 ''' 学生库 ''' class StudentInfo(object): def __init__(self,students): self.students = students def get_by_id(self,student_id): return self.students.get(student_id) # 获取

weixin_37770279的博客 304

《UDS协议从入门到精通》系列——图解0x23:通过地址读取内存

如何读取ECU中指定内存地址的数据?图解UDS 0x23服务带你快速上手!!

车载系统攻城狮 2623

python面向对象综合练习:编程题【附答案】

实例化对象并调用方法,打印学生信息。方法,向成绩列表中添加新分数。逐层实例化并打印信息。方法计算面积和周长。

苏婳 1687

“守望先锋”网络同步分析

守望先锋”(Overwatch)是一款由暴雪娱乐开发的团队基础第一人称射击游戏(FPS),于2016年正式发布。游戏以其独特的角色设计、丰富的游戏模式和高度的团队合作性而受到广泛欢迎。类型:第一人称射击(FPS)/多人在线战斗竞技场(MOBA元素)平台玩家人数:每场比赛由两个六人队伍组成,共12名玩家。客户端/服务器模型:在这种模型中,客户端负责处理用户输入和表现逻辑,而服务器则负责游戏的核心逻辑和状态管理。客户端与服务器之间通过网络进行通信,确保游戏状态的一致性。强同步机制。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 426

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

python面向对象类的综合题_Python中面向对象(二)封装及练习

1.封装#1.将属性和方法封装到一个抽象的类中#2.外界使用类创建对象,对象调用方法#3.对象方法的细节都被封装在类的内部-------->题目要求:需求:1.李雷体重75.0公斤2.李雷每次跑步会减肥0.5公斤3.李雷每次吃东西体重会增加1公斤-------->代码如下:class Person():def __init__(self,name,weight):self.name =...

weixin_39774445的博客 228

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Python之面向对象(综合练习)

1.模拟栈操作原理 代码: # 栈操作 class Stack(): # 初始化 def __init__(self): # 定义了一个空栈,stack:类的属性 self.stack = [] # 进栈 def push(self,value): self.stack.append(value) r...

lilygg的博客 8107

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Python-面向对象综合应用小练习

考羊肉串练习: 代码: class RoastMouten: def __init__(self,time): self.time=time self.salt="盐" self.chili="辣椒面" self.pepper="胡椒粉" def add_salt(self): print(self.time,f"状态糊了,添加{self.salt}") def add_salt_chili(self)

m0_50485614的博客 280

Python之面向对象的综合练习(模拟网上购物)

Pickle模块的使用 pickle提供了一个简单的持久化功能,可以将对象以文件的形式存放到磁盘上,此模块只能在Python中使用,且Python中所有数据类型【list,string,tuple,dict,set,对象】都可以使用pickle进行序列化和反序列化 pickle.dump(obj,file,protocol = None),其中obj:将要封装的对象;file:obj将要写入...

qq_38358499的博客 2868

Python 面向对象 答答租车系统(面向对象综合练习)

Description 各位面向对象的小伙伴们,在学习了面向对象的核心概念——类的封装、继承、多态之后,答答租车系统开始营运了。 请你充分利用面向对象思想,为公司解决智能租车问题,根据客户选定的车型和租车天数,来计算租车费用,最大载客人数,最大载载重量。 公司现有三种车型(客车、皮卡车、货车),每种车都有名称和租金的属性;其中:客车只能载人,货车只能载货,皮卡车是客货两用车,即可以载人,也可以载货。 下面是答答租车公司的可用车型、容量及价目表: 序号 名称 载客量 载货量

qq_43618642的博客 1236

python面向对象综合练习:选择题和填空题【附答案】

在类中,通过双下划线开头的属性(如__name)表示______。抽象类的装饰器需要从abc模块导入______和______。类的静态方法不需要访问______或______。__init__方法的返回值必须是______。多继承时,父类的查找顺序由______决定。在子类中调用父类的方法,通常使用哪个函数?实例方法的第一个参数必须是______。调用父类构造方法的函数是______。以下哪个是类的特殊方法(魔术方法)?实例方法的第一个参数通常被命名为?定义类的关键字是______。

苏婳 1024

python入门10——综合练习题(面向对象、函数)

【例1】小明爱跑步:小明的体重为120KG,小明每跑一次步体重下降0.5KG,小明每吃一顿饭体重上升1KG。 类的设计如下所示: class Person: def __init__(self, name, weight): self.name = name self.weight = weight def __str__(self): return "[%s]的当前体重是 %.1f KG " % (self.name, self.weig

Serendipity_zyx的博客 4516

python面向对象————图书馆借阅系统(综合练习)

方法:`add_item()`、`remove_item()`、`search_by_title()`、`display_available_items()`- `DVD`:额外属性 `director`、`duration`,重写 `get_info()`- `Magazine`:额外属性 `issue_number`,重写 `get_info()`- `Book`:额外属性 `author`、`pages`,重写 `get_info()`练习题5:图书馆借阅系统(综合练习)

2302_80130040的博客 649

python面向对象类的综合题_python练习题之面向对象(二)

# 1、python面向对象编程中,内置方法__str__、__add__如何使用,可以代码举例class Vector:def __init__(self, a, b):self.a = aself.b = bdef __str__(self):return 'Vector (%d, %d)' % (self.a, self.b)def __add__(self, other):return V...

weixin_42202716的博客 925

答答租车系统(类的继承与多态 面向对象综合练习) python java

答答租车系统(类的继承与多态 面向对象综合练习) 各位面向对象的小伙伴们,在学习了面向对象的核心概念——类的封装、继承、多态之后,答答租车系统开始营运了。 请你充分利用面向对象思想,为公司解决智能租车问题,根据客户选定的车型和租车天数,来计算租车费用,最大载客人数,最大载载重量。 公司现有三种车型(客车、皮卡车、货车),每种车都有名称和租金的属性;其中:客车只能载人,货车只能载货,皮卡车是客货两用车,即可以载人,也可以载货。 下面是答答租车公司的可用车型、容量及价目表: 要求:根据客户输入的所租车型的序号

qq_51780315的博客 773

Python面向对象编程

定义一个类,可以创建该类的N个对象创建的一个对象,就划分了一片内存空间(即同一个类的不同对象占用不同内存空间)定义类方式一:Class 类名: pass 定义类方式二:Class 类名(object) : # 继承 pass 创建对象方式一:类名() # 直接创建一个对象 创建对象方式二:变量 = 类名() # 创建一个对象,并使用一个变量来指向该对象,以便后续对其进行更多的操作。

如果一直做自己能力范围之内的事,那就很难进步 1253
上一篇: 面向对象——单例设计模式(例子)
下一篇: 发送邮件(用代码模拟邮箱服务器发送邮件)
continue_v
博客等级 码龄5年 17粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值