首页 > 编程语言 >【华为OD机试真题】C卷-模拟目录管理功能(Python)

【华为OD机试真题】C卷-模拟目录管理功能(Python)

时间:2024-03-27 20:30:11浏览次数:35  
标签:abc 真题 Python self OD current command directory 目录

一、题目描述

【华为OD机试真题】C卷-模拟目录管理功能(Python)

题目描述:

实现一个模拟目录管理功能的软件,输入一个命令序列,输出最后一条命令运行结果。
支持命令:
1、创建目录命令:mkdir 目录名称,如 mkdir abc 为在当前目录创建abc目录,如果已存在同名目录则不执行任何操作。此命令无输出。

2、进入目录命令:cd 目录名称,如 cd abc 为进入abc目录,特别地,cd .. 为返回上级目录,如果目录不存在则不执行任何操作。此命令无输出。

3、查看当前所在路径命令:pwd,输出当前路径字符串。

约束:
1、目录名称仅支持小写字母;mkdir 和 cd 命令的参数仅支持单个目录,如:mkdir abc 和 cd abc;不支持嵌套路径和绝对路径,如 mkdir abc/efg,cd abc/efg,mkdir /abc/efg,cd /abc/efg 是不支持的。

2、目录符号为/,根目录/作为初始目录。

3、任何不符合上述定义的无效命令不做任何处理并且无输出。

二、输入输出

输入描述:
输入 N 行字符串,每一行字符串是一条命令。

输出描述:
输出最后一条命令运行结果字符串。

备注:
命令行数限制100行以内,目录名称限制10个字符以内。

三、参考示例

用例
输入:
mkdir abc
cd abc
pwd
输出:
/abc/
说明:
在根目录创建一个abc的目录并进入abc目录中查看当前目录路径,输出当前路径/abc/。

四、解题思路

  1. 使用TreeNode类表示目录结构,每个节点包含目录名称、父节点和子节点。
  2. 使用DirectoryStructure类管理目录操作,包括创建目录、切换目录和打印当前路径。
  3. 在循环中读取用户输入的命令,根据命令执行相应的操作。
  4. 约束目录名称仅支持小写字母,不支持嵌套路径和绝对路径操作。
  5. 执行命令后输出最后一个命令的执行结果。

五、参考代码 

# -*- coding: utf-8 -*-
'''
@Time    :   2023/12/10 00:09:00
@Author  :   mgc 
@Version :   1.0
@Desc    :   None
'''

# import os
# import re
# import sys
# import copy
# import math
# import queue
# import functools
# from queue import Queue
# from collections import Counter, defaultdict

class TreeNode:
    def __init__(self, directory_name, parent):
        self.directory_name = directory_name
        self.parent = parent
        self.children = {}


class DirectoryStructure:
    def __init__(self):

        self.root = TreeNode("/", None)

        self.current_directory = self.root

    def make_directory(self, directory_name):
        self.current_directory.children.setdefault(
            directory_name, TreeNode(directory_name + "/", self.current_directory)
        )  

    def change_directory(self, directory_name):
        if directory_name == "..":

            if self.current_directory.parent is not None:

                self.current_directory = self.current_directory.parent
        else:

            if self.current_directory.children.get(directory_name) is not None:

                self.current_directory = self.current_directory.children[directory_name]

    def print_working_directory(self):

        path_list = []

        current = self.current_directory
        while current is not None:
            path_list.append(current.directory_name)
            current = current.parent

        path_list.reverse()

        return "".join(path_list)

directory_structure = DirectoryStructure()

last_command_output = ""

while True:
    try:
        line = input()

        tmp = line.split()
        command_key = tmp[0]

        if command_key == "pwd":

            if len(tmp) != 1:
                continue
            last_command_output = directory_structure.print_working_directory()
        elif command_key == "mkdir" or command_key == "cd":

            if len(tmp) != 2:
                continue

            command_value = tmp[1]

            if not (command_value.isalpha() and command_value.islower()) and not (
                command_key == "cd" and command_value == ".."
            ):
                continue

            if command_key == "mkdir":
                directory_structure.make_directory(command_value)

                last_command_output = ""
            else:
                directory_structure.change_directory(command_value)

                last_command_output = ""
    except:
        break

