7-1 sdut-oop-2 Shift Dot(类和对象)

给出平面直角坐标系中的一点,并顺序给出n个向量,求该点根据给定的n个向量位移后的位置。
设计点类Point,内含:
(1)整型属性x和y,表示点的横坐标和纵坐标;
(2)带参构造方法,便于使用初始值构造该类对象;
(3)点移动的方法move(x1,y1),其 中x1和y1表示移动的向量,该方法返回移动后的新的点对象;
(4)展示点对象的字符串方法toString(),以“(横坐标,纵坐标)”的形式。

输入格式:

多组输入。
第一行是三个整数x,y,n,表示点的坐标(x,y),和向量的个数n。
接下来n行,每行两个数xi,yi,表示第i个向量。
题目中所有数据不会超出整型范围。

输出格式:

多组输入。
第一行是三个整数x,y,n,表示点的坐标(x,y),和向量的个数n。
接下来n行,每行两个数xi,yi,表示第i个向量。
题目中所有数据不会超出整型范围。

输入样例:

0 0 1
2 3
0 0 2
1 2
2 3
 

输出样例:

(2,3)
(3,5)

答案:

class Point:
    # _init_表示“出生时自动执行”,self表示“我自己”
    def __init__(self,x,y):
        self.x=x
        self.y=y

    def move(self,x1,y1):# x1,y1是要移动的向量
        return Point(self.x+x1,self.y+y1)

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

while True:
    try:
        # 读取一行数据,strip去头去尾,split切分
        x,y,n=map(int,input().split())
        p=Point(x,y)
        # 因为有n个向量,所以要循环n次,每次读一个向量并移动
        for i in range(n):
            x1,y1=map(int,input().split())
            p=p.move(x1,y1)
        # 输出
        print(p.toString())
    # 一定不要忘了except
    except EOFError:
        break

7-3 sdut-谁是最强的女汉子

众所周知,一年一度的女汉子大赛又来啦。由于最近女汉子比较流行,所以参加女汉子比赛的人数变得很多很多。所以赛事组找来了你,让你写一个程序找出谁是最强的女汉子。

大家都知道,越是不漂亮的女生就越容易成为女汉子(漂亮的怎么会成为汉子?),而越是力量大的女生也越成为女汉子(毕竟女汉子还是比较有力量的)。

所以,就给女汉子两个属性,一个是漂亮值x,一个是力量值y。当然x的值越大,就代表这个女生就越漂亮。现在想让你求出来最不漂亮的女生有多少个,她们的力量和是多少。

输入格式:

先输入一个T,代表有T个人(T<10000)。

接下来T行,每行有两个数字x,y,分别代表这个女汉子的漂亮值和力量值(x,y<2*109) 。中间有1个空格分隔。

输出格式:

输出一行,有两个数字,分别代表最强的女汉子的数量,和她们的力量和。中间用1个空格分隔。

输入样例:

5

1 1

2 2

1 4

2 10

10 100

输出样例:

2 5

答案:

class Girl:
    def __init__(self,x,y):
        self.x=x
        self.y=y
    
T=int(input())
# 存放所有女生
girls=[]
# 读取这T个女生的数据
for i in range(T):
    x,y=map(int,input().split())
    girls.append(Girl(x,y))
# 找出最小的漂亮值x
minx=100000
for i in girls:
    if i.x<minx:
        minx=i.x
# 统计漂亮值最低的女生的数量和她们的力量和:
num=0
cnt=0
for i in girls:
    if i.x==minx:
        num+=1
        cnt+=i.y
# 输出
print(num,cnt)

7-4 sdut-oop-5 计算长方体和四棱锥的表面积和体积(类的继承)

从图中观察,可抽取长方体和四棱锥两种立体图形的共同属性到父类Rect中:长度:l 宽度:h 高度:z。

编程要求:

(1)在父类Rect中,定义求底面周长的方法length( )和底面积的方法area( )。

(2)定义父类Rect的子类立方体类Cubic,计算立方体的表面积和体积。其中表面积area( )重写父类的方法。

(3)定义父类Rect的子类四棱锥类Pyramid,计算四棱锥的表面积和体积。其中表面积area( )重写父类的方法。

(4)在主程序中,输入立体图形的长(l)、宽(h)、高(z)数据,分别输出长方体的表面积、体积、四棱锥的表面积和体积。

提示:

(1)四棱锥体积公式:V=31​Sh,S——底面积 h——高

(2)在Java中,利用Math.sqrt(a)方法可以求得a的平方根(方法的参数及返回结果均为double数据类型)

(3)在Python中,利用math模块的sqrt(a)方法,求得a的平方根。

输入格式:

输入多行数值型数据(double);

每行三个数值,分别表示l、h、z,数值之间用空格分隔。

若输入数据中有0或负数,则不表示任何图形,表面积和体积均为0。

输出格式:

行数与输入相对应,数值为长方体表面积 长方体体积 四棱锥表面积 四棱锥体积(中间有一个空格作为间隔,数值保留两位小数)。

输入样例:

1 2 3

0 2 3

-1 2 3

3 4 5

输出样例:

22.00 6.00 11.25 2.00

0.00 0.00 0.00 0.00

0.00 0.00 0.00 0.00

94.00 60.00 49.04 20.00

答案:

from math import *
class Rect:
    def __init__(self,l,h,z):
        self.h=h
        self.l=l
        self.z=z
# Cubic是Rect的子类
class Cubic(Rect):
    def __init__(self, l,h,z):
        super().__init__(l,h,z)
        # 注意结果保留两位小数
    def area(self):  # 重写父类方法,下面的if不可省略
        if self.l==0 or self.h==0 or self.z==0:
            return 0.0
        return ( (self.l*self.h)+(self.l*self.z)+(self.h*self.z) )*2.0
    def v1(self):
        if self.l==0 or self.h==0 or self.z==0:
            return 0.0
        return (self.l*self.h*self.z)
class Pyramid(Rect):
    def __init__(self, l,h,z):
        super().__init__(l,h,z)
    def area(self):  # 重写父类方法
        if self.l==0 or self.h==0 or self.z==0:
            return 0.0
        a=self.l*self.h
        # 三角形面积公式是1/2*底*高
        c1=(sqrt(self.z**2+(self.l/2)**2)*self.h)/2.0
        c2=(sqrt(self.z**2+(self.h/2)**2)*self.l)/2.0
        return  a+(c1+c2)*2.0
    def v2(self):
        if self.l==0 or self.h==0 or self.z==0:
            return 0.0
        return (self.h*self.l*self.z)/3.0
while True:
    try:
        l,h,z=map(float,input().split())
        c=Cubic(l,h,z)
        p=Pyramid(l,h,z)
        print("%.2f %.2f %.2f %.2f"%(c.area(),c.v1(),p.area(),p.v2()))
    except Exception:
        break

7-5 sdut-oop-6 计算各种图形的周长(多态)

定义接口或类 Shape,定义求周长的方法length()。

定义如下类,实现接口Shape或父类Shape的方法。

(1)三角形类Triangle (2)长方形类Rectangle (3)圆形类Circle等。

定义测试类ShapeTest,用Shape接口(或类)定义变量shape,用其指向不同类形的对象,输出各种图形的周长。并为其他的Shape接口实现类提供良好的扩展性。

提示: 计算圆周长时PI取3.14。

输入格式:

输入多组数值型数据(Python类型float,Java类型double);

一行中若有1个数,表示圆的半径;

一行中若有2个数(中间用空格间隔),表示长方形的长度、宽度。

一行中若有3个数(中间用空格间隔),表示三角形的三边的长度。(需要判断三个边长是否能构成三角形)

若输入数据中有0或负数,则不表示任何图形,周长为0。

输出格式:

行数与输入相对应,数值为根据每行输入数据求得的图形的周长。

输入样例:

在这里给出一组输入。例如:

1

2 3

4 5 6

2

-2

-2 -3

输出样例:

在这里给出相应的输出。例如:

6.28

10.00

15.00

12.56

0.00

0.00

答案:

class Shape:
    def length(self):
        pass
# 三角形类
class Triangle(Shape):
    def __init__(self,x,y,z):
        if x<=0 or y<=0 or z<=0 or (not(x+y>z and x+z>y and y+z>x)):
            # 答案为小数
            self.x,self.y,self.z=0.0,0.0,0.0
        else:
            self.x,self.y,self.z=x,y,z
    def length(self):
        return self.x+self.y+self.z
# 长方形类
class Rectangle(Shape):
    def __init__(self,x,y):
        if x<=0 or y<=0:
            self.x,self.y=0.0,0.0
        else:
            self.x,self.y=x,y
    def length(self):
        return 2.0*(self.x+self.y)
# 圆形类
class Circle(Shape):
    def __init__(self,r):
        if r<=0:
            self.r=0.0
        else:
            self.r=r
    def length(self):
        return 2*3.14*self.r

while True:
    try:
        # 读入一行数据,并将其转换为列表
        l=list(map(float,input().split()))
        if len(l)==1:
            r=Circle(l[0])
            print("%.2f"%(r.length()))
        elif len(l)==2:
            rect=Rectangle(l[0],l[1])
            print("%.2f"%(rect.length()))
        elif len(l)==3:
            t=Triangle(l[0],l[1],l[2])
            print("%.2f"%(t.length()))

    except Exception:
        break

7-6 sdut-oop-9 计算长方形的周长和面积(类和对象)

设计一个长方形类Rect,计算长方形的周长与面积。

成员变量:整型、私有的数据成员length(长)、width(宽);

构造方法如下:

