Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình triển khai lớp trình lặp giải mã chuỗi độ dài chạy bằng Python

Giả sử chúng ta muốn xác định một lớp trình vòng lặp được xây dựng với một chuỗi chữ hoa mã hóa có độ dài chạy như s, có hai chức năng cho trình vòng lặp này -

  • next () điều này sẽ tìm phần tử tiếp theo trong trình lặp
  • hasnext () này sẽ kiểm tra xem phần tử tiếp theo có hiện diện hay không

Vì vậy, nếu đầu vào là s =​​"2b1a", sau đó xây dựng một đối tượng với s, sau đó gọi next (), hasnext (), next (), next (), hasnext (), thì đầu ra sẽ là "b" , Đúng, "b", "a", Sai.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Xác định một phương thức khởi tạo. Điều này sẽ mất s
  • output:=một danh sách mới
  • num:=chuỗi trống
  • đối với mỗi tôi trong s, thực hiện
    • nếu tôi là chữ cái, thì
      • chèn num ở cuối đầu ra
      • chèn i vào cuối đầu ra
      • num:=chuỗi trống
    • nếu không,
      • num:=num + i
  • Xác định một hàm next ().
  • nếu hasnext () là true, thì
    • count:=output [0]
    • letter:=output [1]
    • count:=count - 1
    • nếu đếm> 0, thì
      • output [0]:=output [0] - 1
    • nếu không,
      • output:=output [từ chỉ mục 2 đến cuối]
    • thư trả lại
  • Xác định hàm hasnext ().
  • nếu kích thước của đầu ra không phải là 0, thì
    • trả về True
  • trả về Sai

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

 class RunLengthIterator:def __init __ (self, s):self.output =[] num ="" cho tôi trong 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 - =1 if count> 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 ())  

Đầu vào

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

Đầu ra

 bTruebaFalse