第一次编程作业

这个作业属于哪个课程 软件工程
这个作业要求在哪里 第一次个人编程作业
这个作业的目标 发布一篇随笔,使用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)
posted @ 2020-02-08 17:30  快给我康康  阅读(248)  评论(0编辑  收藏