Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมที่จะใช้คลาสตัววนซ้ำการถอดรหัสสตริงความยาวใน Python


สมมติว่าเราต้องการกำหนดคลาส iterator ที่สร้างด้วยสตริง encodedlowercase ความยาวรัน พูดว่า s มีสองฟังก์ชันสำหรับ iterator นี้คือ -

  • next() ค้นหาองค์ประกอบถัดไปในตัววนซ้ำ
  • hasnext() ใช้สำหรับตรวจสอบว่าองค์ประกอบถัดไปมีอยู่หรือไม่

ดังนั้น หากอินพุตเป็น s ="2b1a" ให้สร้างวัตถุด้วย s จากนั้นเรียก next(), hasext(), next(), next(), hashext() ผลลัพธ์จะเป็น "b" , จริง, "b", "a", เท็จ

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • กำหนดคอนสตรัคเตอร์ นี่จะใช้เวลา s
  • ผลลัพธ์ :=รายการใหม่
  • num :=สตริงว่าง
  • สำหรับแต่ละ i ใน s ทำ
    • ถ้าฉันเป็นตัวอักษรก็
      • แทรก num ที่ส่วนท้ายของเอาต์พุต
      • แทรก i ที่ส่วนท้ายของเอาต์พุต
      • num :=สตริงว่าง
    • มิฉะนั้น
      • num :=num + i
  • กำหนดฟังก์ชัน next()
  • ถ้า hasnext() เป็นจริง แล้ว
    • จำนวน :=เอาต์พุต[0]
    • letter :=output[1]
    • นับ :=นับ - 1
    • ถ้านับ> 0 แล้ว
      • เอาต์พุต[0] :=เอาต์พุต[0] - 1
    • มิฉะนั้น
      • เอาต์พุต :=เอาต์พุต[จากดัชนี 2 ถึงจุดสิ้นสุด]
    • จดหมายส่งคืน
  • กำหนดฟังก์ชัน hasnext()
  • ถ้าขนาดของเอาต์พุตไม่เป็น 0 แล้ว
    • คืนค่า True
  • คืนค่าเท็จ

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

คลาส 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 -=1 หากนับ> 0:self.output[0] -=1 อื่น ๆ:self.output =self.output[2:] return letter def hashext(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