ε-CLOSURE(I)构造算法的程序实现免费编译原理课程设计合⼯⼤python
课设前⼏题都是⽐较简单的,不需要怎么动脑。
这⾥贴⼀份python代码,需要注意的是默认设定以下⼏种情况:
1.每个状态转换集只有⼀个⽬标,也就是转换矩阵中不允许出现多个字符。
2.状态必须以数字为标号,且按顺序从0开始⼀直往下
以上情况是为了减少代码⼯作量⽽做的设置,但⽂章末尾会把解决⽅法给⼤家。
那么接下来就是激动⼈⼼的贴代码时刻拉
def lection1(target):
草莓糖"这⾥是选择1的引导函数"
closure=FindClosure(target);
print('%d 的z闭包为:%s \n'%(target, closure));
return;
如何投资金条def lection2():
"选择2的引导函数,⽤i遍历所有状态,并找出相应的z闭包"
for i in raw_df.index :
closure=FindClosure(i)
print('%d 的z闭包为:%s \n'%(i,closure));
return;
def FindClosure(target):
"关键的寻找闭包函数"
closure=[];#⽤于存放寻找到的状态集
closure.append(target);#z闭包包括⾃⾝和经过任意条z弧能到达的状态
while(pd.isnull(raw_df.loc[target,'z'])==Fal):
#当target 经过z弧之后有后继结点(即target有向外的z弧),则进⾏循环
大学自主招生target=raw_df.loc[target,'z'];#把经过z弧之后的后继节点当作新的target,继续向下寻找
closure.append(target);#把这个新节点加⼊到z闭包中
return closure;
#主函数
if __name__ =='__main__':
print('Hello,world!');
各不相同的近义词import pandas as pd;
raw_ad_excel('datafile.xlsx');#导⼊表格数据
print(raw_df);#打印
礼仪坐姿
sign=input('请选择要执⾏的功能,输⼊编号后按回车,1.寻找⽬标字符的z闭包。\n2.⾃动寻找所有字符的z闭包\n');
if sign =='1':#选择功能
领导祝福语target=int(input('请输⼊要找的⽬标字符:\n'));#注意接受的是个字符,需要转换成int
lection1(target);
if sign =='2':
lection2();
这⾥给出开头两种情况的解决⽅案:
1.若转换矩阵包含多个字符,则需要在获取该格数据之后⽤split等函数进⾏分割,之后将这些分割好的字符全部加⼊到⼀个容器⾥⾯,可以⽤列表,字典等。然后依次从容器中取出⼀个字符进⾏闭包运算。直到容器为空,代表计算完毕,则停⽌。
2.⽤pandas的t_index()函数,设置新的索引值,新的索引值可以是各个状态,这样就可以实现abcd等索引⽅式,之后在代码内部修改loc相关函数即可
这个是数据表格,⽤Exel软件建⽴即可
输⼊输出结果:
家教自我介绍状态 z a b
0 0 4.0 NaN NaN
1 1 NaN 3.0 NaN
2 2 5.0 NaN NaN
3 3 NaN 2.0 NaN
4 4 1.0 4.0 4.0
5 5 6.0 5.0 5.0
6 6 NaN NaN NaN
请选择要执⾏的功能,输⼊编号后按回车,1.寻找⽬标字符的z闭包。
电脑设置不休眠
2.⾃动寻找所有字符的z闭包
2
0 的z闭包为:[0, 4.0, 1.0]
1 的z闭包为:[1]
2 的z闭包为:[2, 5.0, 6.0]
3 的z闭包为:[3]
4 的z闭包为:[4, 1.0]
5 的z闭包为:[5, 6.0]
6 的z闭包为:[6]
Process finished with exit code 0
最后,可以做的更加精细,以下是加分项:
1.闭包可视化——结果⾃动⽣成图像并保存
2.根据状态矩阵⾃动⽣成nfa图像——也是可视化
The End