Python继承和多态

课内实验12(继承和多态)
班级: 学号: 2020212205090 姓名: 缪纪 得分: 50
一、课内实验题(共5小题,50分)
题型得分 50
【描述】
几何对象有许多共同的属性和行为。三角形具有几何图形共有的属性和方法。可以从Shape类派生出Triangle类。Triangle类除了继承了Shape类所有可访问的数据域和方法外,还包括:

三个名为side1、side2、side3的私有数据域,表示三角形的三条边,它们的默认值均为1.0。
构造方法,将三角形三条边设置为给定的参数。
成员方法get_area,返回三角形的面积。
成员方法get_perimeter,返回三角形的周长。
重写特殊方法__str__,返回描述三角形的字符串(三条边长度、颜色、是否填充)。
【输入】
在一行中,输入三角形的三条边,其间以空格分隔。
【输出】
三角形的三条边、颜色以及面积。
【输入示例】

3 4 5
【输出示例】
Color: black
side1 = 3 side2 = 4 side3 = 5
The area is 6.0
【来源】
《Python程序设计基础》第8章编程题1。
(10分)
我的答案:
#coding=utf-8
class Triangle(Shape):
def init(self,side1=1.0,side2=1.0,side3=1.0):
self.side1=side1
self.side2=side2
self.side3=side3
def get_area(self):
p=(self.side1+self.side2+self.side3)/2
return (p*(p-self.side1)(p-self.side2)(p-self.side3))**0.5
def get_perimeter(self):
return self.side1+self.side2+self.side3
def str(self):
return "Color: black\nside1 = “+str(self.side1)+” side2 = “+str(self.side2)+” side3 = "+str(self.side3)

题目得分 10
【描述】
定义一个表示股票信息的类Stock,可以保存股票代码、保存投资者股票交易的累计信息、记录单笔交易信息、计算股票的盈亏状况。Stock类包括:

私有数据域stock_code,用于保存股票代码。
私有数据域total_shares,用于保存股票的总股数。
私有数据域total_cost,用于保存股票的总成本。
构造方法,将股票代码设置为给定的参数,股票的总股数、股票的总成本设置为0。
访问器方法get_stock_code、get_total_shares、get_total_cost,分别用于访问股票代码、股票的总股数、股票的总成本。
成员方法purchase,记录单笔交易信息(总股数、总成本),有两个参数:分别表示股数和股票单价,无返回值。
成员方法get_profit,计算股票的盈亏状况(总股数乘以股票当前价格,然后减去总成本),有一个参数:表示股票当前价格,返回盈亏金额。
分红是上市公司分配给股东的利润分成。红利的多少与股东所持股票的数量成正比。并不是所有股票都有分红,所以不能在Stock类上直接增加这个功能。而应该在Stock类的基础上,派生出一个DividendStock类,并在这个子类中增加分红的行为。Stock类派生出DividendStock类:
增加私有数据域dividends,用于记录分红。
构造方法,将股票代码设置为给定的参数,分红设置为0。
成员方法pay_dividend(),它的参数是每股分红的数量,它的功能是计算出分红的数量(每股分红的数量乘以总股数),并将其加到dividends中。
红利是股东利润的一部分,一个DividendStock对象的利润应该等于总股数乘以股票当前价格,然后减去总成本,再加上分红。因此对于一个DividendStock对象来说,计算利润的方法与Stock有所不同,在定义DividendStock时要重写get_profit方法。
【输入】
第一行为股票代码。
第二行为交易次数n。
下面n行为每笔交易的数量和单价。
接着为每股股票的当前价格。
最后为每股分红的数量。
【输出】
股票的盈亏。
【输入示例】

AMZN
2
50 35.06
25 38.52
37.29
0.75
【输出示例】
Net profit/loss: 137.0
【来源】
《Python程序设计基础》第8章编程题2。
(10分)
我的答案:
#coding=utf-8
class Stock:
def init(self,stock_code=0,total_shares=0,total_cost=0):
self.stock_code=stock_code
self.total_shares=total_shares
self.total_cost=total_cost
def get_stock_code(self):
return stock_code
def get_total_shares(self):
return total_shares
def get_total_cost(self):
return total_cost
def purchase(self,num_shares, price_per_share):
self.total_shares+=num_shares
self.total_cost+=num_shares*price_per_share

def get_profit(self,current_price):
    return self.total_shares*current_price-self.total_cost

class DividendStock(Stock):
def init(self,stock_code,dividends=0):
super().init()
self.stock_code=stock_code
self.dividends=dividends
def pay_dividend(self,amount_per_share):
self.dividends=self.total_sharesamount_per_share
def get_profit(self,n):
return self.total_shares
n-self.total_cost+self.dividends
题目得分 10
【描述】
Screen类:

Screen类的构造方法能够接收屏幕的宽和高两个参数(以像素为单位,宽和高默认值为640和480)并存储在私有数据域width和height中,输出字符串"screen"并换行;
如果宽与高超过1000,或者其它不合理的设置则输出"invalid screen size",然后结束程序运行。
如有必要,可以增加其他数据域及成员方法,如访问器方法和更改器方法。

