编程作业--汉字编程
GitHub链接:https://github.com/XGB0/-/blob/master/编程作业.py
这个作业属于哪个课程 | 软件工程 |
---|---|
这个作业要求在哪里 | 第一次个人编程作业 |
这个作业的目标 | 实现汉字编程 |
作业正文 | 博客园随笔 |
编程题目
汉字是迄今为止持续使用时间最长的文字,也是上古时期各大文字体系中唯一传承至今者,中国历代皆以汉字为主要的官方文字。我们在感叹汉字的源远流长时,也不禁感慨,为什么没有一门使用汉字编程的语言?
小杨同学想到:用汉字来进行编程一定很有趣,来请你帮帮他。
编程要求
请编写一个程序,制作一个简易的中文语言编译器,即使用中文语法进行编程,输入为逐行输入,每行为一个语句,一个语句代变一个操作,满足以下语法要求(括号内代变格式类型,具体参考样例):
变量定义:整数 (变量名) 等于 (数字)
运算(加法):(变量名) 增加 (数字)
运算(减法):(变量名) 减少 (数字)
输出:看看 (变量名) or 看看 “(字符串内容)”
附加要求:
选择:如果 (判断语句) 则 (操作语句) 否则 (操作语句)
若否则后没有任何操作使用(无)来进行填充(参考样例2)。
样例1
输入:
整数 气温 等于 十
气温 减少 三
气温 增加 二
看看 气温
如果 气温 大于 八 则 看看 “你好,世界” 否则 看看 “冻死我了”
输出:
九
你好,世界
样例2
输入:
整数 小杨年龄 等于 八
整数 小杨零花钱 等于 二
小杨年龄 增加 一
如果 小杨年龄 大于 八 则 小杨零花钱 增加 一 否则 无
看看 小杨零花钱
输出:
三
代码:
我先写了两个用来作文字转换的方法。
def change1(s1):
for s in s1:
if s=="一":
return(1)
elif s=="二":
return(2)
elif s=="三":
return(3)
elif s=="四":
return(4)
elif s=="五":
return(5)
elif s=="六":
return(6)
elif s=="七":
return(7)
elif s=="八":
return(8)
elif s=="九":
return(9)
elif s=="零":
return(0)
else:
return("输入错误,只能为零-九。")
# 中文数字 —> 阿拉伯数字
def change_alb(s):
m = 0
t = 1
if s[0]=="负":
s = s[1:]
t*=-1
# [ : : -1]将字符串逆序
s_nixu = s[ : : -1]
for c in s_nixu:
m = change1(c)*t + m
t*=10
return m
注:
我这里的10用的是"一零",不是"十"。输入"一零"对输入没有限制,"十"这种再补充。
def change2(s1):
for s in s1:
if s=="1":
return("一")
elif s=="2":
return("二")
elif s=="3":
return("三")
elif s=="4":
return("四")
elif s=="5":
return("五")
elif s=="6":
return("六")
elif s=="7":
return("七")
elif s=="8":
return("八")
elif s=="9":
return("九")
elif s=="0":
return("零")
elif s=="-":
return("负")
else:
return("输入错误,只能为0-9。")
# 阿拉伯数字 —> 中文数字
def change_zw(s):
s_zhongwen = ""
for c in s:
s_zhongwen += change2(c)
return s_zhongwen
def chuli(s):
s_list = s.split(" ")
## 定义语句
if s_list[0] == "整数" and len(s_list) == 4:
# print(s_list[3])
dict1[s_list[1]] = change_alb(s_list[3])
## 查看语句
elif (s_list[0] == "看看") and len(s_list) == 2:
# 取出key为s_list[1]的值
s_value = dict1.get(s_list[1], None)
if s_value:
print(change_zw(str(s_value)))
# 将阿拉伯数字的值转换成中文数字,并输出
else:
print(s_list[1][1:-1])
## 运算语句
else:
if s_list[1] == "减少" and len(s_list) == 3:
dict1[s_list[0]] = dict1[ s_list[0] ] - change_alb(s_list[2])
elif s_list[1] == "增加" and len(s_list) == 3:
dict1[s_list[0]] = dict1[ s_list[0] ] + change_alb(s_list[2])
对如果后面的判断语句进行判定的方法
def panduan(s):
if "大于" in s:
# 此处的 s_list 存放的是:所要判断的 变量名 和 判断的值。
s_list = s.split(" 大于 ")
if dict1[ s_list[0] ] > change_alb(s_list[1]):
return True
else:
return False
elif "小于" in s:
# 此处的 s_list 存放的是:所要判断的 变量名 和 判断的值。
s_list = s.split(" 小于 ")
if dict1[ s_list[0] ] < change_alb(s_list[1]):
return True
else:
return False
这段是主函数,先判断要执行的语句中是否存在如果,有的话让语句通过对["否则","则","如果"]遍历切割,先把三个语句切分出来,然后根据得到的元素(只存在如果),调用chuli方法对切割后的执行语句进行处理。
#def chuli(s):
def main(s) :
s_list = []
if "如果" in s:
s_list = []
for c in [" 否则 ", " 则 ", "如果 "]:
if c in s:
s_list1 = s.split(c)
s_list.append(s_list1[-1])
s = s_list1[0]
if len(s_list)>1:
if panduan(s_list[-1]):
chuli(s_list[-2])
else:
if s_list[0]=="无":
return 0
else:
chuli(s_list[0])
else:
chuli(s)
运行的时候通过这个来调用main方法,当输入为break的时候退出程序。
# 创建一个空字典来存放定义的变量名跟值,如{'气温': 7}
dict1 = {}
while(1):
s = input()
if s=="break":
break
main(s)