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

    这个作业属于哪个课程 软件工程
    这个作业要求在哪里 第一次个人编程作业
    这个作业的目标 发布一篇随笔,使用markdown语法进行编辑。在随笔前附上github仓库地址
    作业正文
    参考文献

    编程题目

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

    编程要求

    请编写一个程序,制作一个简易的中文语言编译器,即使用中文语法进行编程,输入为逐行输入,每行为一个语句,一个语句代变一个操作,满足以下语法要求(括号内代变格式类型,具体参考样例):

    • 变量定义:整数 (变量名) 等于 (数字)
    • 运算(加法):(变量名) 增加 (数字)
    • 运算(减法):(变量名) 减少 (数字)
    • 输出:看看 (变量名) or 看看 “(字符串内容)”

    附加要求:

    • 选择:如果 (判断语句) 则 (操作语句) 否则 (操作语句)
      若否则后没有任何操作使用(无)来进行填充(参考样例2)。

    注意事项

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

    案例一:代码124行,分析时间大概30分钟,编码时间用了将近两个小时
    1、输入部分的代码

    def 输入():
        str = input()
        s = str.split()
        if len(s)>0:
            if s[0] == '整数':
                wendu[0] = s[1]
            elif s[0] == '看看' or '如果':
                wendu[0] = s[1]
            else:
                wendu[0] = s[0]
            return s
        else:
            return None
    

    2、将汉字数字转换为阿拉伯数字

    def 转换1(s):
        if len(s) <= 2:
            s[1] = s[1]
        elif s[2] == '零':
            s[2] = 0
        elif s[2] == '一':
            s[2] = 1
        elif s[2] == '二':
            s[2] = 2
        elif s[2] == '三':
            s[2] = 3
        elif s[2] == '四':
            s[2] = 4
        elif s[2] == '五':
            s[2] = 5
        elif s[2] == '六':
            s[2] = 6
        elif s[2] == '七':
            s[2] = 7
        elif s[2] == '八':
            s[2] = 8
        elif s[2] == '九':
            s[2] = 9
        elif s[2] == '十':
            s[2] = 10
        elif s[3] == '零':
            s[3] = 0
        elif s[3] == '一':
            s[3] = 1
        elif s[3] == '二':
            s[3] = 2
        elif s[3] == '三':
            s[3] = 3
        elif s[3] == '四':
            s[3] = 4
        elif s[3] == '五':
            s[3] = 5
        elif s[3] == '六':
            s[3] = 6
        elif s[3] == '七':
            s[3] = 7
        elif s[3] == '八':
            s[3] = 8
        elif s[3] == '九':
            s[3] = 9
        elif s[3] == '十':
            s[3] = 10
        return s
    

    3、将阿拉伯数字转换为汉字数字

    def 转换2():
        if wendu[1] == 0:
            wendu[3] = '零'
        elif wendu[1] == 1:
            wendu[3] = '一'
        elif wendu[1] == 2:
            wendu[3] = '二'
        elif wendu[1] == 3:
            wendu[3] = '三'
        elif wendu[1] == 4:
            wendu[3] = '四'
        elif wendu[1] == 5:
            wendu[3] = '五'
        elif wendu[1] == 6:
            wendu[3] = '六'
        elif wendu[1] == 7:
            wendu[3] = '七'
        elif wendu[1] == 8:
            wendu[3] = '八'
        elif wendu[1] == 9:
            wendu[3] = '九'
        elif wendu[1] == 10:
            wendu[3] = '十'
        return s
    

    4、使用s数组部分的代码

    def 使用(s):
        if (s[0]=='整数') and (s[2]=='等于'):
            wendu[0] = s[1]
            #print(wendu[0])
            wendu[1] = s[3]
            #print(wendu[1])
        if s[0] == wendu[0]:
            #气温 减少 三
            if s[1] == '减少':
                wendu[1] = wendu[1] - s[2]
                #print(wendu[1])
            #气温 增加 二
            if s[1] == '增加':
                wendu[1] = wendu[1] + s[2]
                #print(wendu[1])
        #看看 气温
        if s[0] == '看看':
            转换2()
            print(wendu[3])
        #如果0 气温1 大于2 八3 则4 看看5 “你好,世界”6 否则7 看看8 “冻死我了”9
        if s[0] == '如果':
            if s[2] == '大于':
                if wendu[1] > s[3]:
                    print(s[6])
                else:
                    print(s[9])
    

    5、最后一部分--运行

    if __name__ == '__main__':
        wendu = ['',0,0,'']
        while(1):
            s = 输入()
            if s != None:
                s = 转换1(s)
                使用(s)
    

    案例二是写完案例一第二天才开始做的,结合案例一部分内容进行修改了一下,代码136行,分析用了10分钟左右,然后编码大概花了45分钟吧,因为字典部分的知识有点忘了
    下面就是案例二的代码
    1、输入部分的代码

    def 输入():
        str = input()
        s = str.split()
        #print(s)
        if len(s)>0:
            if (s[0] == '整数') and (s[1] == '小杨年龄'):
                xiaoyang[s[1]] = None
            elif (s[0] == '整数') and (s[1] == '小杨零花钱'):
                xiaoyang[s[1]] = None
            return s
        else:
            return None
    

    2、将汉字数字转换为阿拉伯数字

    def 转换1(s):
        if len(s) <= 2:
            s[1] = s[1]
        elif s[2] == '零':
            s[2] = 0
        elif s[2] == '一':
            s[2] = 1
        elif s[2] == '二':
            s[2] = 2
        elif s[2] == '三':
            s[2] = 3
        elif s[2] == '四':
            s[2] = 4
        elif s[2] == '五':
            s[2] = 5
        elif s[2] == '六':
            s[2] = 6
        elif s[2] == '七':
            s[2] = 7
        elif s[2] == '八':
            s[2] = 8
        elif s[2] == '九':
            s[2] = 9
        elif s[2] == '十':
            s[2] = 10
        elif s[3] == '零':
            s[3] = 0
        elif s[3] == '一':
            s[3] = 1
        elif s[3] == '二':
            s[3] = 2
        elif s[3] == '三':
            s[3] = 3
        elif s[3] == '四':
            s[3] = 4
        elif s[3] == '五':
            s[3] = 5
        elif s[3] == '六':
            s[3] = 6
        elif s[3] == '七':
            s[3] = 7
        elif s[3] == '八':
            s[3] = 8
        elif s[3] == '九':
            s[3] = 9
        elif s[3] == '十':
            s[3] = 10
        return s
    

    3、#将阿拉伯数字转换为汉字数字

    def 转换2(a):
        if xiaoyang[a] == 0:
            xiaoyang[a] = '零'
        elif xiaoyang[a] == 1:
            xiaoyang[a] = '一'
        elif xiaoyang[a] == 2:
            xiaoyang[a] = '二'
        elif xiaoyang[a] == 3:
            xiaoyang[a] = '三'
        elif xiaoyang[a] == 4:
            xiaoyang[a] = '四'
        elif xiaoyang[a] == 5:
            xiaoyang[a] = '五'
        elif xiaoyang[a] == 6:
            xiaoyang[a] = '六'
        elif xiaoyang[a] == 7:
            xiaoyang[a] = '七'
        elif xiaoyang[a] == 8:
            xiaoyang[a] = '八'
        elif xiaoyang[a] == 9:
            xiaoyang[a] = '九'
        elif xiaoyang[a] == 10:
            xiaoyang[a] = '十'
        return s
    

    4、使用s数组部分,也就是根据题意操作部分

    def 使用(s):
        #整数 小杨年龄 等于 八
        if (s[0]=='整数') and (s[2]=='等于'):
            xiaoyang[s[1]] = s[3]
        #小杨年龄 增加 一
        if s[0] == '小杨年龄':
            xiaoyang[s[0]] = xiaoyang[s[0]] + s[2]
        #如果 小杨年龄 大于 八 则 小杨零花钱 增加 一 否则 无
        if s[0] == '如果':
            if s[2] == '大于':
                if xiaoyang[s[1]] > s[3]:
                    xiaoyang[s[5]] = xiaoyang[s[5]] + 1
                    转换2(s[5])
                    print(xiaoyang[s[5]])
                else:
                    None
        #看看 小杨零花钱
        if s[0] == '看看':
            转换2(s[1])
            print(xiaoyang[s[1]])
    

    5、最后就是案例二的运行部分代码

    if __name__ == '__main__':
        xiaoyang = {}
        while (1):
            s = 输入()
            if s != None:
                s = 转换1(s)
                使用(s)
    
  • 相关阅读:
    POJ 1141 Brackets Sequence (区间DP)
    UVaLive 6585 && Gym 100299F Draughts (暴力+回溯)
    UVaLive 6950 && Gym 100299K Digraphs (DFS找环或者是找最长链)
    UVaLive 6588 && Gym 100299I (贪心+构造)
    UVa 1611 Crane (构造+贪心)
    Gym 100299C && UVaLive 6582 Magical GCD (暴力+数论)
    UVa 1642 Magical GCD (暴力+数论)
    UVaLive 6591 && Gym 100299L Bus (水题)
    UVaLive 6581 && Gym 100299B What does the fox say? (模拟+STL)
    HDU 5898 odd-even number (数位DP)
  • 原文地址:https://www.cnblogs.com/ckjj/p/12269809.html
Copyright © 2011-2022 走看看