Rectangle类:

Rectangle类中的数据域有一个唯一与Screen类有关的私有数据域screen,其类型为Screen类型;
Rectangle类的构造方法接受5个参数,其中前4个按照顺序分别为矩形的左上顶点的x、y坐标,以及右下顶点的x、y坐标,此处不做坐标有效性检查,默认值均为原点坐标(0, 0);第5个参数接收Screen类型的对象(默认值None);输出字符串“rectangle”并换行;
Rectangle类中应提供set_coordinations方法用于设置对角线的左侧及右侧顶点坐标,参数和构造方法的前4个参数相同;
Rectangle类中应提供set_screen方法用于设置数据域s;
Rectangle类的draw方法应检查坐标的有效性,确保矩形的顶点坐标是合理的、在前述屏幕的宽和高范围内是可见的(矩形框与屏幕框重合算是不可见、不合理);如果上述坐标不合理,则输出"invalid rectangle"并换行;如果上述坐标合理,则输出矩形的左上顶点的x、y坐标以及矩形的宽度和高度(坐标值以及宽高等4个数值间以1个空格分隔)然后换行;
如有必要,可以增加其他数据域及成员方法。
【输入】
第一行输入屏幕宽和高,其间以空格分隔。
第二行输入矩形左上角和右下角坐标,其间以空格分隔。
【输出】
字符串或者空格分隔的整数
【输入示例】

800 600
30 20 300 200
【输出示例】
screen
rectangle
rectangle
rectangle
30 20 270 180
invalid rectangle
10 300 690 200
sys模块中的exit方法用于强制结束程序。
import sys
sys.exit()
(10分)
我的答案:
import sys
class Screen:
def init(self,width=640,height=480):
self.width=width
self.height=height
if(self.width>1000 or self.height>1000 or self.width<=0 or self.height<=0):
print(“invalid screen size”)
sys.exit()
else:
print(“screen”)
class Rectangle(Screen):
def init(self,x1=0,y1=0,x2=0,y2=0,t=“None”):
self.x1=x1
self.y1=y1
self.x2=x2
self.y2=y2
self.t=t
print(“rectangle”)
def set_coordinations(self,x1=0,y1=0,x2=0,y2=0):
self.x1=x1
self.y1=y1
self.x2=x2
self.y2=y2
def set_screen(self,x):
self.t=x
def draw(self):
width=self.x2-self.x1
height=self.y2-self.y1
if(self.t.height<=height or self.t.width<=width or self.x1<=0 or self.x1>=1000 or self.x2<=0 or self.x2>=1000 or self.y1<=0 or self.y1>=1000 or self.y2<=0 or self.y2>=1000 or width>=1000 or height>=1000 or width<=0 or height<=0):
print(“invalid rectangle”)
else:
print(self.x1,end=" “)
print(self.y1,end=” “)
print(width,end=” ")
print(height)
题目得分 10
【描述】
在某个字符串中有左圆括号、右圆括号和大小写字母;规定任何一个左圆括号都从内到外与在它右边且距离最近的右圆括号匹配。编写程序,判断该字符串中左右圆括号匹配是否正确。
【输入】
一行中输入一个字符串。字符串仅有左圆括号、右圆括号和大小写字母构成。
【输出】
若该字符串中左右圆括号匹配,输出True;否则输出False。
【输入示例】

((ABCD(x)
【输出示例】
False
【提示】
可以使用collections模块中的deque类。
【来源】
《Python程序设计基础》第8章编程题4。
(10分)
我的答案:
a=input()
cnt1,cnt2=0,0
len1=len(a)
for i in range(len1):
if a[i]"(":
cnt1+=1
if a[i]
")":
cnt2+=1
if cnt1==cnt2:
print(“True”)
else:
print(“False”)
题目得分 10
【描述】
编写程序,输入一个简单英文句子,统计并输出该句子中元音字母(不区分大小写)出现的次数。
【输入】
一行中输入一个简单英文句子。
【输出】
分行输出该句子中元音字母出现的次数。
【输入示例】
The Python programming language is a general-purpose computer programming language originally developed in 1989.
【输出示例】
a:9
e:10
i:6
o:7
u:4
【提示】
可以使用collections模块的Counter类。
【来源】
《Python程序设计基础》第8章编程题5。
(10分)
我的答案:
mp={}
mp[‘a’]=0
mp[‘e’]=0
mp[‘i’]=0
mp[‘o’]=0
mp[‘u’]=0
a=input()
a=a.lower()
len1=len(a)
for i in range(len1):
if a[i] in mp:
mp[a[i]]+=1
print(“a:%d”%mp[‘a’])
print(“e:%d”%mp[‘e’])
print(“i:%d”%mp[‘i’])
print(“o:%d”%mp[‘o’])
print(“u:%d”%mp[‘u’])
题目得分 10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值