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

    这个作业属于哪个课程 软件工程(福州大学至诚学院计算机工程系)
    这个作业要求在哪里 第一次编程作业要求
    这个作业的目标 用汉字写编程语言
    作业正文 正文如下
    其他参考文献 没有
    GITHUB仓库 https://github.com/zZYLinda/zhuyunlin

    作业要求

    发布一篇随笔,使用markdown语法进行编辑。
    在随笔前附上github仓库地址

    编程题目

    汉字是迄今为止持续使用时间最长的文字,也是上古时期各大文字体系中唯一传承至今者,中国历代皆以汉字为主要的官方文字。我们在感叹汉字的源远流长时,也不禁感慨,为什么没有一门使用汉字编程的语言?
    小杨同学想到:用汉字来进行编程一定很有趣,来请你帮帮他。

    编程要求

    请编写一个程序,制作一个简易的中文语言编译器,即使用中文语法进行编程,输入为逐行输入,每行为一个语句,一个语句代变一个操作,满足以下语法要求(括号内代变格式类型,具体参考样例):
    变量定义:整数 (变量名) 等于 (数字)
    运算(加法):(变量名) 增加 (数字)
    运算(减法):(变量名) 减少 (数字)
    输出:看看 (变量名) or 看看 “(字符串内容)”
    附加要求:
    选择:如果 (判断语句) 则 (操作语句) 否则 (操作语句)
    若否则后没有任何操作使用(无)来进行填充(参考样例2)。

    注意事项

    输入输出采用utf-8编码,请在编码过程中注意。
    数字只会出现:零一二三四五六七八九十。(此条作废,可先完成0-10的情况)
    字符串输出的双引号是全角,即中文双引号。
    变量类型要求只有整数,如有余力,可以自己实现更多。
    测试数据会相较于样例复杂,请考虑充分需求。
    不限制编程语言。
    不能使用eval函数动态执行代码,或调用系统指令。
    数据输入形式为交互式运行,类似于shell。

    编码

    内容
    代码行数 442
    需求分析时间 大概3-4小时
    编码时间 我是用很多零零散散时间才全部完成的,估计编码时间就两个半小时

    代码部分

    #这道题目用汉字来做加减法,刚开始有思路的就是如何把汉字转化为数字,我把他们分为几部分,第一类是0-9和100,
    #这几个比较特殊,我打算采用一个函数来完成,通过某种判断条件运行这个函数
    def a(a):#不含十的汉字转数字
        if (a == '零'):
            return 0
        if (a == '一'):
            return 1
        if (a == '二'):
            return 2
        if (a == '三'):
            return 3
        if (a == '四'):
            return 4
        if (a == '五'):
            return 5
        if (a == '六'):
            return 6
        if (a == '七'):
            return 7
        if (a == '八'):
            return 8
        if (a == '九'):
            return 9
        if (a == '一百'):
            return 100
    
    #第二类,就是都含有“十”这个字,所以我想到了用分离
    #我只需要提取出来十,以十为界限
    def b(b):#含十的汉字转文字
        if (len(b)!=3):
             if (b == '十'):
                return 10
             if (b == '二十'):
                return 20
             if (b == '三十'):
                return 30
             if (b == '四十'):
                return 40
             if (b == '五十'):
                return 50
             if (b == '六十'):
                return 60
             if (b == '七十'):
                return 70
             if (b == '八十'):
                return 80
             if (b == '九十'):
                return 90
        else:
            a=b.split('十')
            if (a[0] == '一'):
                c=10
            if (a[0] == '二'):
                c=20
            if (a[0] == '三'):
                c=30
            if (a[0] == '四'):
                c=40
            if (a[0] == '五'):
                c=50
            if (a[0] == '六'):
                c=60
            if (a[0] == '七'):
                c=70
            if (a[0] == '八'):
                c=80
            if (a[0] == '九'):
                c=90
            if (a[1] == '一'):
                d=1
            if (a[1] == '二'):
                d=2
            if (a[1] == '三'):
                d=3
            if (a[1] == '四'):
                d=4
            if (a[1] == '五'):
                d=5
            if (a[1] == '六'):
                d=6
            if (a[1] == '七'):
                d=7
            if (a[1] == '八'):
                d=8
            if (a[1] == '九'):
                d=9
            return c+d
    
    #除了汉字转数字,查看时,也要用数字来转成汉字
    def c(a):#十以内数字转汉字
        if (a == 0):
            return '零'
        if (a == 1):
            return '一'
        if (a == 2):
            return '二'
        if (a == 3):
            return '三'
        if (a == 4):
            return '四'
        if (a == 5):
            return '五'
        if (a == 6):
            return '六'
        if (a == 7):
            return '七'
        if (a == 8):
            return '八'
        if (a == 9):
            return '九'
    
    def d(a):#十到一百的数字转汉字
        if a%10==0:
            if (a/10 == 1):
                return '十'
            if (a/10 == 2):
                return '二十'
            if (a/10 == 3):
                return '三十'
            if (a/10 == 4):
                return '四十'
            if (a/10 == 5):
                return '五十'
            if (a/10 == 6):
                return '六十'
            if (a/10 == 7):
                return '七十'
            if (a/10 == 8):
                return '八十'
            if (a/10 == 9):
                return '九十'
            if (a/10 == 10):
                return '一百'
        else:
            b=a//10
            c=a%10
            if (b == 1):
                e='十'
            if (b == 2):
                e = '二十'
            if (b == 3):
                e = '三十'
            if (b == 4):
                e = '四十'
            if (b == 5):
                e = '五十'
            if (b == 6):
                e = '六十'
            if (b == 7):
                e = '七十'
            if (b == 8):
                e = '八十'
            if (b == 9):
                e = '九十'
            if (c == 1):
                f = '一'
            if (c == 2):
                f = '二'
            if (c == 3):
                f = '三'
            if (c == 4):
                f = '四'
            if (c == 5):
                f = '五'
            if (c == 6):
                f = '六'
            if (c == 7):
                f = '七'
            if (c == 8):
                f = '八'
            if (c == 9):
                f = '九'
            g=e+f
            return g
    
    #之后想了很久才开始写主题函数,中间请教了田硕同学,写一个输入函数,由于案例二有两个需要同时使用,所以要写一个数组,用来存放不同的计算过程
    
    h=''#还要有一个字符串来存放变量名
    
    #我用一个无限while循环来输入,当输入结束的时候停止循环
    import numpy as np
    def star():
        a =np.zeros(100)#数组,用于存储不同计算过程
        while (1):
            str = input("请输入:");#循环输入指令,当输入的 结束 的时候结束循环
            if (str=='结束'):
                break;
            else:
                e(str,a)#此处跳转一个判断函数,用来执行输入语句
    star()
    
    #输入一句话,就要去执行,我在开始函数中跳转了一个判断函数
    def e(str,a):#对最开始语句的判断来执行相应的函数
        s=str.split(" ")
        if (len(s)<=2):
            if (s[0]=='看看'):
                kk(str,a)
            else:
                print("命令不成立!")
        else:
            if (s[2]=='等于'):
                dy(str,a) 
            elif (s[1]=='增加'):
                zj(s,a)
            elif (s[1]=='减少'):
                js(s,a)
            elif (s[0]=='如果'):
                rg(str,a)
            else:
                print("命令不成立!")
    
    #这个函数是写 看看 钱包这种语句的,是查询作用
    def kk(str,a):
        s=str.split(" ")
        global h
        if (h.find(s[1])==-1):#没有创建变量
            print("没有创建相应的变量")
        else:#创建过变量
            kankan(str,a)
    def kankan(str,a):#看看 (变量名)的输出判断
        s=str.split(' ')
        if (a[h.find(s[1])]>10):#若大于10则进行一种转换函数
            print(d(a[h.find(s[1])]))
        else:
            print(c(a[h.find(s[1])]))
    
    #整数 气温 等于 十
    def dy(str,a):#为不同变量寻找相应位置
        s=str.split(" ")
        global h
        if (h.find(s[1])==-1):#没有创建变量
            h=h+s[1]
            chushi(str,a)
        else:#创建过变量
            chushi(str,a)
    def chushi(str,a):#初始化
        s=str.split(' ')
        if (len(s[3].split('十'))==1):#判定初始时是否含有'十'
            a[h.find(s[1])]=a(s[3])
        if(len(s[3].split('十'))==2):
            a[h.find(s[1])]=b(s[3])
    
    def zj(s,a):
        global h
        if (h.find(s[0])==-1):#没有创建变量
            print("没有创建相应的变量")
        else:#创建过变量
            jiajian(s,a)
    def jiajian(s,a):#调用
        a[h.find(s[0])]=yss(s,a)
        
    def yss(s,a):#运算  百以内的加减
        if (s[1] == '增加'):
            if (len(s[2].split('十'))==1):#判断
                return a[h.find(s[0])]+a(s[2])
            if(len(s[2].split('十'))==2):
                return a[h.find(s[0])]+b(s[2])
        if (s[1] == '减少'):
            if (len(s[2].split('十'))==1):#判断
                return a[h.find(s[0])]-a(s[2])
            if(len(s[2].split('十'))==2):
                return a[h.find(s[0])]-b(s[2])
    
    def rg(str,a):
        s=str.split(" ")
        global h
        if (h.find(s[1])==-1):#没有创建变量
            print("没有创建相应的变量")
        else:#创建过变量
            rgg(str,a)
    def rgg(str,a):#自定义判断语句
        s=str.split(" ")
        if (s[2]=='大于'):
            if (len(s[3].split('十'))==1):#判定初始时是否含有'十'
                if(a[h.find(s[1])]>=a(s[3])):
                    if (s[5]=='看看'):
                        q=s[6].replace('”','')
                        q=q.replace('“','')
                        print(q)
                    else:
                        zj(s[5:8],a)
                else:
                    if (s[5]=='看看'):
                        q=s[9].replace('”','')
                        q=q.replace('“','')
                        print(q)
                    else:
                        ptirnt("无")
            if(len(s[3].split('十'))==2):
                if(a[h.find(s[1])]>=b(s[3])):
                    if (s[5]=='看看'):
                        q=s[6].replace('”','')
                        q=q.replace('“','')
                        print(q)
                    else:
                        zj(s[5:8],a)
                else:
                    if (s[5]=='看看'):
                        q=s[9].replace('”','')
                        q=q.replace('“','')
                        print(q)
                    else:
                        ptirnt("无")
        if (s[2]=='小于'):
            if (len(s[3].split('十'))==1):#判定初始时是否含有'十'
                if(a[h.find(s[1])]<a(s[3])):
                    if (s[5]=='看看'):
                        q=s[9].replace('”','')
                        q=q.replace('“','')
                        print(q)
                    else:
                        zj(s[5:8],a)
                else:
                    if (s[5]=='看看'):
                        q=s[6].replace('”','')
                        q=q.replace('“','')
                        print(q)
                    else:
                        ptirnt("无")
            if(len(s[3].split('十'))==2):
                if(a[h.find(s[1])]<b(s[3])):
                    if (s[5]=='看看'):
                        q=s[9].replace('”','')
                        q=q.replace('“','')
                        print(q)
                    else:
                        zj(s[5:8],a)
                else:
                    if (s[5]=='看看'):
                        q=s[6].replace('”','')
                        q=q.replace('“','')
                        print(q)
                    else:
                        ptirnt("无")
    

    个人体会

    最后的看看函数,等于函数,增加函数,减少函数都有参考田硕同学的代码,其他函数部分为自己想的,经过这次之后深刻体会到自己编码能力的不足

  • 相关阅读:
    Vuforia7+Unity2017.3.f3实践练习
    pureMVC+unity
    sql语法小结
    ScreenToViewportPoint,WorldToViewportPoint,ViewportToWorldPoint的运用,实现一个简单的对三维中物体的拖拽移动效果
    Unity游戏开发学习之路——数据持久化
    Unity游戏开发之路上的那些坑——NullReferenceException
    ffmpeg-音频视频处理
    微信开发之(五)接收语音识别结果
    微信开发之(五)获取media_id的值
    微信开发之(五)微信获取自定义菜单
  • 原文地址:https://www.cnblogs.com/zhuyunlin/p/12289055.html
Copyright © 2011-2022 走看看