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

    第一次个人编程作业

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

  • 相关阅读:
    BZOJ1588_营业额统计_KEY
    关于欧几里得算法的认识
    javacv实战篇
    图像处理里面的的尺度什么?
    改成 否“依然报LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏”问题的解决
    javacv
    以前写过的一些oracle语句
    warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
    在vs环境中跑动sift特征提取(原理部分)
    《sift算法详解》阅读笔记
  • 原文地址:https://www.cnblogs.com/elma/p/12288650.html
Copyright © 2011-2022 走看看