第一次个人编程作业

第一次个人编程作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/SE
这个作业要求在哪里 https://edu.cnblogs.com/campus/fzzcxy/SE/homework/10283
这个作业的目标 编写一个程序,制作一个简易的中文语言编译器
作业正文 第一次个人编程作业
其他参考文献 Python元组 Python函数
GitHub链接 旧版代码Git 新版代码Git

编程题目

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

编程要求

请编写一个程序,制作一个简易的中文语言编译器,即使用中文语法进行编程,输入为逐行输入,每行为一个语句,一个语句代变一个操作,满足以下语法要求(括号内代变格式类型,具体参考样例):
变量定义:整数 (变量名) 等于 (数字)
运算(加法):(变量名) 增加 (数字)
运算(减法):(变量名) 减少 (数字)
输出:看看 (变量名) or 看看 “(字符串内容)”

附加要求:

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

代码行数: 128行 171行

所用时间:

Python的自学:2天。分析和代码框架建立:1天。补全代码:一个下午。
总有人以为自己学了点爬虫就会python.mp4感觉没啥拿得出手的语言,Java学的不太行,C也有点遗忘了,那干脆来个没学的python吧(迫真。

思路:旧版代码思路:

1.创建中文数字转阿拉伯数字的函数trans1,再创建阿拉伯数字转中文数字的函数trans2(本想用字典实现的,但是在学习字典的反向使用中遇到了困难,所以只好用if else来实现)trans1用于获取输入并将数字用于计算,trans2用于把计算结果转换成中文。
2.创建函数获取输入,将输入的中文存在在字符串str中,用split(" ")以空格为分片。循环获取输入,返回输入值直至输入为空,返回None。
3.创建使用部分函数,使用if判断输入,输入正确则将输入存入字符串并赋值给2个转换函数中的参数。当输入到增加、减少部分将元组相应位置进行计算,当输入到判断位置,时进行判断并输出判断结果。

# 以下为旧版代码:
# -*- coding: UTF-8 -*-


def trans1(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


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


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


def rep(s, temp):
    if (s[0] == '整数') and (s[2] == '等于'):
        temp[0] = s[1]  # 整数 气温
        # print(temp[0])
        temp[1] = s[3]  # 等于 十
        # print(temp[1])
    if s[0] == temp[0]:
        if s[1] == '减少':  # 气温 减少 二
            temp[1] = temp[1] - s[2]
            # print(temp[1])
        if s[1] == '增加':  # 气温 增加 四
            temp[1] = temp[1] + s[2]
            # print(temp[1])

    if s[0] == '看看':  # 看看 气温
        trans2(temp)
        print(temp[3])

    if s[0] == '如果':  # 如果 气温 大于 八 则 看看 “你好,世界” 否则 看看 “冻死我了”
        if s[2] == '大于':
            if temp[1] > s[3]:
                print(s[6])     # “你好,世界”
            else:
                print(s[9])     # “冻死我了”


if __name__ == '__main__':
    temp = ['', 0, 0, '']
    while 1:
        s = get_input()
        if s is not None:
            s = trans1(s)
            temp = trans2(temp)
            rep(s, temp)

代码肯定仍存在不少问题,欢迎大家提出。

更新后代码已写出:

# -*- coding: UTF-8 -*-


def trans2num(c):
    if c == "零":
        return 0
    elif c == "一":
        return 1
    elif c == "二":
        return 2
    elif c == "三":
        return 3
    elif c == "四":
        return 4
    elif c == "五":
        return 5
    elif c == "六":
        return 6
    elif c == "七":
        return 7
    elif c == "八":
        return 8
    elif c == "九":
        return 9
    elif c == "十":
        return 10
    else:
        print("暂不支持0-10以外数字!")


def trans2cn(num):
    if num == 0:
        return "零"
    elif num == 1:
        return "一"
    elif num == 2:
        return "二"
    elif num == 3:
        return "三"
    elif num == 4:
        return "四"
    elif num == 5:
        return "五"
    elif num == 6:
        return "六"
    elif num == 7:
        return "七"
    elif num == 8:
        return "八"
    elif num == 9:
        return "九"
    elif num == 10:
        return "十"
    else:
        print("暂不支持0-10以外数字!")


print("输入仅支持0-10以内的加减运算,按回车结束。")
try:
    ndict = {}  # 用字典存放变量名及对应变量值
    while 1:  # 用死循环来变得像交互式
        no = input()  # 装入语句
        n = no.split(" ")   # 空格分片并简化
        if no is "":  # 输入结束后按回车退出
            exit()
        if n[0] == "整数":  # 对“整数”开头语句的定义
            ndict[n[1]] = trans2num(n[3])  # 装入变量名及对应变量值
        elif n[0] in ndict.keys():  # 对“变量名”开头语句的操作
            if n[1] == "减少":
                ndict[n[0]] -= trans2num(n[2])
            elif n[1] == "增加":
                ndict[n[0]] += trans2num(n[2])
            
        elif n[0] == "看看":
            if n[1] in ndict.keys():
                print(trans2cn(ndict[n[1]]))    # 输出指定变量值
            else:
                print("未声明的变量!")        # 未定义变量时发出提示
        elif n[0] == "如果":  # 判断部分
            if n[2] == "大于":  # 判断是否大于
                if ndict[n[1]] > trans2num(n[3]):  # “则”后的处理
                    if n[5] == "看看":
                        print(n[6][1:-1])
                    else:
                        if n[6] == "增加":
                            ndict[n[5]] += trans2num(n[7])  # 增加操作
                        elif n[6] == "减少":
                            ndict[n[5]] -= trans2num(n[7])  # 减少操作

                else:  # “否则”后的处理
                    if n[8] == "看看":
                        print(n[9][1:-1])
                    elif n[8] == "无":
                        pass
                    elif n[9] == "无":
                        pass
                    elif n[9] == "增加":
                        ndict[n[8]] += trans2num(n[10])
                    elif n[9] == "减少":
                        ndict[n[8]] -= trans2num(n[10])

                    elif n[9] == "看看":
                        print(n[10][1:-1])
                    elif n[10] == "增加":
                        ndict[n[9]] += trans2num(n[11])
                    elif n[10] == "减少":
                        ndict[n[9]] -= trans2num(n[11])

            if n[2] == "小于":  # 判断是否小于
                if ndict[n[1]] < trans2num(n[3]):  # “则”后的处理
                    if n[5] == "看看":
                        print(n[6][1:-1])
                    else:
                        if n[6] == "增加":
                            ndict[n[5]] += trans2num(n[7])
                        elif n[6] == "减少":
                            ndict[n[5]] -= trans2num(n[7])

                else:  # “否则”后的处理
                    if n[8] == "看看":
                        print(n[9][1:-1])
                    elif n[8] == "无":
                        pass
                    elif n[9] == "无":
                        pass
                    elif n[9] == "增加":
                        ndict[n[8]] += trans2num(n[10])
                    elif n[9] == "减少":
                        ndict[n[8]] -= trans2num(n[10])

                    elif n[9] == "看看":
                        print(n[10][1:-1])
                    elif n[10] == "增加":
                        ndict[n[9]] += trans2num(n[11])
                    elif n[10] == "减少":
                        ndict[n[9]] -= trans2num(n[11])

            if n[2] == "等于":  # 判断是否等于
                if ndict[n[1]] == trans2num(n[3]):  # “则”后的处理
                    if n[5] == "看看":
                        print(n[6][1:-1])
                    else:
                        if n[6] == "增加":
                            ndict[n[5]] += trans2num(n[7])
                        elif n[6] == "减少":
                            ndict[n[5]] -= trans2num(n[7])

                        else:  # “否则”后的处理
                            if n[8] == "看看":
                                print(n[9][1:-1])
                            elif n[8] == "无":
                                pass
                            elif n[9] == "无":
                                pass
                            elif n[9] == "增加":
                                ndict[n[8]] += trans2num(n[10])
                            elif n[9] == "减少":
                                ndict[n[8]] -= trans2num(n[10])

                            elif n[9] == "看看":
                                print(n[10][1:-1])
                            elif n[10] == "增加":
                                ndict[n[9]] += trans2num(n[11])
                            elif n[10] == "减少":
                                ndict[n[9]] -= trans2num(n[11])
        else:
            print("请按指定格式输入!")
except IndexError:
    print("请按要求进行输入")
except SystemExit:
    print("运行结束!")

参考资料:

Python元组 Python函数

posted @ 2020-02-09 19:47  E1ma  阅读(130)  评论(0编辑  收藏