print(last_command_output)

六、华为OD机试真题汇总目录

    【华为OD机试】真题汇总A+B+C+D券(Python实现)

    【华为OD机试】真题汇总A+B+C+D卷(JAVA实现)

    【华为OD机试】真题汇总A+B+C+D卷(C++实现)

标签:abc,真题,Python,self,OD,current,command,directory,目录
From: https://blog.csdn.net/u014481728/article/details/137045601

相关文章

  • 【华为OD机试真题】C卷-二叉树的广度优先遍历(JAVA)
    一、题目描述【华为OD机试真题】C卷-二叉树的广度优先遍历(JAVA)题目描述:有一棵二叉树,每个节点由一个大写字母标识(最多26个节点)。现有两组字母,分别表示后序遍历(左孩子->右孩子->父节点)和中序遍历(左孩子->父节点->右孩子)的结果,请你输出层序遍历的结果。二、输入输出输入......
  • 手把手教你用python一键抢12306火车票(附代码)
    哈喽,哈喽~,一年一度的抢火车票大战正式拉开序幕…然饿大多数人碰到的是这种情况:当你满心期待摩拳擦掌准备抢票的时候,你会发现一票难求!想回趟家真难!那么作为程序猿的你,当然要用程序猿的方式来抢票!下面分享用python来抢票!网站提供各种免费资源!城市cookie可根据具体需求自行添加!链......
  • Python 使用 Cloudflare API 自动修改 DNS 记录教程
    本教程介绍了如何使用Python和CloudflareAPI自动修改DNS记录,包括API密钥的获取、API请求的构建以及DNS记录的更新。准备工作1、注册Cloudflare账号你需要在Cloudflare官网(https://www.cloudflare.com/)注册一个账号。2、添加需要修改DNS记录的域名登录Cloudflare......
  • python笔记(3)基本数据类型简介
    目录python3的六个标准数据类型Numbers(数字) 数值运算String(字符串)List(列表)Tuple(元组)Sets(集合)set()函数有两用方式使用set运算Dictionaries(字典)python3的六个标准数据类型Numbers(数字)String(字符串)List(列表)Tuple(元组)Dictionaries(字典)Set(集合)......
  • Python学习day3
    知识:#继承,创建有继承的类#父类、子类#class子类(父类):#调用时找父类的构造函数,如果子类自己有某函数则调用子类的,否则调用父类的#在子类有构造函数的时候调用父类,可以用super().__init__的方法调用父类函数代码:#举例人力系统classstaff:def__init__(self,na......
  • Codeforces Round 936 (Div. 2)
    Preface懒狗闪总开完组会不打CF直接滚去睡觉了可海星,感觉我好像退化成我们队训练最少的人了赛后补了下发现这场题竟然都会做,不过F不知道是我实现有问题常数大得一批加了读优才惊险卡过A.MedianofanArray签到,找到中位数后面与它相同的数的个数即可#include<cstdio>#incl......
  • 基于STM32的ModBus实现(一)移植FreeMODBUS RTU
    一、FreeMODBUSFreeModbus是一个开源的Modbus通信协议栈实现。它允许开发者在各种平台上轻松地实现Modbus通信功能,包括串口和以太网。FreeMODBUS提供了用于从设备和主站通信的功能,支持ModbusRTU和ModbusTCP协议。在工业控制和自动化领域广泛应用。FreeModBus可通过官......
  • leedcode-第一个错误的版本
    自己写的二分法:classSolution:deffirstBadVersion(self,n:int)->int:#初始化左右指针进行二分查找left=1right=n#检查第一个版本是否是坏版本ifisBadVersion(1):return1#检查......
  • Python篇之网络编程,实现简单的服务端和客户端的内容传输
    本小节内容:实现简单的信息交流文章目录一、Socket介绍二、客户端与服务端三、在python中实现网络通信1.服务端2.客户端3.连接测试一、Socket介绍socket(简称套接字)模块是其内置的标准库之一,它实现了BSDsocketsAPI,允许开发者在Python程序中进行网络通......
  • 【Python系列】Python 中 YAML 文件与字典合并的实用技巧
    ......