Python实现图灵机XN*2命令过程

一.题目名称:

“图灵机”

二.题目内容

对于任意给定的一台turing机和任意给定的字符串w(w不含空格),编程模拟turing机的运行过程,要求输出从开始运行起的每一步的结果。用C/C++/Java/Python实现程序解决问题。

三.算法设计

1.输入数字
2.使用内置方法bin()将数字转化为二进制付给字符串
3.将二进制写为扩展形式.读到1输出加上10,否则加0,最后加110
4.将扩展形式转化为命令过程,定义一个index表示内态,利用for i in range()做循环字符串读取,在循环使用条件选择语句模拟命令规则

5.将命令结果缩略为二进制的扩展形式,遇到01或者10输出1,遇到00输出0,遇到110输出2
6.将扩展形式化为标准二进制数
7.将二进制数还原为十进制
python代码

import math
#从键盘输入十进制数
print("请输入一个十进制数:")
w = int(input())

#使用内置方法bin(),将十进制转为二进制
a = bin(w)
str1 = str(a)
print("该数的二进制数为:%s"%str1)

#将二进制转化为扩展形式
def expand(str1):
    str2 = str()
    for i in range(len(str1)):
        if(str1[i] == "1"):
            str2 = str2+"10"
        else:
            str2 = str2+"0"
    str2+="110"
    str2=str2[1:]
    return str2

#将扩展形式转化为命令过程
def command(str2):
    print("您输入数字二进制扩展形式图灵机XN*2命令过程为:" )
    str2=str2+"00"
    print(str2)
    str3 = str()
    index = 0     #内态
    for i in range(1,len(str2)):
        if(index == 0 and int(str2[i])==0):    #内态为0输出为0———>内态为0输出为0右移一位
            str3 = str2[:i] + "0" +str2[i+1:]
            print(str3)
            str2=str3
        elif(index ==0 and int(str2[i])==1):   #内态为0输出为1———>内态为1输出为0右移一位
            index = 1
            str3 = str2[:i] + "0" + str2[i+1:]
            print(str3)
            str2=str3
        elif(index==1 and int(str2[i])==0):   #内态为1输出为0———>内态为0输出为1右移一位
            index = 0
            str3 = str2[:i] + "1" + str2[i + 1:]
            print(str3)
            str2=str3
        elif(index==1 and int(str2[i])==1):   #内态为1输出为1———>内态为10输出为0右移一位
            index = 10
            str3 = str2[:i] + "0" + str2[i + 1:]
            print(str3)
            str2=str3
        elif (index == 10 and  int(str2[i]) == 0):   #内态为10输出为0———>内态为11输出为1右移一位
            index = 11
            str3 = str2[:i] + "1" + str2[i + 1:]
            print(str3)
            str2=str3
        elif(index == 11 and int(str2[i]) == 0):    #内态为11输出为0———>内态为0输出为1停机
            index == 0
            str3 = str2[:i] + "1" + str2[i + 1:]
            print(str3)
            print("STOP")
            break
    return str3

#将命令结果缩写为二进制的扩展形式
def contract(str3):
    str4=str()
    for i in range(1,len(str3)-4,2):
        if(str3[i]+str3[i+1] == "01" or str3[i]+str3[i+1] == "10"):
            str4=str4+"1"
        elif(str3[i]+str3[i+1] == "00"):
            if(str3[i+2]=="0"):
                str4=str4+"00"
            else:
                str4=str4+"0"
    return str4
#将二进制的扩展形式转化为缩略形式
def restore(str4):
    str5=str()
    for i in range(len(str4)):
        if(str4[i]!="2"):   #没有读到2的时候将值赋给str5,读到2的时候break
            str5 += str4[i]
        else:
            break
    return str5

str2=expand(str1)
print("您输入数字的二进制扩展形式为:%s"%str2)
str3=command(str2)
print("命令转化结果为:%s"%str3)
str4=contract(str3)
print("将命令转化结果缩写为二进制的扩展形式为:%s"%str4)
str5=restore(str4)
print("二进制的缩略形式为:%s"%str5)

#将二进制还原为十进制
num = int(str5, 2)   #要转化的字符串为str5,进制数为2进制
print("二进制进制转化为十进制为:%d"%num)
print("恭喜您 图灵机XN*2命令转换成功")
print("您已完成%d的倍数计算"%w)

四.测试

1.输入数据测试
print(“请输入一个十进制数:”)
w = int(input())
print(w)

2.十进制转二进制测试
a = bin(w)
str1 = str(a)
print(“该数的二进制数为:%s”%str1)

3.将二进制转化为扩展形式测试
s = expand(str1)
print(“扩展形式为:%s”%s)

4.将命令过程输出测试
s = command(str2)
print(“该数的扩展形式的命令过程为:%s”%s)

5.将命令过程缩写为二进制测试
str5=restore(str4)
print(str5)

6.将二进制还原为十进制测试
num = int(str5, 2)
print(“二进制进制转化为十进制为:%d”%num)

五.调试

1.在进行命令过程输出测试的时候发现错误
运行之后输出下图

发现了问题
continue语句位置不当,会导致一直循环执行第一个if语句
改进之后发现不打印
继续进行调试发现无法选择elif语句,故而无法执行elif条件下面的打印

调试发现str2[i]==1显示bool false。改为int(str2[i]1)或者改为str2[i]”1”也可以
运行有了结果,但是过程不对
继续调试

发现stop后for仍然在循环,给stop后面加上break
成功

2.在进行将命令转化结果缩写为二进制的扩展形式的测试出现错误

调试发现是因为索引值取得有问题

成功

六.运行结果

hexo+github博客:https://suyufan.github.io/

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python 是一种流行的编程语言,它可以用于构建各种类型的应用程序,包括图灵机图灵机是一种理论模型,用于描述计算和自动化。它由英国数学家艾伦·图灵提出,被认为是计算机科学的重要基础。 在 Python 中,你可以使用基本的编程概念和数据结构来模拟图灵机的行为。例如,你可以使用条件语句、循环和变量来控制图灵机的状态转移和符号操作。你可以通过定义状态集合、符号集合、转移函数和停机状态来实现图灵机的功能。 以下是一个简单的 Python 代码示例,模拟了一个简化的图灵机: ```python # 定义图灵机的状态集合 states = {'q0', 'q1'} # 定义图灵机的符号集合 symbols = {'0', '1'} # 定义转移函数 transitions = { ('q0', '0'): ('q1', '1', 'R'), ('q1', '1'): ('q0', '0', 'L'), ('q1', '0'): ('q1', '1', 'R') } # 定义初始状态和输入串 initial_state = 'q0' input_string = '000111' # 初始化图灵机 current_state = initial_state tape = list(input_string) head_position = 0 # 模拟图灵机运行 while current_state != 'q1': symbol = tape[head_position] if (current_state, symbol) not in transitions: raise Exception('No transition defined for current state and symbol') new_state, new_symbol, move = transitions[(current_state, symbol)] tape[head_position] = new_symbol if move == 'R': head_position += 1 elif move == 'L': head_position -= 1 current_state = new_state # 输出最终的结果 output_string = ''.join(tape) print('Output:', output_string) ``` 请注意,这只是一个简化的示例,实际的图灵机可能更加复杂。在实际应用中,你可能需要使用更高级的编程技术和库来处理更复杂的图灵机模型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值