• 编程作业--汉字编程


    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)
    
  • 相关阅读:
    饿了么 PostgreSQL 优化之旅
    kubernetes 滚动更新发布及回滚
    kubernetes yaml
    mongodb安装
    node.js安装
    linux输出换行
    把token放入请求头
    $.ajaxSetup
    js前端读取文件内容
    v-echarts安装
  • 原文地址:https://www.cnblogs.com/linlk7571/p/12289263.html
Copyright © 2020-2023  润新知