零基礎學python-3.6 根據模組結構 改進我們的遊戲

來源:互聯網
上載者:User

標籤:python

回顧一下我們的遊戲:

#建立遊戲的核心玩法類class core(object):    version=1.0    def guessNum(self):        try:            secret=random.randint(1,100)#產生隨機數            #print (secret)            time=6#猜數位次數            guess=0#輸入的數字            minNum=0#最小隨機數            maxNum=100#最大隨機數            print("---------歡迎來到猜數位地方,請開始---------")            print("提示:輸入-1可以隨時離開遊戲")            while guess!=secret and time>=0:#條件                guess=int(input("*數字區間0-100,請輸入你猜的數字:"))                print("你輸入數字是:",guess)                if guess==secret:                    return (7-time)#為什麼是7,因為我們上面的條件是0-6,所以是7次                    print("猜對了,真厲害")                elif guess==-1:                    print("提示:你強行退出,這一次不記錄成績")                    return 'exit'                else:                    #當不等於的時候,還需要列印出相應的區間,讓使用者更容易使用                    if guess<secret:                        if minNum<guess:                            minNum=guess                        print("提示:你的猜數小於正確答案")                                    print("提示:正確的數字區間是:",minNum,"-",maxNum)                    else:                        if maxNum>guess:                            maxNum=guess                        print("提示:你的猜數大於正確答案")                        print("提示:正確的數字區間是:",minNum,"-",maxNum)                    print("太遺憾,你猜錯了,你還有",time,"次機會")                guess=0                time-=1        except TypeError as e:            print("你輸入有誤,成績作廢")            return 'exit'        except ValueError as e:            print("你輸入有誤,成績作廢")            return 'exit'            class User(object):    userName=""#使用者名稱    resultDict={}#結果清單    playTime=1#玩的次數    def setUserName(self,name='ray'):        self.userName=name    def setResultDict(self,guessTime):        self.resultDict[self.playTime]=guessTime        self.playTime+=1    #下面是運行代碼,類似於java的main函數import randomimport datetimeexitAllTag=0#記錄是否全部離開遊戲,1:退出exitGameTag=0#記錄是否退出個人遊戲部分,1:退出userDict={}#記錄使用者組資料result=''#猜數字遊戲返回的結果#處理邏輯:#1.先輸入名稱,如果不是退出,可以直接進入遊戲#2.進行遊戲的過程中,可以一直玩,也可以強退,強退沒成績#3.當用戶進行完遊戲,記錄用戶的成績#4.噹所有的用戶都退出後,列印所有的成績while exitAllTag!=1:       userName=input("請輸入你的名字:")    #設定使用者的名字    user=User()    user.setUserName(userName)    exitGameTag=0    if userName=='exit':            exitAllTag=1            break;    else:        #進行遊戲        while exitGameTag!=1:                        result=core().guessNum()#這裡存在效能問題,最好使用單例模式            if result=='exit':                exitGameTag=1                #當使用者退出時,把成績記錄下來                userDict[userName]=user.resultDict;                break            else:                #設定使用者的結果                user.setResultDict(result)                for e in user.resultDict:                    print(e,user.resultDict[e])print("遊戲結束")#輸出所有人的成績for name in userDict:    print("使用者的名字:"+name)    for e in userDict[name]:        print(e,userDict[name][e])try:    handler=open("results.txt",'w')    for name in userDict:        now = now.strftime("%Y-%m-%d %H:%M:%S")        handler.write("記錄的時間:"+now)        handler.write("使用者的名字:"+name)        for e in userDict[name]:            handler.write(e)            handler.write(userDict[name][e])    handler.close()except IOError as e:    print(e)

改進的地方:

1. 把列印成績封裝成函數

2.把持久化成績封裝成函數

3.在類與函數的地方加上文檔字串,使得更加清晰

 

