1.设计圆circle和球sphere类,计算圆的周长和面积,球的表面积和体积,并编写测试代码。
class Circle:
def __init__(self,r=0):
self.r=r
def circumference(self):
return 2*3.14*self.r
def area(self):
return 3.14*self.r*self.r
class Sphere(Circle):
def __init__(self,R):
Circle.__init__(self,R)
def square(self):
return 4*3.14*self.r*self.r
def volume(self):
return 4*3.14*self.r*self.r*self.r/3
c=Circle(2)
s=Sphere(2)
print('圆的周长为{},面积为{}'.format(c.circumference(),c.area()))
print('球的表面积为{},体积为{}'.format(s.square(),s.volume()))
2.编写一个公司的工资管理程序。该公司主要有3类人员:经理、销售员、销售经理。要求输入并显示每类人员的编号(从10000号起编号)、姓名和月薪。其中月薪计算方法为:经理固定月薪8000元,销售员为当月销售额的4%,销售经理保底工资5000元另加其所管部门销售额的5%)。
class Person:
def __init__(self,id,name,salary):
self.id=id
self.name=name
self.salary=salary
def getSalary(self):
return self.salary
class Manager(Person):
def getSalary(self):
return 8000
class Salesperson(Person):
def __init__(self,id,name,salary,sales):
super().__init__(id,name,salary)
self.sales=sales
def getSalary(self):
self.salary=self.sales*0.04
return self.salary
class Salesmanager(Person):
def __init__(self,id,name,salary,sales,dsales):
super().__init__(id, name,salary)
self.sales = sales
self.dsales=dsales
def getSalary(self):
self.salary=5000+self.dsales*0.05
return self.salary
person=[Manager(10002,'张三',8000),Salesperson(10001,'李四',0,120000),Salesmanager(10004,'王五',0,6000,120000)]
for p in person:
print('编号:{},姓名:{},月工资:{}'.format(p.id,p.name,p.getSalary()))
3.设计向量(Vector)类,功能如下:
(1)定义带一个列表参数(向量的坐标,可以是任意维度)的构造函数
(2)重载方法__getitem__,返回第i个元素,即第i维坐标
(3)重载方法__add__、__sub__、__abs__,实现向量的运算:加法、减法、大小(模)
(4)定义方法scale()、dot(),实现向量的运算:标量积、点积
(5)重载方法__len__(),返回向量的维度
(6)重载方法__str__(),返回向量的字符串表示
import math
class Vector:
def __init__(self,a=0,b=0):
self.L=[]
self.__a=a
(self.L).append(self.__a)
self.__b=b
(self.L).append(self.__b)
def __getitem__(self,i):
return (self.L)[i]
def __add__(self,v):
a=self.__a+v.__a
b=self.__b+v.__b
return Vector(a,b)
def __sub__(self,v):
a=self.__a-v.__a
b=self.__b-v.__b
return Vector(a,b)
def __abs__(self):
s=pow(self.__a,2)+pow(self.__b,2)
s1=math.sqrt(s)
return s1
def __dot__(self,v):
a=self.__a*v.__a
b=self.__b*v.__b
s=a+b
return s
def __scale__(self, v):
s=self.__a*v.__a+self.__b*v.__b
return s
def __len__(self):
n=len(self.L)
return n
def __str__(self):
return '({},{})'.format(self.__a,self.__b)
c=Vector(2,3)
v=Vector(4,5)
print('c+v={}'.format(c+v))
print('c-v={}'.format(c-v))
print('返回第1个元素:{}'.format(c.__getitem__(1)))
print('向量的模为{}'.format(c.__abs__()))
print('向量的标量积和点积分别为为{}、{}'.format(c.__scale__(v),c.__scale__(v)))
print('向量的维度是{}'.format(c.__len__()))