Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python으로 파일 시스템 설계하기


이 두 가지 기능을 제공하는 파일 시스템을 설계해야 한다고 가정해 봅시다 -

  1. createPath(path, value) - 새 경로를 만들고 가능한 경우 값을 연결하고 True를 반환합니다. 경로가 이미 존재하거나 상위 경로가 존재하지 않으면 False를 반환합니다.
  2. get(path) - 경로와 관련된 값을 찾거나 경로가 없으면 -1을 반환합니다.

경로 형식은 -(슬래시) / 뒤에 하나 이상의 소문자 영어 문자가 오는 형식의 하나 이상의 연결된 문자열입니다. 예를 들어 /programming 및 /programming/problems는 유효한 경로이고 빈 문자열 및 /는 유효하지 않습니다. 여기서 우리는 이 두 가지 기능을 구현해야 합니다.

따라서 입력으로 파일 시스템을 만든 다음 ['/a', 1]을 사용하여 경로를 만들고 매개변수 ['/a']와 함께 get()을 사용한 후 출력은 1이 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 지도 정의
  • createPath 메서드는 경로와 값을 사용하며 다음과 같이 작동합니다.
  • p :='/'로 분할된 경로 구성 요소 목록
  • x :=d
  • i 범위 1에서 p – 1까지의 길이
    • p[i]가 x에 없으면 false를 반환합니다.
    • x :=x[p[i]][1]
  • p의 마지막 요소가 x에 있으면 false를 반환합니다.
  • x[p의 마지막 요소] ​​:=v와 빈 지도가 있는 목록
  • 참을 반환
  • get() 메서드가 경로를 사용 중입니다.
  • x :=d
  • p :='/'로 분할된 경로 구성 요소 목록
  • i 범위 1에서 p – 1까지의 길이
    • p[i]가 x에 없으면 -1을 반환합니다.
    • x :=x[p[i]][1]
  • p의 마지막 요소가 x에 있으면 x[p의 마지막 요소][0]을 반환하고, 그렇지 않으면 -1을 반환합니다.

예제(파이썬)

더 나은 이해를 위해 다음 구현을 살펴보겠습니다. −

class FileSystem(object):
   def __init__(self):
      self.d = {}
   def create(self, p, v):
      p = p.split("/")
      x = self.d
      for i in range(1,len(p)-1):
         if p[i] not in x:
            return False
         x = x[p[i]][1]
      if p[-1] in x:
         return False
      x[p[-1]] = [v,{}]
      return True
   def get(self, p):
      x = self.d
      p = p.split("/")
      for i in range(1,len(p)-1):
         if p[i] not in x:
            return -1
         x= x[p[i]][1]
      if p[-1] in x:
         return x[p[-1]][0]
      else:
         return -1
ob = FileSystem()
print(ob.create("/a", 1))
print(ob.get("/a"))

입력

Initialize the object, then call createPath(“/a”, 1) and get(“/a”)

출력

True
1