(1)Rect(int length) —— 1个整数表示正方形的边长

(2)Rect(int length, int width)——2个整数分别表示长方形长和宽

成员方法:包含求面积和周长。(可适当添加其他方法)

要求:编写主函数,对Rect类进行测试,输出每个长方形的长、宽、周长和面积。

输入格式:

输入多组数据;

一行中若有1个整数,表示正方形的边长;

一行中若有2个整数(中间用空格间隔),表示长方形的长度、宽度。

若输入数据中有负数,则不表示任何图形,长、宽均为0。

输出格式:

每行测试数据对应一行输出,格式为:

长度 宽度 周长 面积(数据之间有1个空格分隔)

输入样例:

在这里给出一组输入。例如:

1

2 3

4 5

2

-2

-2 -3

输出样例:

在这里给出相应的输出。例如:

1 1 4 1

2 3 10 6

4 5 18 20

2 2 8 4

0 0 0 0

0 0 0 0

答案:

class Rect:
    def __init__(self,x,y):
        if x<=0 or y<=0:
            self.x,self.y=0,0
        else:
            self.x,self.y=x,y
    # 长方形
    def length1(self):
        return 2*(self.x+self.y)
    def area1(self):
        return self.x*self.y
    # 正方形
    def length2(self):
        return self.x*4
    def area2(self):
        return self.x**2

while True:
    try:
        # 读取第一行,并转换为列表
        l=list(map(int,input().split()))
        if len(l)==1:
            # 因为Rect类强制有两个参数,当只有一个参数时,第二个用1不影响输出结果
            z=Rect(l[0],1)
            # 是正方形,所以都为z.x
            print(z.x,z.x,z.length2(),z.area2())
        if len(l)==2:
            c=Rect(l[0],l[1])
            print(c.x,c.y,c.length1(),c.area1())
    except Exception:
        break

7-7 sdut-oop-7 答答租车系统(类的继承与多态 面向对象综合练习)

各位面向对象的小伙伴们,在学习了面向对象的核心概念——类的封装、继承、多态之后,答答租车系统开始营运了。

请你充分利用面向对象思想,为公司解决智能租车问题,根据客户选定的车型和租车天数,来计算租车费用,最大载客人数,最大载载重量。

公司现有三种车型(客车、皮卡车、货车),每种车都有名称和租金的属性;其中:客车只能载人,货车只能载货,皮卡车是客货两用车,即可以载人,也可以载货。

下面是答答租车公司的可用车型、容量及价目表:

007.jpg

要求:根据客户输入的所租车型的序号及天数,计算所能乘载的总人数、货物总数量及租车费用总金额。

输入格式:

首行是一个整数:代表要不要租车 1——要租车(程序继续),0——不租车(程序结束);

第二行是一个整数,代表要租车的数量N;

接下来是N行数据,每行2个整数m和n,其中:m表示要租车的编号,n表示租用该车型的天数。

输出格式:

若成功租车,则输出一行数据,数据间有一个空格,含义为:
载客总人数 载货总重量(保留2位小数) 租车金额(整数)
若不租车,则输出:
0 0.00 0(含义同上)

输入样例:

1

2

1 1

2 2

输出样例:

在这里给出相应的输出。例如:

15 0.00 1600

答案:

class Car:
    def __init__(self,m,n):
        self.m,self.n=m,n
    # 关于载客总人数的方法
    def People(self):
        if 1<=self.m<=3 or 6<=self.m<=7:
            return 5*self.n
        elif self.m==4:
            return 51*self.n
        elif self.m==5:
            return 55*self.n
        else:
            return 0
    # 关于载货总重量的方法(小数)
    def Weight(self):
        if self.m==6:
            return 0.45*self.n
        elif self.m==7:
            return 2.0*self.n
        elif self.m==8:
            return 3.0*self.n
        elif self.m==9:
            return 25.0*self.n
        elif self.m==10:
            return 35.0*self.n
        else:
            return 0.0
    # 关于租车金额的方法(整数)
    def Money(self):
        if self.m==1 or self.m==3:
            return 800*self.n
        elif self.m==2:
            return self.n*400
        elif self.m==4:
            return self.n *1300
        elif self.m==5 or self.m==9:
            return self.n *1500
        elif self.m==6:
            return self.n *500
        elif self.m==7:
            return self.n *450
        elif self.m==8:
            return self.n *200
        elif self.m==10:
            return self.n *2000

# 先确认要不要租车
flag=int(input())
# 先假设所有输出都是0
p=0
w=0.00
# 注意不要重名
mon=0
# 如果要租车,接下来的代码才能执行
if flag==1:
    N=int(input())
    for i in range(N):
        m,n=map(int,input().split())
        c=Car(m,n)
        p+=c.People()
        w+=c.Weight()
        mon+=c.Money()
print("%d %.2f %d"%(p,w,mon))

更多推荐