python 狀態機教程 文字處理狀態機

2021-10-12 11:12:28 字數 1687 閱讀 4825

狀態機是關於設計程式來控制應用程式中的流程。 它是乙個有向圖,由一組節點和一組過渡函式組成。 處理文字檔案通常包括順序讀取文字檔案的每個塊並執行某些操作以響應每個塊讀取。 塊的含義取決於它之前存在的塊的型別以及它之後的塊。 該機器是關於設計程式來控制應用程式中的流程。 它是乙個有向圖,由一組節點和一組過渡函式組成。 處理文字檔案通常包括順序讀取文字檔案的每個塊並執行某些操作以響應每個塊讀取。 塊的含義取決於它之前存在的塊的型別以及它之後的塊。

考慮有一種情況,其中文字放置必須是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』之後的第二個輸入失敗。 在此之後,結果的狀態將永遠保持為false。 在y的結果中,agc的模式持續到第4個輸入。 因此,結果的狀態在此之前保持為真。 但是從第5個輸入開始,結果變為false,因為g是預期的結果,但是查詢結為c。

¥ 我要打賞

糾錯/補充

收藏加qq群啦,易百教程官方技術學習群

注意:建議每個人選自己的技術方向**,同乙個qq最多限加 3 個群。

sed awk文字處理教程

sed全名叫 stream editor 流編輯器,用程式的方式來編輯文字,相當的hacker啊。sed基本上就是玩正則模式匹配,所以,玩sed的人,正規表示式一般都比較強。把my字串替換成hao chen s sed s my hao chen s g pets.txt s表示替換命令 my 表示...

sed awk文字處理教程

sed全名叫 stream editor 流編輯器,用程式的方式來編輯文字,相當的hacker啊。sed基本上就是玩正則模式匹配,所以,玩sed的人,正規表示式一般都比較強。把my字串替換成hao chen s sed s my hao chen s g pets.txt s表示替換命令 my 表示...

python文字處理

基本的文字操作 在python中,可以用下列方式表現乙個文字字串 this is a literal string out 1 this is a literal string this is a literal string out 2 this is a literal string 使用3引用...