第一次个人编程作业

这个作业属于哪个课程 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]]

测试

  • 样例1

    • 输入

        整数 气温 等于 十
        气温 减少 三
        气温 增加 二
        看看 气温
        如果 气温 大于 八 则 看看 “你好,世界” 否则 看看 “冻死我了”
    • 输出
      第一次个人编程作业_第1张图片
  • 样例2

    • 输入

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

  • 样例3

    • 输入

        整数 气温 等于 十
        气温 减少 三
        气温 减少 四
        看看 气温
        如果 气温 等于 三 则 气温 除以 三 否则 气温 乘以 三
        看看 气温
    • 输出
      第一次个人编程作业_第2张图片

参考

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

  • 如何去除字符串首尾的一些符号:https://www.jb51.net/article/174567.htm
  • 异常处理:https://www.runoob.com/python/python-exceptions.html
  • 字典的一些用法:https://www.jianshu.com/p/f7842cc4aec5 https://www.runoob.com/python3/python3-dictionary.html

你可能感兴趣的:(第一次个人编程作业)