Ich brauche meine FSM, um die binäre zu lesen, mit den Zuständen und Übergängen zu vergleichen. Dann sagen Sie, ob es akzeptiert oder abgelehnt wird. Der Akzept-Zustand ist eine einfache 010. Im Moment beginnt die Schleife von Anfang an, egal was ich mache. Ich habe verschiedene Variationen der Einrückung ausprobiert.Python-Zustandsmaschine: Reset-Schleife?
import sys
import os
try:
Tfile = open("transistions2.txt","r")
except IOError:
print "Could not open file", "transitions.txt"
sys.exit()
Transitions = []
ReadLine = Tfile.readline()
while ReadLine != "":
ReadLine = ReadLine.rstrip()
CS, IN, NS = ReadLine.split(",")
Transitions.append((CS, IN, NS))
ReadLine = Tfile.readline()
print "Transitions:\n", Transitions, "\n"
Tfile.close()
try:
Sfile = open("states.txt","r")
except IOError:
print "Could not open file", "states.txt"
sys.exit()
States = []
ReadLine = Sfile.readline()
while ReadLine != "":
SN, SS, AS = ReadLine.split(",")
States.append((SN, bool(int(SS)), bool(int(AS))))
ReadLine = Sfile.readline()
print "States:\n", States, "\n"
Sfile.close()
try:
Strfile = open("strings2.txt","r")
except IOError:
print "Could not open file", strings2.txt
sys.exit()
Strings = []
ReadLine = Strfile.readline()
while ReadLine != "":
Readline = ReadLine.rstrip()
Strings.append(Readline)
ReadLine = Strfile.readline()
print "Strings:\n", '\n'.join(Strings), '\n'
Strfile.close()
CurrentState = ''
Start ='State1'
for S in Strings:
if S != '':
print "String:", S
for C in S:
print "Number:", C
CurrentState =Start
for Transitions in (CS, IN, NS):
print Transitions
if CS == CurrentState and IN == C:
CurrentState = NS
print NS
break
for States in (SN,SS,AS):
if SN == CurrentState:
print S, "is accepted"
elif AS == CurrentState:
print S, " is rejected"
else:
print S,"Doesnt work"
Meine mehrere Lesen in Textdateien sind:
Transitions:
[('State3', '1', 'State3'), ('State3', '0', 'State4'), ('State2', '1', 'State3'), ('State2', '0', 'State2'), ('State1', '1', 'State1'), ('State1', '0', 'State2')]
States:
[('State1', True, False), ('State2', False, False), ('State3', False, False), ('State4', False, True)]
Strings:
01010
1001
010
Einrückung oder beziehen Sie sich auf innere Schleifen? Versuchen Sie es mit Coroutinen zu implementieren, es wird sauberer aussehen und Sie werden den Fehler leicht finden. –