编程作业--汉字编程

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)
posted @ 2020-02-09 22:51  linlk  阅读(499)  评论(0编辑  收藏  举报