实验5 面向对象编程(精简代码)

发布于:2022-12-21 ⋅ 阅读:(3211) ⋅ 点赞:(3)

【实验目的】

  1. 掌握类、对象概念;
  2. 掌握类的定义以及成员属性、方法设置;
  3. 掌握实例对象的的实现及应用。

【主要仪器设备或实验环境】

  1. Windows 7或以上版本操作系统环境;
  2. Python运行环境;
  3. 常用文本编辑软件。

【实验内容】

完成以下程序编写要求并测试:

1. 设计一个Circle类来表示圆,这个类包含的半径以及求面积、周长的方法。再使用这个类创建半径为1~10的圆,并计算出相应的面积和周长。运行结果如下:

 代码:

import math
class Circle:
    def __init__(self,r):
        self.r=r

    def area(self,r):

        self.r
        return (r *r * math.pi)

    def Perimeter(self,r):
        self.r

        return (2 * r*math.pi)
a=Circle(1)
print("半径为%d" %a.r,"的圆,面积为%6.2f"%a.area(1),"周长为%6.2f"%a.Perimeter(1))
a=Circle(2)
print("半径为%d" %a.r,"的圆,面积为%6.2f"%a.area(2),"周长为%6.2f"%a.Perimeter(2))
a=Circle(3)
print("半径为%d" %a.r,"的圆,面积为%6.2f"%a.area(3),"周长为%6.2f"%a.Perimeter(3))
a=Circle(4)
print("半径为%d" %a.r,"的圆,面积为%6.2f"%a.area(4),"周长为%6.2f"%a.Perimeter(4))
a=Circle(5)
print("半径为%d" %a.r,"的圆,面积为%6.2f"%a.area(5),"周长为%6.2f"%a.Perimeter(5))
a=Circle(6)
print("半径为%d" %a.r,"的圆,面积为%6.2f"%a.area(6),"周长为%6.2f"%a.Perimeter(6))
a=Circle(7)
print("半径为%d" %a.r,"的圆,面积为%6.2f"%a.area(7),"周长为%6.2f"%a.Perimeter(7))
a=Circle(8)
print("半径为%d" %a.r,"的圆,面积为%6.2f"%a.area(8),"周长为%6.2f"%a.Perimeter(8))
a=Circle(9)
print("半径为%d" %a.r,"的圆,面积为%6.2f"%a.area(9),"周长为%6.2f"%a.Perimeter(9))
a=Circle(10)
print("半径为%d" %a.r,"的圆,面积为%6.2f"%a.area(10),"周长为%6.2f"%a.Perimeter(10))

运行结果:

 

2.自定义学生类Student,成员包含:私有实例属性sno、sname、age,私有类属性count,实例方法show(用于显示sno、sname、age信息),类方法classAddCount(实现count属性累加1),静态方法staticShowCount(显示当前count值)。然后完成如下要求:

1) 创建Student对象,访问上述成员方法,然后用类名访问上述成员方法,查看结果。

2) 为Student对象动态增加新属性性别sex

3) 在类外部尝试访问私有实例属性sno

4) 在类中新定义get()方法返回age的值,以及set()方法设置age的新值,age>0时设置成为新值,age<=0时,提示设置年龄不合法。

代码:

class Student:
    __count = 0
    def __int__(self,sno,sname,age):
        self.__sno=sno
        self.__sname=sname
        self.__age=age
    def show(self):
        print("sno:{},sanme:{}.age:{}".format(self.__sno, self.__sname, self.__age))
        return

    @classmethod
    def classAddCount(cls):
        cls.__count =cls.__count+1
        return cls.__count

    @staticmethod
    def staticShowCount():
       print('count=',Student.__count)

    def set(self, age):
        if age > 0:
            self.__age = age
        else:
            print('设置年龄不合法')

    def get(self):
        return self.__age


a=Student()
a.__int__('2040102108','lily',18)
a.show()
a.classAddCount()
a.staticShowCount()
Student.show(a)#需要手动,传递参数
Student.classAddCount()
Student.staticShowCount()
Student.sex='male'
print('sex=',a.sex)
print('sno=',a._Student__sno)
print(list(dir(Student)))


运行结果:

 

3. 水果超市,有苹果、梨子、桃子、橘子...等水果:现需要记录显示每位顾客的水果购买情况;其中水果需要名字、单价属性;顾客需要名字、钱属性以及买水果方法(参数涉及购买水果对象、数量,需要判断钱余额是否足够)。请以面向对象方式设计并编程,实现相关要求。

代码:


class Fruit:
    """水果类"""
    def __init__(self, name, price):
        self.price = price
        self.name = name

    def __str__(self):
        return "{}的价是{}元".format(self.name, self.price)


class Person:
    """人"""
    def __init__(self, name, money):
        self.name = name
        self.money = money

    def __str__(self):
        return "{}有{}元".format(self.name, self.money)

    def buy(self, fruit, quanlity):
        total_money_fruit = fruit.price*quanlity

        if self.money < total_money_fruit:
            print("{}只有{}元,买不了{}元水果".format(self.name, self.money, total_money_fruit))

        else:
            self.money = self.money - total_money_fruit

            print("{}购买{}斤{}成功,还剩{}元".format(self.name, quanlity, fruit.name, self.money))


#if __name__ == '__main__':
def main():
    print('欢迎来到水果超市')
    apple = Fruit('苹果', 8)
    pear = Fruit('梨子', 10)
    peach = Fruit('桃子', 15)
    orange = Fruit('橘子', 3)

    print(apple)
    print(pear)
    print(peach)
    print(orange)
    print('==========================')

    P1= Person('p1', 50)
    P2= Person('p2', 5)
    print(P1)
    print(P2)
    print('===========================')

    P1.buy(apple, 2)
    P1.buy(orange, 1)

    P2.buy(orange, 1)
main()

运行结果:

 


网站公告

今日签到

点亮在社区的每一天
去签到