SDUT:Python实验六——面向对象编程题(参考答案)

发布于:2024-05-16 ⋅ 阅读:(65) ⋅ 点赞:(0)
7-1 sdut-oop-2 Shift Dot(类和对象)
class Point:
    def __init__(self, x,y):
        self.x = x
        self.y = y

    def move(self,x1,y1):
        self.x += x1
        self.y += y1

    def toString(self):
        return "({},{})".format(self.x,self.y)

while 1:
    try:
        x,y,n=map(int,input().split())
        a = Point(x,y)
        for i in range(n):
            x1,y1=map(int,input().split())
            a.move(x1,y1)
        print(a.toString())
    except:
        break
7-2 sdut-谁是最强的女汉子
class Girl:
    def __init__(self, x, y):
        self.x = x
        self.y = y
l,Min=[],999999
n=int(input())
for i in range(n):
    x,y = map(int,input().split())
    l.append(Girl(x,y))
    Min = min(Min,x)
sum,cut=0,0
for i in l:
    if i.x==Min:
        sum+=i.y
        cut+=1
print(cut,sum)
7-3 sdut-oop-5 计算长方体和四棱锥的表面积和体积(类的继承)
from math import *
class Rect  :
    def __init__(self, l, h, z) :
        if l<=0 or h<=0 or z<=0:
            self.l,self.h,self.z=0.00,0.00,0.00
        else :self.l,self.h,self.z= l,h,z
    def getLength(self) :
        return (self.l + self.h)*2.0
    def getArea(self) :
        return self.l*self.h
class Cubic(Rect) :
    def __init__(self,l,h,z):
        super().__init__(l,h,z)
    def getVolume1(self):
        return self.l*self.h*self.z
    def getArea1(self):
        return 2.0*((self.l*self.h)+(self.l*self.z)+(self.h*self.z))
class Pyramid(Rect):
    def __init__(self,l,h,z):
        super().__init__(l,h,z)
    def getVolume2(self,):
        return self.l*self.h*self.z/3.0
    def getArea2(self):
        return sqrt(self.z**2+(self.h/2.0)**2)*self.l+sqrt(self.z**2+(self.l/2.0)**2)*self.h+self.l*self.h

while 1:
    try:
        l,h,z=map(float,input().split())
        c=Cubic(l,h,z)
        p=Pyramid(l,h,z)
        print("%.2f %.2f %.2f %.2f"%(c.getArea1(),c.getVolume1(),p.getArea2(),p.getVolume2()))
    except:
        break
7-4 sdut-oop-6 计算各种图形的周长(多态)
class Shape:
    def length(self):
        pass
class Triangle(Shape):
    def __init__(self,a,b,c):
        if a <= 0 or b <= 0 or c <= 0 or (not (a + b > c and a + c > b and b + c > a)):
            self.a,self.b,self.c=0.00,0.00,0.00
        else:self.a,self.b,self.c=a,b,c
    def length(self):
        return self.a+self.b+self.c
class Rectangle(Shape):
    def __init__(self,a,b):
        if a<=0 or b<=0:
            self.a,self.b=0.00,0.00
        else :self.a,self.b=a,b
    def length(self):
        return 2.0*(self.a+self.b)
class Circle(Shape):
    def __init__(self,r):
        self.r=max(r,0)
    def length(self):
        return 2.0*3.14*self.r
while 1:
    try:
       l=list(map(float,input().split()))
       if len(l)==1:
           c=Circle(l[0])
           print("%.2f"%c.length())
       elif len(l)==2:
           r=Rectangle(l[0],l[1])
           print("%.2f"%r.length())
       else:
           t=Triangle(l[0],l[1],l[2])
           print("%.2f"%t.length())
    except:
        break
7-5 sdut-oop-9 计算长方形的周长和面积(类和对象)
class Rect:
    def __init__(self,l,w):
        if l<=0 or w<=0:
            self.l,self.w=0,0
        else :self.l,self.w=l,w
    def area(self):
        return self.l*self.w
    def length(self):
        return 2*(self.l+self.w)
while 1:
    try:
        l=list(map(int,input().split()))
        if len(l)==1:
            r=Rect(l[0],l[0])
            print(r.l,r.w,r.length(),r.area())
        elif len(l)==2:
            r=Rect(l[0],l[1])
            print(r.l,r.w,r.length(),r.area())
    except:
        break
7-6 sdut-oop-7 答答租车系统(类的继承与多态 面向对象综合练习)
class Che:
    max_p=0
    weight=0
    def __init__(self, id, name, max_p, weight, rent):
        self.id = id
        self.name = name
        self.max_p = max_p
        self.weight = weight
        self.rent = rent

    def getMax_p(self, n):
        return self.max_p * n

    def getWeight(self, n):
        return self.weight * n

    def getRent(self, n):
        return self.rent * n

class KeChe(Che):
    def __init__(self, id, name, max_p, rent):
        self.id = id
        self.name = name
        self.max_p = max_p
        self.rent = rent

class HuoChe(Che):
    def __init__(self, id, name, weight, rent):
        self.id = id
        self.name = name
        self.weight = weight
        self.rent = rent

ans = []
ans.append(KeChe(1, "A", 5, 800))
ans.append(KeChe(2, "B", 5, 400))
ans.append(KeChe(3, "C", 5, 800))
ans.append(KeChe(4, "D", 51, 1300))
ans.append(KeChe(5, "E", 55, 1500))
ans.append(Che(6, "F", 5, 0.45, 500))
ans.append(Che(7, "G", 5, 2.0, 450))
ans.append(HuoChe(8, "H", 3, 200))
ans.append(HuoChe(9, "I", 25, 1500))
ans.append(HuoChe(10, "J", 35, 2000))
x = int(input())
if x == 1:
    n = int(input())
    sum1,sum2,sum3=0.00,0.00,0.00
    for i in range(n):
        # a表示要租车的编号,
        # b表示租用该车型的天数。
        a, b = map(int, input().split())
        sum1+=ans[a - 1].getMax_p(b)
        sum2+=ans[a-1].getWeight(b)
        sum3+=ans[a-1].getRent(b)
    print(int(sum1),"%.2f"%sum2,int(sum3))
else:
    print("0 0.00 0")