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