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)",表示点的最终点位置的横坐标和纵坐标。
输入样例:
0 0 1
2 3
0 0 2
1 2
2 3
输出样例:
(2,3)
(3,5)
class p:
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)
try:
while True:
x,y,n=map(int,input().split())
a=p(x,y)
for i in range(n):
x1,y1=map(int,input().split())
a.move(x1,y1)
print(a.toString())
except Exception:
pass
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
class girls:
def __init__(self,x,y):
self.x=x
self.y=y
l=[]
max=20000000000
cnt=0
sum=0
t=int(input())
for i in range(t):
x,y=map(int,input().split())
a=girls(x,y)
l.append(a)
max=min(max,x)
for i in l:
if i.x==max:
sum+=i.y
cnt+=1
print(cnt,sum)
7-4 sdut-oop-5 计算长方体和四棱锥的表面积和体积(类的继承) 分数 10
计算如下立体图形的表面积和体积。
从图中观察,可抽取长方体和四棱锥两种立体图形的共同属性到父类Rect中:长度:l 宽度:h 高度:z。
编程要求:
(1)在父类Rect中,定义求底面周长的方法length( )和底面积的方法area( )。
(2)定义父类Rect的子类立方体类Cubic,计算立方体的表面积和体积。其中表面积area( )重写父类的方法。
(3)定义父类Rect的子类四棱锥类Pyramid,计算四棱锥的表面积和体积。其中表面积area( )重写父类的方法。
(4)在主程序中,输入立体图形的长(l)、宽(h)、高(z)数据,分别输出长方体的表面积、体积、四棱锥的表面积和体积。
提示:
(1)四棱锥体积公式:V=31Sh,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):
if l<=0 or h<=0 or z<=0:
self.l,self.h,self.z=0.0,0.0,0.0
else:
self.l,self.h,self.z=l,h,z
def length(self):
return (self.l+self.h)*2.0
def area(self):
return (self.l*self.h)
class Cubic(Rect):
def __init__(self,l,h,z):
super(Cubic,self).__init__(l,h,z)
def area1(self):
return ((self.l*self.h)+(self.h*self.z)+(self.l*self.z))*2
def volume1(self):
return (self.l*self.h*self.z)
class Pyramid(Rect):
def __init__(self,l,h,z):
super(Pyramid,self).__init__(l,h,z)
def area2(self):
return self.l*self.h+(self.l*sqrt(self.z**2+(self.h/2)**2))+(self.h*sqrt(self.z**2+(self.l/2)**2))
def volume2(self):
return (self.l*self.h*self.z)/3.00
while True:
try:
l,h,z=map(float,input().split())
#if min(l,h,z)<=0:
# l=h=z=0
c=Cubic(l,h,z)
p=Pyramid(l,h,z)
print("%.2f %.2f %.2f %.2f"%(c.area1(),c.volume1(),p.area2(),p.volume2()))
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
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 (self.x+self.y)*2
class Circle(Shape):
def __init__(self,x):
# if x<=0:
# self.x=0.0
# else:
# self.x=x
self.x=max(x,0)
def length(self):
return 2*3.14*self.x
while True:
try:
l=list(map(float,input().split()))
if len(l)==1:
a=Circle(l[0])
print("%.2f"%(a.length()))
elif len(l)==2:
a=Rectangle(l[0],l[1])
print("%.2f"%(a.length()))
elif len(l)==3:
a=Triangle(l[0],l[1],l[2])
print("%.2f"%(a.length()))
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
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 self.x*4
def area1(self):
return self.x**2
def length2(self):
return (self.x+self.y)*2
def area2(self):
return self.x*self.y
while True:
try:
l=list(map(int,input().split()))
if len(l)==1:
a=Rect(l[0],1)
print(a.x,a.x,a.length1(),a.area1())
elif len(l)==2:
a=Rect(l[0],l[1])
print(a.x,a.y,a.length2(),a.area2())
except:
break
7-7 sdut-oop-7 答答租车系统(类的继承与多态 面向对象综合练习) 分数 10
各位面向对象的小伙伴们,在学习了面向对象的核心概念——类的封装、继承、多态之后,答答租车系统开始营运了。
请你充分利用面向对象思想,为公司解决智能租车问题,根据客户选定的车型和租车天数,来计算租车费用,最大载客人数,最大载载重量。
公司现有三种车型(客车、皮卡车、货车),每种车都有名称和租金的属性;其中:客车只能载人,货车只能载货,皮卡车是客货两用车,即可以载人,也可以载货。
下面是答答租车公司的可用车型、容量及价目表:
要求:根据客户输入的所租车型的序号及天数,计算所能乘载的总人数、货物总数量及租车费用总金额。
输入格式:
首行是一个整数:代表要不要租车 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 Che:
id=0
name='A'
maxpeo=0
weight=0
meo=0
def __init__(self,id,name,maxpeo,weight,meo):
self.id=id
self.name=name
self.maxpeo=maxpeo
self.meo=meo
self.weight=weight
def getMaxpeo(self,n):
return self.maxpeo*n
def getWeight(self,n):
return self.weight*n
def getMeo(self,n):
return self.meo*n
class KeChe(Che):
def __init__(self,id,name,maxpeo,meo):
self.id=id
self.name=name
self.maxpeo=maxpeo
self.meo=meo
class HuoChe(Che):
def __init__(self,id,name,weight,meo):
self.id=id
self.name=name
self.weight=weight
self.meo=meo
ans=[]
ans.append(KeChe(1,"d",5,800))
ans.append(KeChe(2,"d",5,400))
ans.append(KeChe(3,"d",5,800))
ans.append(KeChe(4,"d",51,1300))
ans.append(KeChe(5,"d",55,1500))
ans.append(Che(6,"d",5,0.45,500))
ans.append(Che(7,"d",5,2.0,450))
ans.append(HuoChe(8,"d",3,200))
ans.append(HuoChe(9,"d",25,1500))
ans.append(HuoChe(10,"d",35,2000))
x=int(input())
if x==1:
n=int(input())
sum1=0.0
sum2=0.0
sum3=0.0
for i in range(n):
#a表示要租车的编号,
#b表示租用该车型的天数。
a,b=map(int,input().split())
sum1+=ans[a-1].getMaxpeo(b)
sum2+=ans[a-1].getWeight(b)
sum3+=ans[a-1].getMeo(b)
print(int(sum1),'%.2f' %sum2,int(sum3))
else:
print("0 0.00 0")
方法二:
class Car:
def __init__(self,m,n):
self.m,self.n=m,n
def Number(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
def Money(self):
if self.m==1:
return self.n*800
elif self.m==2:
return self.n*400
elif self.m==3:
return self.n*800
elif self.m==4:
return self.n*1300
elif self.m==5:
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==9:
return self.n*1500
elif self.m==10:
return self.n*2000
flag=int(input())
num,wei,mon=0,0.00,0
if flag==1:
n=int(input())
for i in range(n):
m,n=map(int,input().split())
a=Car(m,n)
num+=a.Number()
wei+=a.Weight()
mon+=a.Money()
print(int(num),'%.2f'%(wei),int(mon))