'GuessNum.py--猜數字遊戲'import randomimport time#建立遊戲的核心玩法類class core(object):    'core -- 核心類'    version=1.0    def guessNum(self):        'guessNum -- 猜數字核心方法'        try:            secret=random.randint(1,100)#產生隨機數            #print (secret)            time=6#猜數位次數            guess=0#輸入的數字            minNum=0#最小隨機數            maxNum=100#最大隨機數            print("---------歡迎來到猜數位地方,請開始---------")            print("提示:輸入-1可以隨時離開遊戲")            while guess!=secret and time>=0:#條件                guess=int(input("*數字區間0-100,請輸入你猜的數字:"))                print("你輸入數字是:",guess)                if guess==secret:                    return (7-time)#為什麼是7,因為我們上面的條件是0-6,所以是7次                    print("猜對了,真厲害")                elif guess==-1:                    print("提示:你強行退出,這一次不記錄成績")                    return 'exit'                else:                    #當不等於的時候,還需要列印出相應的區間,讓使用者更容易使用                    if guess<secret:                        if minNum<guess:                            minNum=guess                        print("提示:你的猜數小於正確答案")                                    print("提示:正確的數字區間是:",minNum,"-",maxNum)                    else:                        if maxNum>guess:                            maxNum=guess                        print("提示:你的猜數大於正確答案")                        print("提示:正確的數字區間是:",minNum,"-",maxNum)                    print("太遺憾,你猜錯了,你還有",time,"次機會")                guess=0                time-=1        except TypeError as e:            print(e)            print("你輸入有誤,成績作廢")            return 'exit'        except ValueError as e:            print(e)            print("你輸入有誤,成績作廢")            return 'exit'            class User(object):    'User -- 記錄使用者資料'    userName=""#使用者名稱    resultDict={}#結果清單    playTime=1#玩的次數    def setUserName(self,name='ray'):        self.userName=name    def setResultDict(self,guessTime):        self.resultDict[self.playTime]=guessTime        self.playTime+=1    def printResults(userDict):    'printResults --輸出所有人的成績'    for name in userDict:        print("使用者的名字:"+name)        for e in userDict[name]:            print(e,userDict[name][e])def persistResults(fileName,userDict):    '持久化成績'    try:        handler=open(fileName,'w')        for name in userDict:            now = time.strftime("%Y-%m-%d %H:%M:%S")            handler.write("記錄的時間:"+now)            handler.write("使用者的名字:"+name)            for e in userDict[name]:                handler.write(e)                handler.write(userDict[name][e])        handler.close()    except IOError as e:        print(e)if __name__=='__main__':        '下面是主程式'    exitAllTag=0#記錄是否全部離開遊戲,1:退出    exitGameTag=0#記錄是否退出個人遊戲部分,1:退出    userDict={}#記錄使用者組資料    result=''#猜數字遊戲返回的結果    #處理邏輯:    #1.先輸入名稱,如果不是退出,可以直接進入遊戲    #2.進行遊戲的過程中,可以一直玩,也可以強退,強退沒成績    #3.當用戶進行完遊戲,記錄用戶的成績    #4.噹所有的用戶都退出後,列印所有的成績    while exitAllTag!=1:           userName=input("請輸入你的名字:")        #設定使用者的名字        user=User()        user.setUserName(userName)        exitGameTag=0        if userName=='exit':                exitAllTag=1                break;        else:            #進行遊戲            while exitGameTag!=1:                            result=core().guessNum()#這裡存在效能問題,最好使用單例模式                if result=='exit':                    exitGameTag=1                    #當使用者退出時,把成績記錄下來                    userDict[userName]=user.resultDict;                    break                else:                    #設定使用者的結果                    user.setResultDict(result)                    for e in user.resultDict:                        print(e,user.resultDict[e])    print("遊戲結束")    #輸出所有人的成績    printResults(userDict);    #持久化成績    persistResults("results.txt",userDict);


 




著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

零基礎學python-3.6 根據模組結構 改進我們的遊戲

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.