请编写一个程序,制作一个简易的中文语言编译器,即使用中文语法进行编程,输入为逐行输入,每行为一个语句,一个语句代变一个操作,满足以下语法要求(括号内代变格式类型,具体参考样例):
变量定义:整数(变量名)等于(数字)运算(加法):(变量名)增加(数字)运算(减法):(变量名)减少(数字)输出:看看(变量名)or看看“(字符串内容)”附加要求:
选择:如果(判断语句)则(操作语句)否则(操作语句)若否则后没有任何操作使用(无)来进行填充(参考样例2)。
输入:整数气温等于十气温减少三气温增加二看看气温如果气温大于八则看看“你好,世界”否则看看“冻死我了”
输出:九你好,世界
输入:整数小杨年龄等于八整数小杨零花钱等于二小杨年龄增加一如果小杨年龄大于八则小杨零花钱增加一否则无看看小杨零花钱
代码:我先写了两个用来作文字转换的方法。
defchange1(s1):forsins1:ifs=="一":return(1)elifs=="二":return(2)elifs=="三":return(3)elifs=="四":return(4)elifs=="五":return(5)elifs=="六":return(6)elifs=="七":return(7)elifs=="八":return(8)elifs=="九":return(9)elifs=="零":return(0)else:return("输入错误,只能为零-九。")#中文数字—>阿拉伯数字defchange_alb(s):m=0t=1ifs[0]=="负":s=s[1:]t*=-1#[::-1]将字符串逆序s_nixu=s[::-1]forcins_nixu:m=change1(c)*t+mt*=10returnm注:我这里的10用的是"一零",不是"十"。输入"一零"对输入没有限制,"十"这种再补充。
defchange2(s1):forsins1:ifs=="1":return("一")elifs=="2":return("二")elifs=="3":return("三")elifs=="4":return("四")elifs=="5":return("五")elifs=="6":return("六")elifs=="7":return("七")elifs=="8":return("八")elifs=="9":return("九")elifs=="0":return("零")elifs=="-":return("负")else:return("输入错误,只能为0-9。")#阿拉伯数字—>中文数字defchange_zw(s):s_zhongwen=""forcins:s_zhongwen+=change2(c)returns_zhongwendefchuli(s):s_list=s.split("")##定义语句ifs_list[0]=="整数"andlen(s_list)==4:#print(s_list[3])dict1[s_list[1]]=change_alb(s_list[3])##查看语句elif(s_list[0]=="看看")andlen(s_list)==2:#取出key为s_list[1]的值s_value=dict1.get(s_list[1],None)ifs_value:print(change_zw(str(s_value)))#将阿拉伯数字的值转换成中文数字,并输出else:print(s_list[1][1:-1])##运算语句else:ifs_list[1]=="减少"andlen(s_list)==3:dict1[s_list[0]]=dict1[s_list[0]]-change_alb(s_list[2])elifs_list[1]=="增加"andlen(s_list)==3:dict1[s_list[0]]=dict1[s_list[0]]+change_alb(s_list[2])对如果后面的判断语句进行判定的方法
defpanduan(s):if"大于"ins:#此处的s_list存放的是:所要判断的变量名和判断的值。s_list=s.split("大于")ifdict1[s_list[0]]>change_alb(s_list[1]):returnTrueelse:returnFalseelif"小于"ins:#此处的s_list存放的是:所要判断的变量名和判断的值。s_list=s.split("小于")ifdict1[s_list[0]] #defchuli(s):defmain(s):s_list=[]if"如果"ins:s_list=[]forcin["否则","则","如果"]:ifcins:s_list1=s.split(c)s_list.append(s_list1[-1])s=s_list1[0]iflen(s_list)>1:ifpanduan(s_list[-1]):chuli(s_list[-2])else:ifs_list[0]=="无":return0else:chuli(s_list[0])else:chuli(s)运行的时候通过这个来调用main方法,当输入为break的时候退出程序。