• 第一次编程作业


    这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/SE
    这个作业要求在哪里 https://edu.cnblogs.com/campus/fzzcxy/SE/homework/10283
    这个作业的目标 制作一个简易的中文语言编译器
    作业正文 https://github.com/sunzx2211/mygit/blob/master/first
    其他参考文献 https://jingyan.baidu.com/article/c843ea0ba1110d77921e4a7e.html
    • 代码行数:120
    • 分析时间:>2h
    • 编码时间:>6h

    编程题目

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

    编程要求

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

    • 变量定义:整数 (变量名) 等于 (数字)

    • 运算(加法):(变量名) 增加 (数字)

    • 运算(减法):(变量名) 减少 (数字)

    • 输出:看看 (变量名) or 看看 “(字符串内容)”

    附加要求:

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

    注意事项

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

    现有思路

    刚看到题目开始感觉无从下手,参考大一时c语言让我们自己做一个简易的计算器时的思路,单单把汉字转数字和数字转汉字应该不难。认为输入输出的地方会比较棘手,C语言和java的知识都搁置太久了,选择用比较熟悉的python来试着写。

    部分代码(独立功能)

    将汉字数字转换为阿拉伯数字
    def HantoNum(y):
        if y=='零':
            return 0
        elif y=='一':
            return 1
        elif y=='二':
            return 2
        elif y=='三':
            return 3
        elif y=='四':
            return 4
        elif y=='五':
            return 5
        elif y=='六':
            return 6
        elif y=='七':
            return 7
        elif y=='八':
            return 8
        elif y=='九':
            return 9
        elif y=='十':
            return 10
        else:
            return "error"
    
    将阿拉伯数字转换为汉字数字
    
    def NumtoHan(z):
        if z==1:
             return '一'
        elif z==2:
            return '二'
        elif z==3:
            return '三'
        elif z==4:
            return '四'
        elif z==5:
            return '五'
        elif z==6:
            return '六'
        elif z==7:
            return '七'
        elif z==8:
            return '八'
        elif z==9:
            return '九'
        elif z==10:
            return '十'
        else:
            return 'error'
    

    然后问题就来了,思考初始定义,循坏,输出类型什么的,感觉判断条件对我来讲会很困难。
    想到用列表s[]来存储 变量定义这个过程中的 s[0]整数 s[1]变量名 s[2]等于 s[3]数字 这四个变量

    输入部分的代码
    str = input()
    s = str.split()
    

    这是考虑到s接收第一句的内容,“气温 减少 三/气温 增加 二”是否要用新的列表来接收时就会陷入混乱。
    “看看 气温”这一句可以写成

    if s[0] == '看看':
            NumtoHan()
            print(s[3])
    

    如果用一个新的列表d去接收最后一句'如果 气温 大于 八 则 看看 “你好,世界” 否则 看看 “冻死我了”'
    在d中单个词语的顺序为 0如果 1气温 2大于 3八 4则 5看看 6“你好,世界” 7否则 8看看 9“冻死我了”

    
    if d[0]=="如果":
        if d[2] == "大于":
            if s[3]>d[3]:
                print("“你好,世界”")
            else:
                print("冻死我了")
    

    目前数据只支持0-9,而且“气温 增加或减少”句型的句子只有一个列表接受,不能在一次测试中多次加减。

    def HantoNum():
        if  s[3]=='零':
                return 0
        elif s[3] == '一':
                return 1
        elif s[3] == '二':
                return 2
        elif s[3]== '三':
                return 3
        elif s[3] == '四':
                return 4
        elif s[3]== '五':
                 return 5
        elif  s[3]== '六':
                return 6
        elif s[3] == '七':
                return 7
        elif s[3] == '八':
                return 8
        elif s[3]== '九':
                 return 9
        elif s[3]== '十':
            return 10
        elif b[2]=='零':
            return 0
        elif b[2] == '一':
            return 1
        elif b[2] == '二':
            return 2
        elif b[2] == '三':
            return 3
        elif b[2]== '四':
            return 4
        elif b[2] == '五':
            return 5
        elif b[2]== '六':
            return 6
        elif b[2] == '七':
            return 7
        elif b[2] == '八':
            return 8
        elif b[2] == '九':
            return 9
        elif b[2] == '十':
            return 10
        elif wendu[3]=='零':
            return 0
        elif wendu[3] == '一':
            return 1
        elif wendu[3] == '二':
            return 2
        elif wendu[3] == '三':
            return 3
        elif wendu[3]== '四':
            return 4
        elif wendu[3] == '五':
            return 5
        elif wendu[3]== '六':
            return 6
        elif wendu[3] == '七':
            return 7
        elif wendu[3] == '八':
            return 8
        elif wendu[3] == '九':
            return 9
        elif wendu[3] == '十':
            return 10
    
    
    def NumtoHan():
        if wendu[2] == 0:
            return '零'
        elif wendu[2] == 1:
            return '一'
        elif wendu[2] == 2:
            return '二'
        elif wendu[2]== 3:
            return '三'
        elif wendu[2] == 4:
            return '四'
        elif wendu[2] == 5:
            return '五'
        elif wendu[2] == 6:
            return '六'
        elif wendu[2] == 7:
            return '七'
        elif wendu[2] == 8:
            return '八'
        elif wendu[2] == 9:
            return '九'
        elif wendu[2] == 10:
            return '十'
        else:
            return "error"
    
    s = input()
    s = s.split()
    wendu = ['','','','']
    wendu2 = ['','']
    
    if s[0] == "整数":
        s[3] = HantoNum()
        wendu[0] = s[3]
    
    b = input()
    b = b.split()
    
    if b[0] == "气温":
        b[2] = HantoNum()
        wendu[1] = b[2]
        if b[1] == "减少":
            wendu[2] = wendu[0] - wendu[1]
        else: wendu[2] = wendu[0] + wendu[1]
    
    c = input()
    c = c.split()
    wendu2[0] = wendu[2] #暂时存放最终气温
    
    if c[0] == "看看":
        wendu[2] = NumtoHan()
        print(wendu[2])
    
    d = input()
    d = d.split()
    wendu[3] = d[3]
    wendu[3] = HantoNum()
    
    if d[0] == "如果" and d[2] == "大于" and wendu2[0] > wendu[3]:
        print(d[6])
    else: print(d[-1])
    

  • 相关阅读:
    二叉树的存储结构
    面试Java需要的知识总结
    EJB总结
    WEB 容器、WEB服务和应用服务器的区别与联系
    Linux安装JBOSS
    JBOSS和WebLogic区别
    深入浅出JMS(一)--JMS基本概念
    Java缓冲流细节
    xor和路径(codevs 2412)
    外星千足虫(bzoj 1923)
  • 原文地址:https://www.cnblogs.com/szx2211/p/12288627.html
Copyright © 2020-2023  润新知