第一次編程作業


這個作業屬於哪個課程 軟件工程(福州大學至誠學院計算機工程系)
這個作業要求在哪里 第一次編程作業要求
這個作業的目標 用漢字寫編程語言
作業正文 正文如下
其他參考文獻 沒有
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("無")

個人體會

最后的看看函數,等於函數,增加函數,減少函數都有參考田碩同學的代碼,其他函數部分為自己想的,經過這次之后深刻體會到自己編碼能力的不足


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM