第一次编程作业

这个作业属于哪个课程 软件工程(福州大学至诚学院计算机工程系)
这个作业要求在哪里 第一次编程作业要求
这个作业的目标 用汉字写编程语言
作业正文 正文如下
其他参考文献 没有
GITHUB仓库 https://github.com/zZYLinda/zhuyunlin

作业要求

发布一篇随笔,使用markdown语法进行编辑。
在随笔前附上github仓库地址

编程题目

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

编程要求

请编写一个程序,制作一个简易的中文语言编译器,即使用中文语法进行编程,输入为逐行输入,每行为一个语句,一个语句代变一个操作,满足以下语法要求(括号内代变格式类型,具体参考样例):
变量定义:整数 (变量名) 等于 (数字)
运算(加法):(变量名) 增加 (数字)
运算(减法):(变量名) 减少 (数字)
输出:看看 (变量名) or 看看 “(字符串内容)”
附加要求:
选择:如果 (判断语句) 则 (操作语句) 否则 (操作语句)
若否则后没有任何操作使用(无)来进行填充(参考样例2)。

注意事项

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

编码

内容
代码行数 442
需求分析时间 大概3-4小时
编码时间 我是用很多零零散散时间才全部完成的,估计编码时间就两个半小时

代码部分

#这道题目用汉字来做加减法,刚开始有思路的就是如何把汉字转化为数字,我把他们分为几部分,第一类是0-9和100,
#这几个比较特殊,我打算采用一个函数来完成,通过某种判断条件运行这个函数
def a(a):#不含十的汉字转数字
    if (a == '零'):
        return 0
    if (a == '一'):
        return 1
    if (a == '二'):
        return 2
    if (a == '三'):
        return 3
    if (a == '四'):
        return 4
    if (a == '五'):
        return 5
    if (a == '六'):
        return 6
    if (a == '七'):
        return 7
    if (a == '八'):
        return 8
    if (a == '九'):
        return 9
    if (a == '一百'):
        return 100
#第二类,就是都含有“十”这个字,所以我想到了用分离
#我只需要提取出来十,以十为界限
def b(b):#含十的汉字转文字
    if (len(b)!=3):
         if (b == '十'):
            return 10
         if (b == '二十'):
            return 20
         if (b == '三十'):
            return 30
         if (b == '四十'):
            return 40
         if (b == '五十'):
            return 50
         if (b == '六十'):
            return 60
         if (b == '七十'):
            return 70
         if (b == '八十'):
            return 80
         if (b == '九十'):
            return 90
    else:
        a=b.split('十')
        if (a[0] == '一'):
            c=10
        if (a[0] == '二'):
            c=20
        if (a[0] == '三'):
            c=30
        if (a[0] == '四'):
            c=40
        if (a[0] == '五'):
            c=50
        if (a[0] == '六'):
            c=60
        if (a[0] == '七'):
            c=70
        if (a[0] == '八'):
            c=80
        if (a[0] == '九'):
            c=90
        if (a[1] == '一'):
            d=1
        if (a[1] == '二'):
            d=2
        if (a[1] == '三'):
            d=3
        if (a[1] == '四'):
            d=4
        if (a[1] == '五'):
            d=5
        if (a[1] == '六'):
            d=6
        if (a[1] == '七'):
            d=7
        if (a[1] == '八'):
            d=8
        if (a[1] == '九'):
            d=9
        return c+d
#除了汉字转数字,查看时,也要用数字来转成汉字
def c(a):#十以内数字转汉字
    if (a == 0):
        return '零'
    if (a == 1):
        return '一'
    if (a == 2):
        return '二'
    if (a == 3):
        return '三'
    if (a == 4):
        return '四'
    if (a == 5):
        return '五'
    if (a == 6):
        return '六'
    if (a == 7):
        return '七'
    if (a == 8):
        return '八'
    if (a == 9):
        return '九'
def d(a):#十到一百的数字转汉字
    if a%10==0:
        if (a/10 == 1):
            return '十'
        if (a/10 == 2):
            return '二十'
        if (a/10 == 3):
            return '三十'
        if (a/10 == 4):
            return '四十'
        if (a/10 == 5):
            return '五十'
        if (a/10 == 6):
            return '六十'
        if (a/10 == 7):
            return '七十'
        if (a/10 == 8):
            return '八十'
        if (a/10 == 9):
            return '九十'
        if (a/10 == 10):
            return '一百'
    else:
        b=a//10
        c=a%10
        if (b == 1):
            e='十'
        if (b == 2):
            e = '二十'
        if (b == 3):
            e = '三十'
        if (b == 4):
            e = '四十'
        if (b == 5):
            e = '五十'
        if (b == 6):
            e = '六十'
        if (b == 7):
            e = '七十'
        if (b == 8):
            e = '八十'
        if (b == 9):
            e = '九十'
        if (c == 1):
            f = '一'
        if (c == 2):
            f = '二'
        if (c == 3):
            f = '三'
        if (c == 4):
            f = '四'
        if (c == 5):
            f = '五'
        if (c == 6):
            f = '六'
        if (c == 7):
            f = '七'
        if (c == 8):
            f = '八'
        if (c == 9):
            f = '九'
        g=e+f
        return g
#之后想了很久才开始写主题函数,中间请教了田硕同学,写一个输入函数,由于案例二有两个需要同时使用,所以要写一个数组,用来存放不同的计算过程

h=''#还要有一个字符串来存放变量名

#我用一个无限while循环来输入,当输入结束的时候停止循环
import numpy as np
def star():
    a =np.zeros(100)#数组,用于存储不同计算过程
    while (1):
        str = input("请输入:");#循环输入指令,当输入的 结束 的时候结束循环
        if (str=='结束'):
            break;
        else:
            e(str,a)#此处跳转一个判断函数,用来执行输入语句
star()
#输入一句话,就要去执行,我在开始函数中跳转了一个判断函数
def e(str,a):#对最开始语句的判断来执行相应的函数
    s=str.split(" ")
    if (len(s)<=2):
        if (s[0]=='看看'):
            kk(str,a)
        else:
            print("命令不成立!")
    else:
        if (s[2]=='等于'):
            dy(str,a) 
        elif (s[1]=='增加'):
            zj(s,a)
        elif (s[1]=='减少'):
            js(s,a)
        elif (s[0]=='如果'):
            rg(str,a)
        else:
            print("命令不成立!")
#这个函数是写 看看 钱包这种语句的,是查询作用
def kk(str,a):
    s=str.split(" ")
    global h
    if (h.find(s[1])==-1):#没有创建变量
        print("没有创建相应的变量")
    else:#创建过变量
        kankan(str,a)
def kankan(str,a):#看看 (变量名)的输出判断
    s=str.split(' ')
    if (a[h.find(s[1])]>10):#若大于10则进行一种转换函数
        print(d(a[h.find(s[1])]))
    else:
        print(c(a[h.find(s[1])]))
#整数 气温 等于 十
def dy(str,a):#为不同变量寻找相应位置
    s=str.split(" ")
    global h
    if (h.find(s[1])==-1):#没有创建变量
        h=h+s[1]
        chushi(str,a)
    else:#创建过变量
        chushi(str,a)
def chushi(str,a):#初始化
    s=str.split(' ')
    if (len(s[3].split('十'))==1):#判定初始时是否含有'十'
        a[h.find(s[1])]=a(s[3])
    if(len(s[3].split('十'))==2):
        a[h.find(s[1])]=b(s[3])
def zj(s,a):
    global h
    if (h.find(s[0])==-1):#没有创建变量
        print("没有创建相应的变量")
    else:#创建过变量
        jiajian(s,a)
def jiajian(s,a):#调用
    a[h.find(s[0])]=yss(s,a)
    
def yss(s,a):#运算  百以内的加减
    if (s[1] == '增加'):
        if (len(s[2].split('十'))==1):#判断
            return a[h.find(s[0])]+a(s[2])
        if(len(s[2].split('十'))==2):
            return a[h.find(s[0])]+b(s[2])
    if (s[1] == '减少'):
        if (len(s[2].split('十'))==1):#判断
            return a[h.find(s[0])]-a(s[2])
        if(len(s[2].split('十'))==2):
            return a[h.find(s[0])]-b(s[2])
def rg(str,a):
    s=str.split(" ")
    global h
    if (h.find(s[1])==-1):#没有创建变量
        print("没有创建相应的变量")
    else:#创建过变量
        rgg(str,a)
def rgg(str,a):#自定义判断语句
    s=str.split(" ")
    if (s[2]=='大于'):
        if (len(s[3].split('十'))==1):#判定初始时是否含有'十'
            if(a[h.find(s[1])]>=a(s[3])):
                if (s[5]=='看看'):
                    q=s[6].replace('”','')
                    q=q.replace('“','')
                    print(q)
                else:
                    zj(s[5:8],a)
            else:
                if (s[5]=='看看'):
                    q=s[9].replace('”','')
                    q=q.replace('“','')
                    print(q)
                else:
                    ptirnt("无")
        if(len(s[3].split('十'))==2):
            if(a[h.find(s[1])]>=b(s[3])):
                if (s[5]=='看看'):
                    q=s[6].replace('”','')
                    q=q.replace('“','')
                    print(q)
                else:
                    zj(s[5:8],a)
            else:
                if (s[5]=='看看'):
                    q=s[9].replace('”','')
                    q=q.replace('“','')
                    print(q)
                else:
                    ptirnt("无")
    if (s[2]=='小于'):
        if (len(s[3].split('十'))==1):#判定初始时是否含有'十'
            if(a[h.find(s[1])]<a(s[3])):
                if (s[5]=='看看'):
                    q=s[9].replace('”','')
                    q=q.replace('“','')
                    print(q)
                else:
                    zj(s[5:8],a)
            else:
                if (s[5]=='看看'):
                    q=s[6].replace('”','')
                    q=q.replace('“','')
                    print(q)
                else:
                    ptirnt("无")
        if(len(s[3].split('十'))==2):
            if(a[h.find(s[1])]<b(s[3])):
                if (s[5]=='看看'):
                    q=s[9].replace('”','')
                    q=q.replace('“','')
                    print(q)
                else:
                    zj(s[5:8],a)
            else:
                if (s[5]=='看看'):
                    q=s[6].replace('”','')
                    q=q.replace('“','')
                    print(q)
                else:
                    ptirnt("无")

个人体会

最后的看看函数,等于函数,增加函数,减少函数都有参考田硕同学的代码,其他函数部分为自己想的,经过这次之后深刻体会到自己编码能力的不足

原文地址:https://www.cnblogs.com/zhuyunlin/p/12289055.html