当前位置: 首页 > article >正文

第7章 类与面向对象

6-1 二维平面上的点操作(Python3)

题目描述

设计一个表示二维平面上点的类 Point。该类应该包含以下功能:

  • 两个私有属性 _x_y,分别表示点的横坐标和纵坐标。

  • 一个构造函数 __init__,用于初始化点的坐标。

  • 一个方法 distance_to_origin,返回该点到原点 (0, 0) 的欧几几何距离。

  • 一个方法 move_by,接受两个参数 dxdy,将点的横坐标和纵坐标分别增加 dxdy

  • 一个特殊方法 __str__,返回点的信息字符串,格式为 "Point(x, y)"

函数接口定义(你实现)

class Point:
    def __init__(self, x, y):
        # 初始化点的坐标
        pass
    
    def distance_to_origin(self):
        # 返回点到原点的距离
        pass
    
    def move_by(self, dx, dy):
        # 移动点的位置
        pass
    
    def __str__(self):
        # 返回点的信息字符串
        pass

裁判测试程序样例

def main():
    # 用户输入点的初始坐标 (x, y)
    # 使用 input() 读取一行输入,并用 split() 将其分割成两个字符串
    # 使用 map(float, ...) 将这两个字符串转换为浮点数
    x, y = map(float, input("请输入点的初始坐标 (x y): ").split())
    
    # 创建 Point 类的实例,传入初始坐标 (x, y)
    point = Point(x, y)
    
    # 调用 point 的 distance_to_origin 方法计算点到原点 (0, 0) 的距离
    # 使用 f-string 格式化输出,保留两位小数
    print(f"Distance to origin: {point.distance_to_origin():.2f}")
    
    # 用户输入移动量 (dx, dy)
    # 使用 input() 读取一行输入,并用 split() 将其分割成两个字符串
    # 使用 map(float, ...) 将这两个字符串转换为浮点数
    dx, dy = map(float, input("请输入移动量 (dx dy): ").split())
    
    # 调用 point 的 move_by 方法,将点的位置按 (dx, dy) 移动
    point.move_by(dx, dy)
    
    # 打印移动后的点的信息
    # 调用 point 的 __str__ 方法,返回点的字符串表示
    print(point)

#执行 main 函数
if __name__ == "__main__":
    main()

输入样例

3 4
1 2

输出样例

Distance to origin: 5.00
Point(4.0, 6.0)

实现提示

  • 使用 math.sqrt 来计算欧几里得距离(开根号)。

  • 确保 __str__ 方法返回正确的字符串格式。

 代码

import math  

class Point:  
    def __init__(self, x, y):  
        # 初始化点的坐标  
        self._x = x  
        self._y = y  
    
    def distance_to_origin(self):  
        # 返回点到原点的距离  
        return math.sqrt(self._x**2 + self._y**2)  
    
    def move_by(self, dx, dy):  
        # 移动点的位置  
        self._x += dx  
        self._y += dy  
    
    def __str__(self):  
        # 返回点的信息字符串  
        return f"Point({self._x}, {self._y})"  

 

 6-2 图形面积计算(Python3)

 

图形编辑器

题目描述

设计一个简单的图形编辑器系统,该系统包括以下类:

  • Shape:所有图形的基类。

  • Circle:表示圆形,继承自 Shape

  • Rectangle:表示矩形,继承自 Shape

  • Triangle:表示三角形,继承自 Shape

每个图形类都需要实现以下方法:

  • area():返回图形的面积。

  • perimeter():返回图形的周长。

此外,**题目已经编写好了主程序和测试函数,学生只需实现上述这些方法即可。

函数接口定义(你实现的部分)

class Shape:
    def area(self):
        raise NotImplementedError("This method should be overridden by subclasses")
    
    def perimeter(self):
        raise NotImplementedError("This method should be overridden by subclasses")

class Circle(Shape):
    def __init__(self, radius):
        self.radius = radius
    
    def area(self):
        # 计算并返回圆的面积
        pass
    
    def perimeter(self):
        # 计算并返回圆的周长
        pass

