zoukankan      html  css  js  c++  java
  • 第一次个人编程作业

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/SE
    这个作业要求在哪里 https://edu.cnblogs.com/campus/fzzcxy/SE/homework/10283
    这个作业的目标 制作一个简易的中文语言编译器
    作业正文 如下
    其他参考文献 如下

    GitHub地址:https://github.com/BlueNeet/Software_engineering_Coursework

    编码过程中的消耗

    • 记录自己的代码行数:199行
    • 需求分析时间:1个小时
    • 编码时间:1天

    思路分析

    先把程序执行分为两个部分,一个是直接执行代码,另一个则是先判断后执行代码。直接执行的有赋值类型、运算类型、输出类型。需要判断的类型虽然判断后也是进行一样的过程,但由于需要进一步分解提取出代码故独立出来。一共写了六个自定义函数,分别是汉字转整型、整型转汉字、输出、则内的各种运算、否则内的各种运算。输出(看看)花了我很多时间去修正,是因为split分割出来的字符串的[0]是一个空内容,导致按照正常情况写的代码没有正常运行。还有汉字数组不能很好的不支持“==",于是我采用了字典的方法来保存内容。还有各种异常情况:除以0、输出未定义的变量、运行不存在的功能、想要加减乘除一个非数字等问题。有些问题只能写个异常来解决。

    代码

    def chtoint(y):
        global temp
        if y=='零':
            return 0
        elif y=='一':
            return 1
        elif y=='二':
            return 2
        elif y=='三':
            return 3
        elif y=='四':
            return 4
        elif y=='五':
            return 5
        elif y=='六':
            return 6
        elif y=='七':
            return 7
        elif y=='八':
            return 8
        elif y=='九':
            return 9
        elif y=='十':
            return 10
        else:
            print("数字有问题")
            return "errorx"
    
    def inttoch(z):
        if z==1:
             return '一'
        elif z==2:
            return '二'
        elif z==3:
            return '三'
        elif z==4:
            return '四'
        elif z==5:
            return '五'
        elif z==6:
            return '六'
        elif z==7:
            return '七'
        elif z==8:
            return '八'
        elif z==9:
            return '九'
        elif z==10:
            return '十'
        else:
            print("数字有问题")
    def printo(charr):
        try:
            print(inttoch(strings[charr[1]]))
        except KeyError:
            if charr[1][0]=="“":
                tekst=charr[1]
                tekst=tekst.strip('“')
                tekst=tekst.strip('”')
                print(tekst)
            else:
                print("未初始化该量")
                return error
    
    def firstrslt(ze):
        if ze[1]=="看看":
            ze[0]=ze[1]
            ze[1]=ze[2]
            printo(ze)
        elif ze[1]=="无":
            return 0
        elif ze[2]=="增加":
            change=chtoint(ze[3])
            if change!="errorx":
                strings[ze[1]]=strings[ze[1]]+change
        elif ze[2]=="减少":
            change=chtoint(ze[3])
            if change!="errorx":
                strings[ze[1]]=strings[ze[1]]-change
        elif ze[2]=="乘以" or ze[2]=="除以":
            change=chtoint(ze[3])
            if ze[2]=="乘以":
                if change!="errorx":
                    strings[ze[1]]=strings[ze[1]]*change
            else:
                if change==0:
                    print("分母不可为零")
                else:
                    if change!="errorx":
                        strings[ze[1]]=strings[ze[1]]/change
        else:
            print("则里的动作错误")
    
    def secrslt(fouze):
        if fouze[1]=="看看":
            fouze[0]=fouze[1]
            fouze[1]=fouze[2]
            printo(fouze)
        elif fouze[1]=="无":
            return 
        elif fouze[2]=="增加":
            change=chtoint(fouze[3])
            if change!="errorx":
                strings[fouze[1]]=strings[fouze[1]]+change
        elif fouze[2]=="减少":
            change=chtoint(fouze[3])
            if change!="errorx":
                strings[fouze[1]]=strings[fouze[1]]-change
        elif fouze[2]=="乘以" or fouze[2]=="除以":
            change=chtoint(fouze[3])
            if fouze[2]=="乘以":
                if change!="errorx":
                    strings[fouze[1]]=strings[fouze[1]]*change
            else:
                if change==0:
                    print("分母不可为零")
                else:
                    if change!="errorx":
                        strings[fouze[1]]=strings[fouze[1]]/change
        else:
            print("否则里的动作错误")
    
    def ChParser():
        text=input()
        charr=text.split(" ")
        if text=="":
            return
        elif len(charr)<3 and charr[0]!="看看":
            print("无此命令!!!")
    
        elif charr[0]=="整数" and charr[2]=="等于":
            strings[charr[1] ]=chtoint(charr[3])
        elif charr[0]=="看看":
            printo(charr)
        elif charr[1]=="增加" or charr[1]=="减少":
            change=chtoint(charr[2])
            if charr[1]=="增加" and change!="errorx":   
                strings[charr[0]]=strings[charr[0]]+change
            elif charr[1]=="减少" and change!="errorx":
                strings[charr[0]]=strings[charr[0]]-change
    
        elif charr[1]=="乘以" or charr[1]=="除以":
            change=chtoint(charr[2])
            if charr[1]=="乘以":
                strings[charr[0]]=strings[charr[0]]*change
            else:
                if change==0:
                    print("分母不可为零")
                else:
                    strings[charr[0]]=strings[charr[0]]/change
    
        elif charr[0]=="如果" and charr[2]=="大于":
            kuchi=text.split("则",1)
            sentence=kuchi[1].split("否则")
            ze=sentence[0].split(" ")
            fouze=sentence[1].split(" ")
            if strings[charr[1]]>chtoint(charr[3]):
                firstrslt(ze)
            else:
                secrslt(fouze)        
                
        elif charr[0]=="如果" and charr[2]=="小于":
            kuchi=text.split("则",1)
            sentence=kuchi[1].split("否则")
            ze=sentence[0].split(" ")
            fouze=sentence[1].split(" ")    
            if strings[charr[1]]<chtoint(charr[3]):
                firstrslt(ze)
            else:
                secrslt(fouze)
    
        elif charr[0]=="如果" and charr[2]=="等于":
            kuchi=text.split("则",1)
            sentence=kuchi[1].split("否则")
            ze=sentence[0].split(" ")
            fouze=sentence[1].split(" ")
            if strings[charr[1]]==chtoint(charr[3]):
                firstrslt(ze)
            else:
                secrslt(fouze)
    
        elif charr[0]=="如果" and charr[2]=="不等于":
            kuchi=text.split("则",1)
            sentence=kuchi[1].split("否则")
            ze=sentence[0].split(" ")
            fouze=sentence[1].split(" ")
    
            if strings[charr[1]]!=chtoint(charr[3]):
                firstrslt(ze)
            else:
                secrslt(fouze)
        else:
            print("无此命令!!!")
    
       
            
    if __name__=="__main__":
        strings={}
        while True:
            ChParser()
    

    测试

    • 样例1

      • 输入
          整数 气温 等于 十
          气温 减少 三
          气温 增加 二
          看看 气温
          如果 气温 大于 八 则 看看 “你好,世界” 否则 看看 “冻死我了”
        
      • 输出
    • 样例2

      • 输入
          整数 小杨年龄 等于 八
          整数 小杨零花钱 等于 二
          小杨年龄 增加 一
          如果 小杨年龄 大于 八 则 小杨零花钱 增加 一 否则 无
          看看 小杨零花钱
        
      • 输出
    • 样例3

      • 输入
          整数 气温 等于 十
          气温 减少 三
          气温 减少 四
          看看 气温
          如果 气温 等于 三 则 气温 除以 三 否则 气温 乘以 三
          看看 气温
        
      • 输出

    参考

    由于python课程学的不深加上已经学了快2年了,所以我重新简要的去学习了一下python

  • 相关阅读:
    Redis认识
    常见注解和LambdaQueryWrapper
    微信开发思路和一些文档
    安全框架
    学习:Token
    javascript中对象的创建-原型模式1
    开发常用工具
    【java爬虫--1】Htmlunit+Jsoup解析非静态页面爬取图片
    【java爬虫--2】将批量图片地址转成pdf文件
    文本文件按行去重,有序输出
  • 原文地址:https://www.cnblogs.com/jillsandwich/p/12274285.html
Copyright © 2011-2022 走看看