Lazy loaded image
Task 1 - Robbie the Map Reader
Words 850Read Time 3 min
2025-5-20

Robbie the Map Reader

Robbie 是一个探索火星的机器人。他收到了一份地图文件 geo_features.txt,你需要用 Python 编写两个模块来帮助 Robbie:

📁 文件结构与功能要求:

1. geo_features.py定义地质特征类

  • ✅ 编写一个抽象基类 GeoFeature,用于表示通用的地质特征。
  • ✅ 派生类包括:
    • Mountain
    • Lake
    • Crater
  • ✅ 每个类都应记录位置、名称、类型和相应的数值属性(高度、深度、周长)。

2. task1.py实现命令行交互系统

  • ✅ 读取并解析 geo_features.txt 文件内容:
    • 第一行是地图大小(n_rows, n_cols
    • 后续行是地质特征(位置、类型、名称、数值)
  • ✅ 构建二维地图并存储所有特征
  • ✅ 提供命令行交互支持以下指令:
    • show map:显示地图字符矩阵(. m l c)
    • info Y X:显示指定位置的特征详情或提示“no information found”
    • quit:退出程序,打印 “goodbye”

geo_features.py

✅ 实现方法总结

1. 类层级结构与职责

类名
描述
说明
Location
表示地图上的一个坐标点
封装了 Y, X 两个整数坐标
Size
表示地图的整体尺寸
height, width
GeoFeature
抽象基类(地理特征)
存储所有地理实体的公共字段和行为
Mountain
继承自 GeoFeature,单位是高度(height),特征类型名是mountain
Lake
湖泊
继承自 GeoFeature,单位是深度(depth),特征类型名是lake
Crater
陨石坑
继承自 GeoFeature,单位是周长(perimeter),特征类型名是crater

2. 功能方法说明

GeoFeature.__init__()

  • 初始化所有子类共用的信息:
    • location: Location(Y, X)
    • description: 地理特征的描述
    • integer: 数值,如高度、深度、周长
    • unit: 单位(由子类设定)
    • type_: 特征类型名(由子类设定)

GeoFeature.get_icon()

  • 返回类型名的首字母,供地图展示图标使用(如 "M" 表示山)

GeoFeature.__str__()

  • 打印实例时显示格式为:

    ✅ 三个子类:Mountain, Lake, Crater

    • 分别传入对应的单位和类型名,调用父类初始化方法

    task1.py

    ✅ 实现方法总结

    1. 类结构与职责

    • Main:负责加载地理数据文件并将每个地形元素对象存储到 info_map 中。
    • main() 函数:命令行界面,支持展示地图、查看指定坐标信息。

    2. 功能实现步骤

    Main.__init__()

    • 读取数据文件 /home/geo_features.txt,第一行是地图尺寸(width,height),后续每行是一个地形元素。
    • 构建 geo_features.Size 对象存储地图尺寸。
    • 通过 add_element() 处理后续每行地形信息。

    Main.add_element(line)

    • 把每行文本分割为 loca_y, loca_x, type_, description, integer
    • 类型字段(mountain, lake, crater)决定创建哪种子类对象(如 geo_features.Mountain
    • 存储于字典 info_map[(y, x)] = object

    Main.__str__()

    • 遍历地图区域,若某点有元素,调用其 get_icon() 方法打印其标识符,否则打印 .(空地)
    • 实现地图可视化输出

    Main.get_info(Y, X)

    • 返回指定坐标的信息对象或提示 "no information found"

    main() 函数:

    • 简易命令行交互:
      • show map:打印地图
      • info Y X:打印某点的信息
      • quit:退出

    总结

    Inheritance(继承)Polymorphism(多态) 在本任务(OOP 类)中有着不可撼动的重要性,做好代码的基础结构,不仅能减少重复代码、提升可维护性,还能使不同地质特征的行为统一处理,提升程序的扩展性和可读性。为后续题目的拓展留出操作空间!我们第一题问题不大,秒了。