【Python】PTA--面向对象

6-1 设计Shape基类及Circle, Rectangle继承类

设计一个基类Shape,包括:

  1. 名为sName的属性(图形名称);
  2. 构造函数应对sName属性进行初始化。

设计Shape的继承类Rectangle, 包括:

  1. 长,宽两个属性;
  2. 构造函数调用Shape的构造函数,并初始化长,宽两个属性;
  3. getArea()成员函数计算并返回矩形面积。

设计Shape的继承类Circle,包括:

  1. 半径属性;
  2. 构造函数调用Shape的构造函数,并初始化半径属性;
  3. getArea()成员函数计算并返回圆形面积。

注意:请注意阅读测试样例程序以理解题目对类的接口的要求。

类接口定义:

class Shape: 
... 
class Rectangle(Shape): 
... 
class Circle(Shape): 
...

裁判测试程序样例:

s1 = Shape("shape0")
s = input()  #矩形名称
w = float(input()) #矩形宽度
h = float(input()) #矩形高度
r1 = Rectangle(s,w,h)
s = input()  #圆的名称
r = float(input()) #圆的半径
c1 = Circle(s,r)

print(s1.sName)
print("矩形%s面积: %.2f" % (r1.sName,r1.getArea()))
print("圆形%s面积: %.2f" % (c1.sName,c1.getArea()))

输入样例:

Jupyter
12.1
9.9
Moon
3.3

输出样例:

shape0
矩形Jupyter面积: 119.79
圆形Moon面积: 34.21

 代码:答案

class Shape:
    def __init__(self,sName):
        self.sName = sName

class Rectangle(Shape):     #父类
    
    def __init__(self,name,long,wide):          #构造方法,__init__特殊成员
        self.sName = Shape.sName = name
        self.long = long        #初始化
        self.wide = wide
    def getArea(self):                  #实例方法,直接self,无需传入参
        sum = self.long * self.wide
        return sum
        
class Circle(Shape):
    def __init__(self,name,radii):
        self.sName = Shape.sName = name
        self.radii = radii
    def getArea(self):
        sum = 3.141 * self.radii **2    #**2,平方
        return sum

6-2 定义并实现身体质量指数类

按图施工,设计下述BMI类,用于计算身体质量指数。该指数等于体重(kg)除以身高(米)的平方。

相应的判定标准如下图所示。

BMI类接口定义:

class BMI: 
...

其中,name为姓名,age为年龄,height为身高,单位为米,weight为体重,单位为kg。
getBMI()函数返应计算所得的身体质量指数;
getStatus()返回评价结果,其值应为超轻/标准/超重/肥胖之一。

裁判测试程序样例:

sName = input()  #输入姓名
iAge = int(input()) #输入年龄
fHeight = eval(input())  #输入身高,预期为浮点数,单位米
fWeight = eval(input())  #输入体重,预期为浮点数,单位千克
bmi=BMI(sName,iAge,fHeight,fWeight) #实例化BMI类
print("Name:",bmi.name)
print("Age:",bmi.age)
print("BMI = %.3f" % bmi.getBMI())
print("Result =",bmi.getStatus())

输入样例:

Alex
27
1.75
68

输出样例:

Name: Alex
Age: 27
BMI = 22.204
Result = 标准

 代码:答案

class BMI:
    def __init__(self,name,age,height,weight):
        self.name = name
        self.age = age
        self.height = height
        self.weight = weight
    def getBMI(self):           #指数计算
        self.sum = self.weight / self.height**2 
        return self.sum
    def getStatus(self):        #判定身体质量指数
        if self.sum < 18:        #有python3.10的可以用match...case
            return '超轻'
        elif self.sum < 25:
            return '标准'
        elif self.sum < 27:
            return '超重'
        else:
            return '肥胖'

6-3 定义并实现Book类及其__del__函数

图书馆里有很多的书, 请定义一个名为Book的类。该类的属性包括书名(字符串),书号(字符串),单价(浮点数);该类的构造函数接受书名,书号及单价三个参数并参成对象初始化;该类的__del__()函数则向终端打印如下信息:
Book destroyed-书名,书号,单价
注意:单价保留两位小数。

类接口定义:

class Book: 
...

裁判测试程序样例:

sName = input()  #输入书名
sNo = input() #输入书号
fPrice = float(input())   #输入单价
b = Book(sName,sNo,fPrice)
b = None   #触发b对象的__del__方法的执行

输入样例:

Python编程基础及应用
888-999
43.678

输出样例:

Book destroyed-Python编程基础及应用,888-999,43.68

 代码:答案

class Book:
    def __init__(self,name,No,price):
        self.name = name
        self.No = No
        self.price = price
    def __del__(self) -> None:
       print('Book destroyed-{},{},{:.2f}'.format(self.name,self.No,self.price))

 6-4 设计一个股票类

设计一个名为Stock的类来表示一个公司的股票,包括以下内容:

1)股票代码、股票名称、前一天股票价格、当天股票价格4个私有属性;

2)构造方法,需初始化代码、名称、前一天价格和当天价格等属性;

3)返回股票名字的get方法;

4)返回股票代码的get方法;

5)获取和设置股票前一天价格的get和set方法;

6)获取和设置股票当前价格的get和set方法;

7)名为getChangePercent()方法,返回前日收市价至当前价格的变化百分比;

8). 包括文档字符串,其内容为:"Stock Information Class"

说明:各方法的名称及参数要求请参见测试程序。

类接口定义:

class Stock:
...

裁判测试程序样例:

sCode = input() #输入代码
sName = input() #输入名称
priceYesterday = float(input())  #输入昨日价格
priceToday = float(input())  #输入今日价格
s = Stock(sCode,sName,priceYesterday,priceToday)
print("代码:",s.getCode())
print("名称:",s.getName())
print("昨日价格:%.2f\n今天价格:%.2f" % (s.getPriceYesterday(),s.getPriceToday()))
s.setPriceYesterday(50.25)
print("修正昨日价格为:%.2f" % 50.25)
print("价格变化百分比:%.2f%%" % (s.getChangePercent()*100))
print(Stock.__doc__)

输入样例:

601318
中国平安
63.21
64.39

输出样例:

代码: 601318
名称: 中国平安
昨日价格:63.21
今天价格:64.39
修正昨日价格为:50.25
价格变化百分比:28.14%
Stock Information Class

 代码:答案

class Stock:
    def __init__(self,code,name,yesd_price,tod_price):
        self.__code = code                      #__私有
        self.__name = name
        self.__yesd_price = yesd_price
        self.__tod_price = tod_price
    def getCode(self):          #代码
        return self.__code
    def getName(self):          #名字
        return self.__name
    def getPriceYesterday(self):                #前一天
        return self.__yesd_price
    def setPriceYesterday(self,new_price):      #更新
        self.__yesd_price = new_price
    def getPriceToday(self):                    #今天
        return self.__tod_price
    def setPriceToday(self,new_price):          #更新
        self.__tod_price = new_price
    def getChangePercent(self):
        return (self.__tod_price - self.__yesd_price) / self.__yesd_price
    __doc__ = 'Stock Information Class'

 

 有更优解,可以在下方评论!欢迎各位大佬指导!谢谢

共同成长!高处相见

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值