class Rectangle(Shape):
    def __init__(self, width, height):
        self.width = width
        self.height = height
    
    def area(self):
        # 计算并返回矩形的面积
        pass
    
    def perimeter(self):
        # 计算并返回矩形的周长
        pass

class Triangle(Shape):
    def __init__(self, a, b, c):
        self.a = a
        self.b = b
        self.c = c
    
    def area(self):
        # 计算并返回三角形的面积
        pass
    
    def perimeter(self):
        # 计算并返回三角形的周长
        pass

 

裁判测试程序样例(判卷逻辑)

def print_shape_info(shape):
    # 打印给定形状的面积和周长
    print(f"Area: {shape.area():.2f}")
    print(f"Perimeter: {shape.perimeter():.2f}")

def main():
    # 用户输入图形类型和相应的参数
    shape_type = input("")
    
    if shape_type == 'circle':
        radius = float(input(""))
        shape = Circle(radius)
    elif shape_type == 'rectangle':
        width, height = map(float, input("").split())
        shape = Rectangle(width, height)
    elif shape_type == 'triangle':
        a, b, c = map(float, input("").split())
        shape = Triangle(a, b, c)
    else:
        print("未知的图形类型")
        return
    
    # 打印图形的面积和周长
    print_shape_info(shape)

if __name__ == "__main__":
    main()

输入样例 1

circle
5

输出样例 1

Area: 78.54
Perimeter: 31.42

输入样例 2

rectangle
4 6

输出样例 2

Area: 24.00
Perimeter: 20.00

输入样例 3

triangle
3 4 5

输出样例 3

Area: 6.00
Perimeter: 12.00

代码 

import math  

class Shape:  
    def area(self):  
        raise NotImplementedError("This method should be overridden by subclasses")  
    
    def perimeter(self):  
        raise NotImplementedError("This method should be overridden by subclasses")  

class Circle(Shape):  
    def __init__(self, radius):  
        self.radius = radius  
    
    def area(self):  
        # 计算并返回圆的面积  
        return math.pi * (self.radius**2)  
    
    def perimeter(self):  
        # 计算并返回圆的周长  
        return 2 * math.pi * self.radius  

class Rectangle(Shape):  
    def __init__(self, width, height):  
        self.width = width  
        self.height = height  
    
    def area(self):  
        # 计算并返回矩形的面积  
        return self.width * self.height  
    
    def perimeter(self):  
        # 计算并返回矩形的周长  
        return 2 * (self.width + self.height)  

class Triangle(Shape):  
    def __init__(self, a, b, c):  
        self.a = a  
        self.b = b  
        self.c = c  
    
    def area(self):  
        # 计算并返回三角形的面积(海伦公式)  
        s = (self.a + self.b + self.c) / 2  
        return math.sqrt(s * (s - self.a) * (s - self.b) * (s - self.c))  
    
    def perimeter(self):  
        # 计算并返回三角形的周长  
        return self.a + self.b + self.c  

 


http://www.kler.cn/a/594152.html

相关文章:

  • Kotlin v2.1.20 发布,标准库又有哪些变化?
  • 使用Java爬虫根据关键词获取Shopee商品列表?
  • 渲染模式、基础组件、矢量图、样式设置——微信小程序学习笔记
  • 14-图论-多源最短路径Floyd算法
  • 蓝桥杯备考----》贪心之删数问题
  • 当了5年牛马,我开始划水了。。。
  • Spring MVC 参数校验-校验注解
  • 如何用AI轻松制作PPT,提升工作效率和演讲质量
  • Ruby on Rails 中的 Delegated Types(委托类型)
  • v-form标签里的:rules有什么作用。如何定义。
  • Linux应用:Linux的信号
  • 【AVRCP】蓝牙AVRCP协议中的L2CAP互操作性要求深度解析
  • 多模态文档处理新标杆:开源SmolDocling以256M参数精准识别文本、公式、图表
  • 【蓝桥杯速成】| 3.数据结构
  • 嵌入式硬件篇---龙芯PWM生成
  • C/S模型-TCP
  • dfs(二十四)47. 全排列 II
  • Rk3568驱动开发_设备树_9
  • Ubuntu 安装 gdb 错误解决方案
  • 由LAC自动建立L2TP实验