一、题目描述
【华为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/。
四、解题思路
- 使用TreeNode类表示目录结构,每个节点包含目录名称、父节点和子节点。
- 使用DirectoryStructure类管理目录操作,包括创建目录、切换目录和打印当前路径。
- 在循环中读取用户输入的命令,根据命令执行相应的操作。
- 约束目录名称仅支持小写字母,不支持嵌套路径和绝对路径操作。
- 执行命令后输出最后一个命令的执行结果。
五、参考代码
# -*- 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实现)
标签:abc,真题,Python,self,OD,current,command,directory,目录 From: https://blog.csdn.net/u014481728/article/details/137045601