7-10 图形卡片排序游戏 分数 40 作者 段喜龙 单位 南昌航空大学 掌握类的继承、多态性使用方法以及接口的应用。详见作业指导书 2020-OO第07次作业-1指导书V1.0.pdf 输入格式: 首先,在一行上输入一串数字(1~4,整数),其中,1代表圆形卡片,2代表矩形卡片,3代表三角形卡片,4代表梯形卡片。各数字之间以一个或多个空格分隔,以“0”结束。例如: 1 3 4 2 1 3 4 2 1 3 0 然后根据第一行数字所代表的卡片图形类型,依次输入各图形的相关参数,例如:圆形卡片需要输入圆的半径,矩形卡片需要输入矩形的宽和长,三角形卡片需要输入三角形的三条边长,梯形需要输入梯形的上底、下底以及高。各数据之间用一个或多个空格分隔。 输出格式: 如果图形数量非法(小于0)或图形属性值非法(数值小于0以及三角形三边不能组成三角形),则输出Wrong Format。 如果输入合法,则正常输出,所有数值计算后均保留小数点后两位即可。输出内容如下: 排序前的各图形类型及面积,格式为图形名称1:面积值1图形名称2:面积值2 …图形名称n:面积值n ,注意,各图形输出之间用空格分开,且输出最后存在一个用于分隔的空格; 排序后的各图形类型及面积,格式同排序前的输出; 所有图形的面积总和,格式为Sum of area:总面积值。
时间: 2023-06-14 11:03:43 浏览: 534
对于这道题,我们需要用到面向对象的思想,即定义一个基类,然后派生出不同的子类。每个子类都可以计算自己的面积,并且根据基类定义的接口可以进行排序操作。
以下是一个可能的实现,仅供参考。
```python
import math
class Shape:
def __init__(self):
pass
def area(self):
pass
def __lt__(self, other):
return self.area() < other.area()
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def area(self):
return math.pi * self.radius ** 2
def __str__(self):
return "Circle:{:.2f}".format(self.area())
class Rectangle(Shape):
def __init__(self, width, height):
self.width = width
self.height = height
def area(self):
return self.width * self.height
def __str__(self):
return "Rectangle:{:.2f}".format(self.area())
class Triangle(Shape):
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
def area(self):
p = (self.a + self.b + self.c) / 2
return math.sqrt(p * (p - self.a) * (p - self.b) * (p - self.c))
def __str__(self):
return "Triangle:{:.2f}".format(self.area())
class Trapezoid(Shape):
def __init__(self, a, b, h):
self.a = a
self.b = b
self.h = h
def area(self):
return (self.a + self.b) * self.h / 2
def __str__(self):
return "Trapezoid:{:.2f}".format(self.area())
def input_shapes():
shapes = []
while True:
nums = input().split()
if nums[-1] == "0":
break
for num in nums:
if not num.isdigit() or int(num) < 1 or int(num) > 4:
print("Wrong Format")
return []
shape_type = int(nums[0])
if shape_type == 1:
if len(nums) != 2 or not nums[1].isdigit() or int(nums[1]) < 1:
print("Wrong Format")
return []
shapes.append(Circle(int(nums[1])))
elif shape_type == 2:
if len(nums) != 3 or not nums[1].isdigit() or int(nums[1]) < 1 or not nums[2].isdigit() or int(nums[2]) < 1:
print("Wrong Format")
return []
shapes.append(Rectangle(int(nums[1]), int(nums[2])))
elif shape_type == 3:
if len(nums) != 4 or not nums[1].isdigit() or int(nums[1]) < 1 or not nums[2].isdigit() or int(nums[2]) < 1 or not nums[3].isdigit() or int(nums[3]) < 1:
print("Wrong Format")
return []
a, b, c = int(nums[1]), int(nums[2]), int(nums[3])
if a + b <= c or a + c <= b or b + c <= a:
print("Wrong Format")
return []
shapes.append(Triangle(a, b, c))
elif shape_type == 4:
if len(nums) != 4 or not nums[1].isdigit() or int(nums[1]) < 1 or not nums[2].isdigit() or int(nums[2]) < 1 or not nums[3].isdigit() or int(nums[3]) < 1:
print("Wrong Format")
return []
shapes.append(Trapezoid(int(nums[1]), int(nums[2]), int(nums[3])))
return shapes
shapes = input_shapes()
if shapes:
print("Before sorted:", end=" ")
for shape in shapes:
print(str(shape), end=" ")
print()
shapes.sort()
print("After sorted:", end=" ")
for shape in shapes:
print(str(shape), end=" ")
print()
total_area = sum([shape.area() for shape in shapes])
print("Sum of area:{:.2f}".format(total_area))
```
注意,以上代码只是一种实现方式,可能存在漏洞和可以优化的地方。在实际使用中,需要根据具体情况进行修改和完善。
阅读全文