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

分数 10

作者 周雪芹

单位 山东理工大学

给出平面直角坐标系中的一点,并顺序给出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)",表示点的最终点位置的横坐标和纵坐标。

输入样例:

0 0 1

2 3

0 0 2

1 2

2 3

输出样例:

(2,3)

(3,5)

实现代码:

while True:
    try:
        x,y,n=map(int,input().split())
        for i in range(n):
            a,b=map(int,input().split())
            x+=a
            y+=b
        print(f"({x},{y})")
    except:
        break

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

分数 10

作者 周雪芹

单位 山东理工大学

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

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

所以,就给女汉子两个属性,一个是漂亮值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

 实现代码:

n=int(input())
cnt=99
sum=0
aa=0
while n:
    n-=1
    x,y=map(int,input().split())
    if x<cnt:
        cnt=x
        sum=1
        aa=y
    elif x==cnt:
        sum+=1
        aa+=y
print(sum,aa)

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

分数 10

作者 周雪芹

单位 山东理工大学

计算如下立体图形的表面积和体积。

008.jpg

从图中观察,可抽取长方体和四棱锥两种立体图形的共同属性到父类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 sqrt

while True:
    try:
        l,h,z=map(float,input().split())
        if l<=0 or h<=0 or z<=0:
            print("0.00 0.00 0.00 0.00")
        else:
            s1=(l*h+h*z+l*z)*2
            v1=l*h*z
            s2=(l*h+l*sqrt(z**2+(h/2)**2)+h*sqrt(z**2+(l/2)**2))
            v2=v1/3
            print(f"{s1:.2f} {v1:.2f} {s2:.2f} {v2:.2f}")
    except:
        break

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

分数 10

作者 周雪芹

单位 山东理工大学

定义接口或类 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

 实现代码:

while True:
    try:
        numbers=[float(num) for num in input().split()]
        if len(numbers)==1:
            if numbers[0]<=0:
                print("0.00")
            else:
                print(f"{numbers[0]*2*3.14:.2f}")
        elif len(numbers)==2:
            if numbers[0]<=0 or numbers[1]<=0:
                print("0.00")
            else:
                print(f"{(numbers[0]+numbers[1])* 2:.2f}")
        elif len(numbers)==3:
            if numbers[0]<=0 or numbers[1]<=0 or numbers[2]<=0:
                print("0.00")
            elif numbers[0]+numbers[1]<=numbers[2] or numbers[2]+numbers[1]<=numbers[0] or numbers[0]+numbers[2]<=numbers[1]:
                print("0.00")
            else:
                print(f"{(numbers[0]+numbers[1]+numbers[2]):.2f}")
    except:
        break

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

分数 10

作者 周雪芹

单位 山东理工大学

设计一个长方形类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

 实现代码:

while True:
    try:
        n=[int(num) for num in input().split()]
        if len(n)==1:
            if n[0]<=0:
                print("0 0 0 0")
            else:
                print(f"{n[0]} {n[0]} {4*n[0]} {n[0]*n[0]}")
        else:
            if n[0]<=0 or n[1]<=0:
                print("0 0 0 0")
            else:
                print(f"{n[0]} {n[1]} {(n[0]+n[1])*2} {n[0]*n[1]}")
    except:
        break

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

分数 10

作者 周雪芹

单位 山东理工大学

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

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

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

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

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

 实现代码:

n=int(input())
s1=0
s2=0
s3=0
if n==0:
    print("0 0.00 0")
else:
    x=int(input())
    while x:
        x-=1
        a,b=map(int,input().split())
        if a==1:
            s1+=5*b
            s3+=800*b
        elif a==2:
            s1 += 5 * b
            s3 += 400 * b
        elif a==3:
            s1 += 5 * b
            s3 += 800 * b
        elif a==4:
            s1 += 51 * b
            s3 += 1300 * b
        elif a==5:
            s1 += 55 * b
            s3 += 1500 * b
        elif a==6:
            s1 += 5 * b
            s2+=0.45*b
            s3 += 500 * b
        elif a==7:
            s1 += 5 * b
            s2+=2*b
            s3 += 450 * b
        elif a==8:
            s2+=3*b
            s3 += 200 * b
        elif a==9:
            s2+=25*b
            s3 += 1500 * b
        elif a==10:
            s2+=35*b
            s3 += 2000 * b
    print(f"{s1} {s2:.2f} {s3}")
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