xn*2图灵机实现

本文介绍了用Python实现xn*2的图灵机,运行环境为pycharm。先将十进制输入转换成二进制、扩展形式,经命令运算后再转换成收缩形式和十进制输出。给出了二进制与十进制转换、扩展与收缩形式转换及图灵机命令实现的算法和代码,还提及测试、调试及运行结果,总结了使用Python的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第二章上机

题目分析
题目:xn*2的图灵机实现

语言:Python 运行环境:pycharm

输入:十进制数

转换成二进制
转换成扩展形式
通过命令运算
转换成收缩形式
转换成十进制
输出:十进制数

算法构造
1>二进制转换成十进制:采用除二倒取余法

2>十进制转换成二进制:采用按权值展开求和的方法

3>二进制的扩展形式:将一个个二进制用0***0之间的1的数量来表示,并用2来作为两个数之间的分隔

4>二进制的收缩形式:将0***0之间的1的个数求出,并还原成二进制

5>图灵机的命令实现:根据当前内存和当前输入进行判断,改变内存状态和输出,一直到执行了stop命令停止

python代码实现

import math
print(“XN*2实现”)
print(“请输入数”)
num=int(input())
def Ejinz(x): #二进制转换
s=str()
while x!=0:
p=x%2
s=str§+s
x=x//2
return s
def shijinz(x):#十进制转换
sum=0
for i in range(len(x)):
sum+=int(x[i])*pow(2,len(x)-i-1)
return sum
def kuozhang(str1): #转换成扩展形式
str2=str()
for i in range(len(str1)):
if(str1[i]== “1”):
str2=str2+“10”
else:
str2=str2+“0”
str2+=“110”
return str2
def shoushuo(str3) :#转化成收缩模式
str4=str()
p=0
for j in range(len(str3)):
if(str3[j]“1”):
p=p+1
else:
if(p
1):
p=0
str4+=“1”
else:
if(p==0):
str4+=“0”
else:
p=0
return str4

def minglin( str5 ):#命令实现
str5=“0”+str5
str5+=“00”
print(str5)
h=0 #当前的内存状态
for k in range(len(str5)):
if(h0 and str5[k]“0”):
h=0
str5=str5[:k]+“0”+str5[k+1:]
print(str5)
continue
if(h0 and str5[k]“1”):
h=1
str5 = str5[:k] + “0” + str5[k+1 :]
print(str5)
continue
if(h1and str5[k]“0”):
h=0
str5 = str5[:k] + “1” + str5[ k+1 :]
print(str5)
continue
if(h1and str5[k]“1”):
h=10
str5 = str5[:k] + “0” + str5[ k+1 :]
print(str5)
continue
if(h10and str5[k]“0”):
h=11
str5 = str5[:k] + “1” + str5[ k +1:]
print(str5)
if(h11and str5[k]“0”):
h=0
str5= str5[:k] + “1” + str5[k+1 :]
print(str5)
break
return str5
y=Ejinz(num) #y二进制
s=kuozhang(y) #s扩展形式
s1=minglin(s) #s1命令结果
s2=shoushuo(s1) #s2收缩形式
num1=shijinz(s2) #num1结果
print(“结果是”,num1)

测试,调试,运行结果
测试,调试
(1)测试二进制转换的准确性:

测试代码:num=int(input())

      a=Ejinz(num)

     print(a)

在这里插入图片描述

   (2)测试十进制转换的准确性

          测试代码:num=int(input())

                    a=shijinz(num)

                    print(a)

在这里插入图片描述

   (3)测试扩展函数的准确性

          测试代码:num=input()

                    a=kuozhang(num)

                    print(a)

在这里插入图片描述

(4)测试收缩代码的准确性

          测试代码:num=input()

                    a=shoushuo(num)

                    print(a)

在这里插入图片描述

  (5)测试命令结果的准确性

          测试代码:num=input()

                    a=minglin (num)

                    print(a)

在这里插入图片描述

运行结果

在这里插入图片描述

总结
Python使用的不是很熟练,总是忘记在if和for后面忘记加:,所以编译老是错误。
对函数范围缩进的使用不是很熟练,习惯使用大括号,导致很多的if和for因为作用域的问题导致运行不出来。
字符串的使用,Python里面的字符串不可更改,无法使用是s[i]这种形式进行更改,经过百度,发现有两种方法,一是使用字符串序列切片方式,我采用的就是这种方法,二就是采用将字符串转换成列表后修改值,然后使用join函数组成新的字符串。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值