“Python 语言程序设计实验2023春季”实验五 面向对象程序设计

#实验五 面向对象程序设计

##一、实验学时: 2学时

##二、实验目的

  1. 掌握:Python类的定义,class关键字,创建对象的方法,访问对象中的成员。
  2. 掌握:私有成员与公有成员,数据成员与成员方法,类方法与静态方法,属性的定义与使用,混入机制。
  3. 掌握:继承的作用与Python实现。
  4. 掌握:构造函数 __ init __ (),析构函数__ del __ (),__ dd __ ()、__ mul __ ()、__ pow __ ()及其他Python类特殊方法与运算符的对应关系。

##三、实验内容

  1. 有下面的类属性:姓名、年龄、成绩列表[语文,数学,英语],其中每门课成绩的类型为整数,类的方法如下所述:
  • (1)列表项列表项获取学生的姓名。get_name(),返回类型:str。
  • (2)获取学生的年龄。get_age(),返回类型:int。
  • (3)返回3门科目中最高的分数。get_course(), 返回类型:int。
  • 类定义好之后,可以定义同学测试如下: zm = Student(‘zhangming’,20,[69,88,100]);返回结果: zhangming 20 100
  1. 设计一个Circle(圆)类,包括圆心位置、半径、颜色等属性。编写构造方法和其他方法,计算周长和面积。请编写程序验证Circle(圆)类的功能。
  2. 封装一个学生类,有姓名,有年龄,有性别,有英语成绩,数学成绩,语文成绩;求总分,平均分,以及打印输出学生的相关信息。
  3. 设计一个Person类,属性有姓名、年龄、性别,创建方法personInfo,打印输出这个人的信息;创建Student类,继承Person类,属性有学院college,班级Group,重写父类PersonInfo方法,调用父类方法打印输出个人信息,将学生的学院、班级信息也打印输出出来。
  4. 定义一个交通工具(Vehicle)的类,属性:速度(speed)、体积(size)等等。方法:移动move()、设置速度setSpeed(int speed)、加速speedUp()、减速speedDown()等等。实例化一个交通工具对象,通过方法初始化speed、size的值并且在相关方法中可以打印输出出来;另外调用加速减速的方法对速度进行改变。

##四、实验结果

  1. 有下面的类属性:姓名、年龄、成绩列表[语文,数学,英语],其中每门课成绩的类型为整数,类的方法如下所述:
  • (1)列表项列表项获取学生的姓名。get_name(),返回类型:str。
  • (2)获取学生的年龄。get_age(),返回类型:int。
  • (3)返回3门科目中最高的分数。get_course(), 返回类型:int。
  • 类定义好之后,可以定义同学测试如下: zm = Student(‘zhangming’,20,[69,88,100]);返回结果: zhangming 20 100
#程序名:1.py
#功 能:定义一个Student类,并实例化一个对象
#作 者:************
#学 号:************
#日 期:2022.05.01
#思 路:定义一个Student类,并创建一个对象,输出相关成员信息
class Student:
    def __init__(self,xingming,nianling,fenshu):#定义类的属性
        self.xingming=xingming#姓名
        self.fenshu=fenshu#分数
        self.nianling=nianling#年龄
    def get_name(self):
        return self.xingming#获取姓名
    def get_age(self):
        return self.nianling#获取年龄
    def get_course(self):
        return max(self.fenshu)#获取分数
zm = Student('zhangming',20,[69,88,100])#实例化对象
print(zm.get_name(),zm.get_age(),zm.get_course())#输出

运行截图:
图片描述

  1. 设计一个Circle(圆)类,包括圆心位置、半径、颜色等属性。编写构造方法和其他方法,计算周长和面积。请编写程序验证Circle(圆)类的功能。
#程序名:2.py
#功 能:定义一个Circle类,并实例化一个对象
#作 者:************
#学 号:************
#日 期:2022.05.01
#思 路:定义一个Circle类,并创建一个对象,并输出圆的属性
import math
class Circle:
    def __init__(self,yuanxin,banjing,yanse):#定义类的属性
        self.yuanxin=yuanxin#圆心
        self.banjing=banjing#半径
        self.yanse=yanse#颜色
    def get_zhouchang(self):
        return round(2 * math.pi * self.banjing, 2)#获取圆的周长
    def get_mainji(self):
        return round(math.pi * self.banjing ** 2, 2)#获取圆的面积
circle = Circle((3, -2), 4, "red")
print("圆的属性有:圆心位置为{},半径为{},颜色为{}".format(circle.yuanxin, circle.banjing, circle.yanse))#输出圆的属性
print("此圆的周长为{},面积{}".format(circle.get_zhouchang(), circle.get_mainji()))#输出面积和周长

运行截图:
图片描述

  1. 封装一个学生类,有姓名,有年龄,有性别,有英语成绩,数学成绩,语文成绩;求总分,平均分,以及打印输出学生的相关信息。
#程序名:3.py
#功 能:定义一个Student类,并实例化一个对象
#作 者:************
#学 号:************
#日 期:2022.05.01
#思 路:定义一个Student类,并创建一个对象,并输出对象的属性
class Student:
    def __init__(self,xingming,nianling,xingbie,fenshu):#定义类的属性
        self.xingming=xingming#姓名
        self.fenshu=fenshu#分数
        self.xingbie=xingbie#性别
        self.nianling=nianling#年龄
    def get_zongfen(self):
        return sum(self.fenshu)#获取总分
    def get_pingjinfen(self):
        return sum(self.fenshu)/len(self.fenshu)#获取平均分
