Python 中的图灵自动机

Turing automata in Python

class Tape(object):

    blank_symbol = " "

    def __init__(self,
                 tape_string = ""):
        self.__tape = dict((enumerate(tape_string)))
        # last line is equivalent to the following three lines:
        #self.__tape = {}
        #for i in range(len(tape_string)):
        #    self.__tape[i] = input[i]

    def __str__(self):
        s = ""
        min_used_index = min(self.__tape.keys()) 
        max_used_index = max(self.__tape.keys())
        for i in range(min_used_index, max_used_index):
            s += self.__tape[i]
        return s    

    def __getitem__(self,index):
        if index in self.__tape:
            return self.__tape[index]
        else:
            return Tape.blank_symbol

    def __setitem__(self, pos, char):
        self.__tape[pos] = char 


class TuringMachine(object):

    def __init__(self, 
                 tape = "", 
                 blank_symbol = " ",
                 initial_state = "",
                 final_states = None,
                 transition_function = None):
        self.__tape = Tape(tape)
        self.__head_position = 0
        self.__blank_symbol = blank_symbol
        self.__current_state = initial_state
        if transition_function == None:
            self.__transition_function = {}
        else:
            self.__transition_function = transition_function
        if final_states == None:
            self.__final_states = set()
        else:
            self.__final_states = set(final_states)

    def get_tape(self): 
        return str(self.__tape)

    def step(self):
        char_under_head = self.__tape[self.__head_position]
        x = (self.__current_state, char_under_head)
        if x in self.__transition_function:
            y = self.__transition_function[x]
            self.__tape[self.__head_position] = y[1]
            if y[2] == "R":
                self.__head_position += 1
            elif y[2] == "L":
                self.__head_position -= 1
            self.__current_state = y[0]

    def final(self):
        if self.__current_state in self.__final_states:
            return True
        else:
            return False

我正在尝试在 Python 中实现图灵自动机。你能告诉我为什么这段代码不起作用吗?机器在无限[4] 存储磁带上运行,存储磁带被分成离散的单元。[5]机器将它的头放在一个单元格上,然后 "reads"(扫描)[6] 那里的符号。然后,根据符号及其在用户指定指令的有限 table[7] 中的当前位置,机器 (i) 在单元格(某些型号允许符号擦除或不写入)然后 (ii) 将磁带向左或向右移动一个单元格(某些型号不允许移动,某些型号移动磁头),[9] 然后 (iii)(由观察到的符号和机器在 table) 中的位置要么继续执行后续指令,要么停止计算。

在将i添加到列表之前,通过float(i)将其转换为float。

for i in lines:
    print(i)
    if(i != " "):
        if(a % 4 == 0 and a != 1):
            second.append(float(i))
            tuple(tmp)
            first.append(tmp)
            tmp = []
        else:
            tmp.append(float(i))
        a+=1