python基礎練習之幾個簡單的游戲
文檔介紹
利用python寫“猜數(shù)字”,“猜詞語”,“誰是臥底”這三個游戲,從而快速掌握python編程的入門知識,包括python語法/列表/元組/字典/流程控制/庫函數(shù)等等。
環(huán)境參數(shù)
linux平臺,python3.4。需要在linux中把python3.4編譯一下,這樣編寫python程序時保存為.py格式的文件并添加執(zhí)行權限再終端運行即可(原理跟shell腳本相同),非常方便。
ps:貼出來的python程序代碼在windows中也兼容,只不過運行方式不是命令行,而是要通過python軟件。python軟件可以上官網(wǎng)下載安裝點擊打開鏈接,在學習的時候,可以直接在python軟件上面輸入python語句即可打印結(jié)果,也就是說python無需編譯即可運行,很多人也稱之為“腳本”語言。
設計實現(xiàn)
猜數(shù)字
很多人在聚餐時都玩過猜數(shù)字游戲,由某人隨機出一個指定范圍內(nèi)的數(shù),然后其他人一個一個猜,猜的過程中區(qū)間不斷縮小,直到猜中為止。
這里的猜數(shù)字游戲就是用程序來代替那個出數(shù)字的人,程序算法設計為:
1.輸入數(shù)字區(qū)間--->2.系統(tǒng)產(chǎn)生區(qū)間內(nèi)的隨機數(shù)--->3.玩家輸入自己猜的數(shù)字--->4.比較玩家猜的與答案的高低并提示--->5.未猜中則回到3,猜中則提示猜次數(shù)
代碼很少,如下所示:
#!/usr/local/bin/python3 import random bot=int(input('Set range bottom\n')) top=int(input('Set range top\n')) rand=random.randint(bot,top) print ('Random number in ['+str(bot)+','+str(top)+'] generated!') num=int(input('###Guess the number###\n')) cnt=1 while (num!=rand): if (num<rand): print('*_* Lower than the answer') else: print('T_T Higher than the answer') num=int(input('###Guess the number###\n')) cnt=cnt+1 print('^_^ You get the answer with [%d] times'%cnt)
第一行是要讓linux系統(tǒng)知道這是python3程序,random是產(chǎn)生隨機數(shù)的庫函數(shù),要注意的是python對格式要求很嚴格,因為它不用通過{}而是通過縮進量判斷流程。
通過這個可以掌握基本的語法和編寫規(guī)則了,下面再試試有點難度的,用到詞組和循環(huán)控制等知識。
猜詞語
電視節(jié)目中的”你來比劃我來猜“大家應該都看過,而且很多人也玩過,規(guī)則就是一個人看詞語比劃相應動作和說一些提示,另一個人看不到詞語要通過比劃的動作猜出來,猜的過程中主持人判斷是否符合規(guī)則。
某一組玩家猜詞語的算法設計為:
1.開始計時--->2.猜詞語--->3.答對則正確數(shù)加1并回到2,要跳過或犯規(guī)了則直接回到2,超時了直接跳到3--->3.循環(huán)10次后或時間結(jié)束后統(tǒng)計答對的題數(shù)
有num組玩家就進行以上流程的num次循環(huán),當然也要準備x組詞語,因為每組玩家猜的詞語是不同的。
代碼量不大,如下所示:
#!/usr/local/bin/python3 import time num = int(input('有多少組玩家\n')) guessWord = [] correct = [] #定義列表,num+10是不想讓guessWord下標不合法 for i in range(0,num+10): guessWord.append(0) correct.append(0) wordNum=10 guessWord[0] = ['打情罵俏','海綿寶寶','嬌媚','金雞獨立','狼吞虎咽','睡眼朦朧','鶴立雞群','手舞足蹈','卓別林','穿越火線'] guessWord[1] = ['眉飛色舞','英雄聯(lián)盟','扭秧歌','偷看美女','大搖大擺','回眸一笑','市場營銷','大眼瞪小眼','自戀','處女座'] guessWord[2] = ['狗急跳墻','捧腹大笑','目不轉(zhuǎn)睛','愁眉苦臉','左顧右盼','宮保雞丁','升國旗','暗戀','臭襪子','趁火打劫'] flag='n' for i in range(0,num): start = time.time() for k in range(0,wordNum): #顯示詞語 print (('%d.%s')%(k+1,guessWord[i][k])) flag = input('請答題,答對請輸入y,跳過請輸入任意鍵') end = time.time() sec = end-start #統(tǒng)計用時 if (110<=sec<=120): print ('還有10秒鐘') if (sec>=120): print ('時間到!游戲結(jié)束') break if (flag=='y'): correct[i]=correct[i]+1 continue else: continue str_temp=('第%d組答對數(shù)目:%d') % (i+1,correct[i]) print (str_temp)
其實詞語可以做成從獨立的文件中讀入的方式,這樣方便更新和管理,下面就介紹一種用“字典”的方式來獲得“誰是臥底”的臥底詞。
誰是臥底
誰是臥底也是深受很多人喜歡的游戲,起碼要三人以上才能玩,大致分為幾個階段:1.分配平民詞語和臥底詞語--->2.玩家依次發(fā)言--->3.根據(jù)發(fā)言投票認為誰是臥底--->4.得到票數(shù)最多的玩家出局--->5.出局玩家剛好是臥底則平民勝利,如果出局玩家是平民則被冤死并繼續(xù)第2步,當剩下的平民只有1個時臥底勝利。
特殊情況是,出現(xiàn)兩名或以上的玩家票數(shù)相同,則相同票數(shù)的玩家重新發(fā)言,然后全體針對這幾個玩家投票。
程序設計思想:輸入玩家數(shù)num,玩家編號為0~num-1,然后定義三個含有num個元素的列表:詞語列表,計算玩家票數(shù)的列表,死亡玩家的列表。列表下標從0~num-1,隨機產(chǎn)生該區(qū)間的數(shù)x,代表x號玩家是臥底,然后分配臥底詞和平民詞。注意,提示幾號玩家是臥底或冤死的時候,要將打印信息時候的下標加1,比如下標數(shù)0代表的其實是1號玩家。在生活中,沒多少人會習慣說自己是“第0個人”這種說法吧,除了程序員--;
在每輪游戲中,依次進行發(fā)言,投票,票數(shù)最多的玩家出局(出現(xiàn)相同票數(shù)則重新發(fā)言),出局玩家歸入死亡玩家列表。然后開始下一輪。
那么,如果有num位玩家,則最多有多少輪游戲結(jié)束?因為進行到只有2位玩家游戲就結(jié)束了,所以答案是num-2輪!也就是說上述流程要循環(huán)num-2次。
編程思想定了就可以敲代碼了,程序代碼如下:
#!/usr/local/bin/python3 import random from spyword import spyword num=int(input('請輸入玩家數(shù)(至少為3)\n')) #臥底玩家 spy=random.randint(0,num-1) #隨機產(chǎn)生詞語 定義詞語列表 計算玩家票數(shù)的列表 統(tǒng)計死亡玩家的列表 list_rand=spyword.popitem() word=[] cnt=[] dead=[] #給三個列表賦值 for i in range(0,num): word.append('a') cnt.append(0) dead.append(num+2) #給玩家詞語 其中print是調(diào)試用的,sanmeVote是出現(xiàn)相同票數(shù)的標志,spyWin是臥底勝利的判決條件 for i in range(0,num): if (i==spy): word[i]=str(list_rand[1]) else: word[i]=str(list_rand[0]) print (word[i]) sameVote=0 spyWin=0 #游戲開始 for x in range(0,num-1): for k in range(0,num): if ((k not in dead) & (sameVote==0)): print ('%d號玩家發(fā)言時間'%(k+1)) print ('發(fā)言環(huán)節(jié)結(jié)束') #將各位玩家的票數(shù)置0 for j in range(0,num): if (j not in dead): cnt[j]=0 for j in range(0,num): if (j not in dead): vote2p=int(input('請%d號玩家投票'%(j+1)))-1 cnt[vote2p]=cnt[vote2p]+1 sameVote=0 for y in range(0,num): if((cnt[y]==max(cnt)) & (y!=cnt.index(max(cnt)))): print ('不止一位玩家得到最高票數(shù),請這些玩家重新發(fā)言') sameVote=1 if (sameVote==0): dead[x]=cnt.index(max(cnt)) if (dead[x]==spy): print ('臥底得到最多票數(shù),游戲結(jié)束') spyWin=1 break print ('%d號玩家被冤死!'%(dead[x]+1)) #游戲結(jié)束 if(spyWin==0): print ('只剩兩名玩家,臥底勝利!')
有一行代碼是
from spyword import spyword
這里spyword是我自己定義的臥底詞字典,運行時把這個文件放在python的工作目錄下,就可以讓python程序調(diào)用該字典了。要查看python工作目錄,你需要運行python后輸入
>>>importos
>>>os.getcwd()
當然你也可以更改python工作目錄。
python是一門簡潔高效,通俗易懂的高階動態(tài)編程語言;很多人也稱之為“膠水語言”,在接到大項目時往往用python寫好主體框架,然后在一些特定模塊再用java/js/C++之類的語言實現(xiàn)特定需求。掌握python并不難,通過這篇博客講到的三個小游戲,希望您能發(fā)現(xiàn)python的樂趣,快速找到python編程的竅門。
總結(jié)
以上就是本文關于python基礎練習之幾個簡單的游戲的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:Python3中的列表,元組,字典,字符串相關知識小結(jié)、Python爬蟲實例爬取網(wǎng)站搞笑段子、python實現(xiàn)人臉識別代碼等,有什么問題可以隨時留言,小編會及時回復大家的。感謝朋友們對本站的支持!
相關文章
如何使用 Python 中的功能和庫創(chuàng)建 n-gram
在計算語言學中,n-gram 對于語言處理、上下文和語義分析非常重要,它們是從令牌字符串中相鄰的連續(xù)單詞序列,本文將討論如何使用 Python 中的功能和庫創(chuàng)建 n-gram,感興趣的朋友一起看看吧2023-09-09淺談Pycharm調(diào)用同級目錄下的py腳本bug
今天小編就為大家分享一篇淺談Pycharm調(diào)用同級目錄下的py腳本bug,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12Python大批量寫入數(shù)據(jù)(百萬級別)的方法
這篇文章主要給大家介紹了關于Python大批量寫入數(shù)據(jù)(百萬級別)的相關資料,在日常處理數(shù)據(jù)的過程中,我們都有批量寫入數(shù)據(jù)的需求,文中給出了詳細的示例代碼,需要的朋友可以參考下2023-07-07Python Django 簡單分頁的實現(xiàn)代碼解析
這篇文章主要介紹了Python Django 簡單分頁的實現(xiàn)代碼解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-08-08python目標檢測YoloV4當中的Mosaic數(shù)據(jù)增強方法
這篇文章主要為大家介紹了python目標檢測YoloV4當中的Mosaic數(shù)據(jù)增強方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-05-05Python中連通域分割Two-Pass算法的原理與實現(xiàn)詳解
兩遍掃描法(?Two-Pass?),正如其名,指的就是通過掃描兩遍圖像,將圖像中存在的所有連通域找出并標記,本文將詳細介紹Two-Pass算法的原理與實現(xiàn),需要的可以參考下2023-12-12python神經(jīng)網(wǎng)絡Keras實現(xiàn)GRU及其參數(shù)量
這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡Keras實現(xiàn)GRU及其參數(shù)量,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-05-05