Point类是平面二维点类:私有属性普通字段x,y(表示每个点的坐标);方法有四个:init__初始化方法(用来初始化点 坐标x,y),获取私有普通字段x,y的方法Get X与Get Y(用来获取私有普通字段x,y的值)、专有方法__Str(用格式化输出点信息)等必要的方法。
Circle类是表示平面圆类。Circle类有:私有属性普通字段center(圆心)、radius(半径),方法有三个:__init__初始化方法(用来初始化圆心、与半径)。方法GetStatistics计算该圆与二维点集的位置关系,位置关系有:“圆上、圆外、圆内”三种关系)
函数接口定义:
在这里描述定义两个完整类Point 与 类Circle:
class Point:
class Circle:
Point类是表平面二维点类,PointSet类是表平面二维点集类,需要考生完整定与实现(包括类声明语句class Point:,class Circle:)
裁判测试程序样例:
/* 您的答案将嵌入到这里 */
在这里给出类被调用进行测试的例子:
if __name__ == "__main__":
Pointlist=[]
n=eval(input()) #读入整数n
for i in range(n): # 读入n个点
x,y=eval(input())
Pointlist.append(Point(x, y))
cx,cy,r=eval(input()) #读入圆心坐标与半径
cir=Circle(cx,cy,r)
Pdict=cir.GetStatistics(Pointlist)
print('点集为:',end='')
for i in range(0, len(Pointlist)): # 在一行输出各个点坐标
print(Pointlist[i],end=' ')
print() #换行
print('圆: 圆心{},半径({})'.format(cir.center,cir.radius))
print('统计结果为:',end='')
print(Pdict) #输出统计的点位置关系
输入样例1:
在这里给出一组输入。例如:
1
0,1
0,0,1
输出样例1:
在这里给出相应的输出。例如:
点集为:(0,1)
圆: 圆心(0,0),半径(1)
统计结果为:{'圆上': 1}
输入样例2:
在这里给出一组输入。例如:
6
5,5
1,2
3,4
5,0
3,2
-4,2
0,0,5
输出样例2:
在这里给出相应的输出。例如:
点集为:(5,5) (1,2) (3,4) (5,0) (3,2) (-4,2)
圆: 圆心(0,0),半径(5)
统计结果为:{'圆外': 1, '圆内': 3, '圆上': 2}
代码如下:
class Point:
def __init__(self,x,y):
self.x = x
self.y = y
def __str__(self):
return "(" + str(self.x) + ',' + str(self.y) + ')'
class Circle:
def __init__(self,x,y,radius):
self.center = Point(x,y)
self.radius = radius
def GetStatistics(self,Pointlist):
pridic = {}
for i in Pointlist:
if (i.x - self.center.x)**2 + (i.y - self.center.y)**2 > self.radius ** 2:
if "圆外" not in pridic:
pridic["圆外"] = 1
else:
pridic["圆外"] += 1
elif (i.x - self.center.x)**2 + (i.y - self.center.y)**2 < self.radius ** 2:
if "圆内" not in pridic:
pridic["圆内"] = 1
else:
pridic["圆内"] += 1
else:
if "圆上" not in pridic:
pridic["圆上"] = 1
else:
pridic["圆上"] += 1
return pridic