zm = Student('zhangming',20,'男',[69,88,100])
s1 = Student('lisi', 20, 'male', [77, 88, 99])#创建对象
print("姓名:{},年龄:{},性别:{},成绩:英语{} 数学{} 语文{}"
      .format(s1.xingming, s1.nianling, s1.xingbie, s1.fenshu[0], s1.fenshu[1], s1.fenshu[2]))#输出对象的属性
print("该学生的总分为{},平均分为{}".format(s1.get_zongfen(), s1.get_pingjinfen()))

运行截图:
图片描述

  1. 设计一个Person类,属性有姓名、年龄、性别,创建方法personInfo,打印输出这个人的信息;创建Student类,继承Person类,属性有学院college,班级Group,重写父类PersonInfo方法,调用父类方法打印输出个人信息,将学生的学院、班级信息也打印输出出来。
#程序名:4.py
#功 能:定义一个Person类,实例化一个Person对象,Student类继承Person类,并实例化一个Student类对象,输出对象的相关属性
#作 者:************
#学 号:************
#日 期:2022.05.01
#思 路:定义一个Person类,实例化一个Person对象,Student类继承Person类,并实例化一个Student类对象,输出对象的相关属性
class Person:
   def __init__(self,xingming,xingbie,nianling):#定义类的属性
      self.xingming = xingming#姓名
      self.xingbie = xingbie#性别
      self.nianling = nianling#年龄
   def personInfo(self):
      print("姓名:{},年龄:{},性别:{}".format(self.xingming, self.xingbie, self.nianling))#输出Person对象的属性
class Student(Person):#
   def __init__(self,xingming,xingbie,nianling,Group,college):
      super().__init__(xingming,xingbie,nianling)
      self.college=college
      self.Group=Group#定义类的属性
   def personInfo(self):
      print("姓名:{} 年龄:{} 性别:{} 班级:{} 学院:{}".format(self.xingming, self.xingbie, self.nianling, self.Group, self.college))#输出Student对象的属性
s1 = Person('李四', 20, 'male')
s1.personInfo()
s2 = Student('张三', 20, 'male', '22-10', '软件学院')
s2.personInfo()

运行截图:
图片描述

  1. 定义一个交通工具(Vehicle)的类,属性:速度(speed)、体积(size)等等。方法:移动move()、设置速度setSpeed(int speed)、加速speedUp()、减速speedDown()等等。实例化一个交通工具对象,通过方法初始化speed、size的值并且在相关方法中可以打印输出出来;另外调用加速减速的方法对速度进行改变。
#程序名: 5.py
#功 能:定义一个Vehicle类,定义加速,减速,启动,停车,设置车速,打印对象信息的相关函数,实例化对象,输出相关结果
#作 者:************
#学 号:************
#日 期:2022.05.01
#思 路:定义一个Vehicle类,定义加速,减速,启动,停车,设置车速,打印对象信息的相关函数,实例化对象,输出相关结果
class Vehicle:
    def __init__(self,speed,size):#定义类的属性
        self.speed=speed#车速
        self.size=size#车的大小
    def printInfo(self):
        print("这辆车的车速为{},体积为{}".format(self.speed,self.size))#输出对象属性
    def setSpeed(self,speed):
        self.speed=speed#设置车速
    def move(self):
        print("点火中")
        self.setSpeed(10)
        print("小车开始移动,车速为{}".format(self.speed))#车移动
    def stop(self):
        self.setSpeed(0)
        print("小车停止移动")#车停止
    def speedUp(self, num):#加速
        if self.speed + num >= 120:
            self.setSpeed(120)
            print("速度已达最大限度,当前车速为120")
        else:
            self.setSpeed(self.speed + num)
            print("小车已加速,当前车速为{}".format(self.speed))
    def speedDown(self, num):#减速
        if self.speed - num < 0:
            self.stop()
        else:
            self.setSpeed(self.speed - num)
            print("小车已减速,当前车速为{}".format(self.speed))
car = Vehicle(0, 8)
car.printInfo()
car.move()
car.setSpeed(50)
car.speedUp(20)
car.speedUp(60)
car.speedDown(20)
car.stop()

运行截图:

图片描述

##五、实验小结

###问题与解决办法:

  1. 问题:编译出错,提示:引用π的值。

解决办法:导入math模块。

  1. 问题:不知道如何定义构造函数。

解决办法:在类中对_init_函数进行重载。

  1. 问题:不知道如何通过定义继承类。

解决办法:查找资料后得知,定义类时在圆括号里填入父类。

  1. 问题:不知道self参数的用法。

解决办法:self参数代表对象本身,类的所有实例方法都必须至少有一个名为self的参数。

###心得体会:

  1. 多翻阅Python书籍有利于对语法的进一步掌握。

  2. 我们应当养成自主学习的习惯,提高自己搜索信息的能力,利用好网络带给我们的便利。

  3. 有自己难以解决的问题,要积极向老师同学请教。

  4. 在学习过程中,及时记录自己遇到问题和解决方法,以便日后查看回顾。

  5. Python学习需要不仅需要扎实的语法基础,还需要充足的实践。

  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值