Python - เครื่องประมวลผลสถานะข้อความ

สถานะเครื่องเกี่ยวกับการออกแบบโปรแกรมเพื่อควบคุมการไหลในแอปพลิเคชัน มันเป็นกราฟกำกับซึ่งประกอบด้วยชุดของโหนดและชุดของฟังก์ชันการเปลี่ยนแปลง การประมวลผลไฟล์ข้อความมักประกอบด้วยการอ่านตามลำดับของแต่ละไฟล์ข้อความและทำบางอย่างเพื่อตอบสนองต่อการอ่านแต่ละส่วน ความหมายของชิ้นส่วนขึ้นอยู่กับประเภทของชิ้นส่วนที่มีอยู่ก่อนหน้านั้นและชิ้นส่วนใดที่ตามมา เครื่องนี้เกี่ยวกับการออกแบบโปรแกรมเพื่อควบคุมการไหลในแอปพลิเคชัน มันเป็นกราฟกำกับซึ่งประกอบด้วยชุดของโหนดและชุดของฟังก์ชันการเปลี่ยนแปลง การประมวลผลไฟล์ข้อความมักประกอบด้วยการอ่านตามลำดับของแต่ละไฟล์ข้อความและทำบางอย่างเพื่อตอบสนองต่อการอ่านแต่ละส่วน ความหมายของชิ้นส่วนขึ้นอยู่กับประเภทของชิ้นส่วนที่มีอยู่ก่อนหน้านั้นและชิ้นส่วนใดที่ตามมา

พิจารณาสถานการณ์ที่ข้อความที่ใส่จะต้องเป็นสตริงซ้ำ ๆ กันของลำดับ AGC (ใช้ในการวิเคราะห์โปรตีน) หากลำดับเฉพาะนี้ถูกคงไว้ในสตริงอินพุตสถานะของเครื่องจะยังคงเป็น TRUE แต่ทันทีที่ลำดับเบี่ยงเบนสถานะของเครื่องจะกลายเป็น FALSE และจะยังคงเป็น FALSE หลังจากวอร์ด สิ่งนี้ช่วยให้มั่นใจได้ว่าการประมวลผลต่อไปจะหยุดลงแม้ว่าอาจจะมีลำดับที่ถูกต้องมากขึ้นในภายหลัง

โปรแกรมด้านล่างนี้กำหนดสถานะเครื่องที่มีฟังก์ชั่นในการสตาร์ทเครื่องรับอินพุตสำหรับประมวลผลข้อความและดำเนินการตามขั้นตอน

class StateMachine:
# Initialize 
    def start(self):
        self.state = self.startState
# Step through the input
    def step(self, inp):
        (s, o) = self.getNextValues(self.state, inp)
        self.state = s
        return o
# Loop through the input		
    def feeder(self, inputs):
        self.start()
        return [self.step(inp) for inp in inputs]
# Determine the TRUE or FALSE state
class TextSeq(StateMachine):
    startState = 0
    def getNextValues(self, state, inp):
        if state == 0 and inp == 'A':
            return (1, True)
        elif state == 1 and inp == 'G':
            return (2, True)
        elif state == 2 and inp == 'C':
            return (0, True)
        else:
            return (3, False)
InSeq = TextSeq()
x = InSeq.feeder(['A','A','A'])
print x
y = InSeq.feeder(['A', 'G', 'C', 'A', 'C', 'A', 'G'])
print y

เมื่อเรารันโปรแกรมข้างต้นเราจะได้ผลลัพธ์ดังต่อไปนี้ -

[True, False, False]
[True, True, True, True, False, False, False]

ในผลลัพธ์ของ x รูปแบบของ AGC จะล้มเหลวสำหรับอินพุตที่สองหลังจาก 'A' ตัวแรก สถานะของผลลัพธ์จะยังคงเป็นเท็จตลอดไปหลังจากนี้ ในผลลัพธ์ของ Y รูปแบบของ AGC จะดำเนินต่อไปจนถึงอินพุตที่ 4 ดังนั้นสถานะของผลลัพธ์ยังคงเป็นจริงจนถึงจุดนั้น แต่จากอินพุตที่ 5 ผลลัพธ์จะเปลี่ยนเป็น False ตามที่คาดไว้ G แต่พบ C