Python图灵机
图灵机是离散数学的一个概念,比较深, 不是很容易懂。
from time import sleep
function = type(lambda x : 0)
class nsSet: #非空集合
def __init__(self, init: set):
if isinstance(init, set) and (init != set()):
for i in init:
if not isinstance(i, str):
raise TypeError("the value isn't a string")
if ' ' in i:
raise ValueError("space can't in value")
self.set = init
pass
else:
raise ValueError("the init value isn't a no space set")
def __contains__(self, item):
if isinstance(item, nsSet):
for i in item.set:
if i not in self.set:
return False
return True
else:
return item in self.set
class TuLing:
'''
Q: 所有状态
E: 字母表
q: 初始状态
B: ' '
A: 接收状态集合
fun: 动作函数
'''
def __init__(self, Q: nsSet, E: nsSet, q: str, A: nsSet, fun: function):
'''
fun:
def fun(状态, 扫描到的值):
...
return [将扫描到的数改成此值, 'L'/'R'(L向左移, R向右), 下一个状态]
或
return None #不定义
'''
if isinstance(Q, nsSet) and isinstance(E, nsSet) and isinstance(q, str)\
and isinstance(A, nsSet):
if A in Q:
if q in Q:
self.q = Q
self.e = E
self.iq = q
self.a = A
self.fun = fun
else:
raise ValueError("the init status not in status set") #初始状态不包含在状态集合内
else:
raise ValueError("the can acceptability status not all in status set")#并不是所有可以接受的状态都在状态集合内
else:
raise TypeError("type error") #某个参数类型错误
pass
def Start(self, inputs: str):
if isinstance(inputs, str):
if '' != inputs:
for i in inputs:
if i not in self.e and i != ' ':
raise ValueError("value not in char set") #有字符不在字母表里
dai = list(inputs)
index = 0
nowq = self.iq
while True:
print(''.join(dai))
print(' '*index + '^')
print(' '*index + nowq)
re = self.fun(nowq, dai)
if re == None:
break
print('改写后的值:', re)
print('L\R:', re)
print('下一个状态:', re)
print('--------------------')
dai = re
if re == 'L':
if index == 0:
dai.insert(0, ' ')
else:
index -= 1
elif re == 'R':
index += 1
if index == len(dai):
dai.append(' ')
else:
raise RuntimeError("fun not return a correct direction") #re不是'L'也不是'R'
nowq = re
sleep(0.5)
if nowq in A:
print("接受")
print(''.join(dai))
else:
print("拒绝")
# 这是演示值
Q = nsSet({'0', '1', '2', '3', '4', 'e'})
E = nsSet({'1'})
q = '0'
A = nsSet({'e'})
def fun(status, value):
if status == '0':
if value == '1':
return [' ', 'R', '1']
else: #由于字母表只有'1'和' ', 所以可以用else
return None
elif status == '1':
if value == '1':
return [' ', 'R', '2']
else:
return [' ', 'R', '3']
elif status == '2':
if value == '1':
return [' ', 'R', '2']
else:
return [' ', 'R', '4']
elif status == '3':
if value == '1':
return [' ', 'R', '3']
else:
return [' ', 'L', 'e']
elif status == '4':
if value == '1':
return ['1', 'R', '4']
else:
return [' ', 'R', '3']
else: # status == 'e'
return None
tu = TuLing(Q, E, q, A, fun)
tu.Start("11 1 11")
学习 https://fishc.com.cn/forum.php?mod=collection&action=view&ctid=2109 失踪人口回归! 学习编程中的Ben 发表于 2023-9-8 22:32
失踪人口回归!
几天前就回归了 {:10_254:} 瞅瞅是啥 ? 干什么的啊? 看一看 如果我没有猜错这个概念最初是不是跟图灵当时二战破译德军密码有关 风眠 发表于 2023-9-9 12:53
干什么的啊?
脑子一抽就写出来了,没啥用途 KeyError 发表于 2023-9-9 19:45
脑子一抽就写出来了,没啥用途
哦 {:5_108:} 1 1 疯狂学习中 支持你啊! {:10_254:} {:10_257:}
页:
[1]
2