4.15

时长:三个小时

问题:

8-5 【Python0018】设计并实现平面点类Point
分数 10
作者 doublebest
单位 石家庄铁道大学

【题目描述】定义一个平面点类Point,对其重载运算符关系运算符,关系运算以距离坐标原点的远近作为基准,远的为大。

程序完成对其的测试。
【练习要求】请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释。

代码量:

import math

class Point:
def __init__(self, x=0, y=0):
self.x = x
self.y = y

def distance_from_origin(self):
"""计算点到原点的距离"""
return math.sqrt(self.x ** 2 + self.y ** 2)

def __lt__(self, other):
"""小于运算符重载:判断当前点距离原点是否比另一个点更近"""
return self.distance_from_origin() < other.distance_from_origin()

def __gt__(self, other):
"""大于运算符重载:判断当前点距离原点是否比另一个点更远"""
return self.distance_from_origin() > other.distance_from_origin()

def __le__(self, other):
"""小于等于运算符重载"""
return self.distance_from_origin() <= other.distance_from_origin()

def __ge__(self, other):
"""大于等于运算符重载"""
return self.distance_from_origin() >= other.distance_from_origin()

def main():
points = []
for i in range(3):
while True: # 循环直到获得有效输入
try:
print(f"请输入第{i+1}个点的坐标,格式为 'x y':")
coords = input().strip().split()
if len(coords) != 2 or not all(coord.isdigit() for coord in coords):
raise ValueError("输入格式错误,请确保输入为两个整数,用空格分隔。")
points.append(Point(int(coords[0]), int(coords[1])))
break # 成功则跳出循环
except ValueError as e:
print(f"发生错误:{e} 请重新输入。")

# 确保至少有三个点后进行后续操作
if len(points) == 3:
# 比较并打印结果
print(f"点的坐标从原点出发的远近顺序为:")
for point in sorted(points, key=lambda p: p.distance_from_origin(), reverse=True):
print(f"({point.x}, {point.y})", end=' ')
print("\n")

# 示例比较
print(f"点1与点2的比较:")
print("点1 > 点2" if points[0] > points[1] else "点1 <= 点2")
else:
print("未正确输入所有三个点的坐标。")

if __name__ == "__main__":
main()
posted @ 2024-06-19 17:55  孙锺鸣  阅读(0)  评论(0编辑  收藏  举报