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

Python에서 실행 길이 문자열 디코딩 반복자 클래스를 구현하는 프로그램

<시간/>

실행 길이로 인코딩된 소문자 문자열(예:s)로 구성하는 반복자 클래스를 정의하려는 경우 이 반복자를 위한 두 가지 함수가 있습니다.

  • next() 반복자에서 다음 요소를 찾습니다.
  • hasnext() 다음 요소가 있는지 여부를 확인합니다.

따라서 입력이 s ="2b1a"와 같으면 s로 객체를 구성한 다음 next(), hasnext(), next(), next(), hasnext()를 호출하면 출력은 "b"가 됩니다. , 참, "b", "a", 거짓.

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

  • 생성자를 정의합니다. 시간이 걸립니다
  • 출력:=새 목록
  • num :=빈 문자열
  • s의 각 i에 대해 다음을 수행합니다.
    • 내가 알파벳이면
      • 출력 끝에 숫자 삽입
      • 출력 끝에 i 삽입
      • num :=빈 문자열
    • 그렇지 않으면
      • num :=num + i
  • next() 함수를 정의합니다.
  • hasnext()가 참이면
    • count :=출력[0]
    • 문자:=출력[1]
    • count :=count - 1
    • 카운트> 0이면
      • 출력[0] :=출력[0] - 1
    • 그렇지 않으면
      • 출력 :=출력[인덱스 2에서 끝까지]
    • 반환 편지
  • hasnext() 함수를 정의합니다.
  • 출력 크기가 0이 아니면
    • 참 반환
  • 거짓을 반환

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

class RunLengthIterator:def __init__(self, s):self.output =[] num ="" for i in s:if i.isalpha():self.output.append(int(num)) self.output .append(i) num ="" else:num +=i def next(self):if self.hasnext():count =self.output[0] letter =self.output[1] count -=count if 1> 0:self.output[0] -=1 else:self.output =self.output[2:] return letter def hasnext(self):if len(self.output) !=0:return True return Falses =" 2b1a"obj =RunLengthIterator(s)print(obj.next())print(obj.hasnext())print(obj.next())print(obj.next())print(obj.hasnext()) 

입력

"2b1a"obj =RunLengthIterator(s)obj.next()obj.hasnext()obj.next()obj.next()obj.hasnext()

출력

bTruebaFalse