標籤: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 根據模組結構 改進我們的遊戲