<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          用Python寫了個(gè)帶界面的“成語(yǔ)接龍”小軟件

          共 2524字,需瀏覽 6分鐘

           ·

          2021-04-19 15:52




          大家好,歡迎來(lái)到 Crossin的編程教室 !


          今天分享的這篇文章,將帶大家做個(gè)樸素簡(jiǎn)單的小玩意:成語(yǔ)接龍小軟件。

          廢話不多說(shuō),讓我們愉快地開始吧~


          環(huán)境搭建


          安裝Python并添加到環(huán)境變量,pip安裝需要的相關(guān)模塊即可。

          pip install pyqt5


          簡(jiǎn)


          大家應(yīng)該都了解成語(yǔ)接龍這個(gè)小游戲的游戲規(guī)則吧:



          首先,我去網(wǎng)上找了下別人整理好的現(xiàn)成的成語(yǔ)數(shù)據(jù):



          大概有兩萬(wàn)多條,看起來(lái)足夠我們玩的了。現(xiàn)在,我們需要做的就是寫一個(gè)函數(shù)來(lái)讀取這個(gè)文本文件里的成語(yǔ)數(shù)據(jù)了,這個(gè)很簡(jiǎn)單:


          '''讀取成語(yǔ)數(shù)據(jù)'''def readData(self, filepath):    fp = open(filepath, 'r', encoding='utf-8')    idiom_data = {}    valid_idioms = []    for line in fp.readlines():        line = line.strip()        if not line: continue        item = line.split('\t')        if len(item) != 3: continue        if item[0][0] not in idiom_data:            idiom_data[item[0][0]] = [item]        else:            idiom_data[item[0][0]].append(item)        valid_idioms.append(item[0])    return idiom_data, valid_idiom



          接著,我們用PyQt5寫個(gè)簡(jiǎn)單的GUI界面,大概長(zhǎng)這個(gè)樣子:



          我的想法大概是這樣子的:首先我方輸入一個(gè)成語(yǔ),然后點(diǎn)擊確定,從而告訴電腦方我們現(xiàn)在輸入的成語(yǔ)是什么,讓電腦方接龍;電腦經(jīng)過(guò)搜索得出回答;然后我方再根據(jù)電腦方的輸出進(jìn)行接龍,以此類推……

          重新開始按鈕用來(lái)重置當(dāng)前的游戲狀態(tài)。(主要是在我方不知道該接什么詞的時(shí)候使用


          ok,確定了大概的思路之后,我們就可以開始愉快地coding啦~


          首先是完成電腦接龍部分:


          '''電腦接龍'''def airound(self):    idiom = self.user_input_edit.text()    idiom = idiom.strip()    if (not self.isvalid(idiom)) or (self.ai_answer and idiom[0] != self.ai_answer[0][-1]):        QMessageBox.warning(self, '成語(yǔ)輸入錯(cuò)誤', '你輸入的成語(yǔ)不對(duì)哦, 不可以耍小聰明噠!', QMessageBox.Yes | QMessageBox.No)    else:        if idiom[-1] in self.idiom_data:            answers = self.idiom_data[idiom[-1]]            answer = random.choice(answers)            self.ai_answer = answer.copy()            self.ai_input_edit.setText(self.ai_answer[0])        else:            QMessageBox.information(self, '你贏啦', '電腦都接不上你的成語(yǔ), 你太厲害啦!', QMessageBox.Yes | QMessageBox.No)


          這里需要注意的點(diǎn)有:

          • 玩家接龍的成語(yǔ)必須真的是成語(yǔ),不然你隨便打幾個(gè)字,保證第一個(gè)字和電腦出的成語(yǔ)最后一個(gè)字對(duì)上就行的話,就失去了成語(yǔ)接龍的意義了;

          • 保證玩家方接的成語(yǔ)第一個(gè)字能夠?qū)ι想娔X方出的成語(yǔ)的最后一個(gè)字;

          • 寫代碼的時(shí)候要考慮到電腦方也是有可能輸?shù)摹?/p>


          然后是重新開始部分:


          '''重新開始'''def restart(self):    self.ai_answer = None    self.ai_input_edit.clear()    self.user_input_edit.clear()


          這部分很簡(jiǎn)單,就不展開說(shuō)了。現(xiàn)在,我們大致完成了我們的成語(yǔ)接龍小軟件:




          最后,再來(lái)給它添加一點(diǎn)內(nèi)容?比如我們玩成語(yǔ)接龍的時(shí)候能不能順便學(xué)習(xí)一下成語(yǔ)本身的含義呢,就像這樣:



          這部分的實(shí)現(xiàn)其實(shí)很簡(jiǎn)單,數(shù)據(jù)都是有的,讀取并顯示一下就可以。就不展開說(shuō)啦~



          在終端運(yùn)行如下命令即可:

          python IdiomSolitaire.py


          效果如下:

          留個(gè)"作業(yè)"?聰明的小伙伴們能不能在本文代碼的基礎(chǔ)上實(shí)現(xiàn)語(yǔ)音版的成語(yǔ)接龍小游戲呢?


          獲取完整源代碼請(qǐng)公眾號(hào)內(nèi)回復(fù) 成語(yǔ)接龍


          如果文章對(duì)你有幫助,歡迎轉(zhuǎn)發(fā)/點(diǎn)贊/收藏~

          作者:白露未晞me

          來(lái)源:Charles的皮卡丘


          _往期文章推薦_

          Python有嘻哈:Crossin教你用代碼寫出押韻的verse




          如需了解付費(fèi)精品課程教學(xué)答疑服務(wù)
          請(qǐng)?jiān)?strong style="max-width: 100%;overflow-wrap: break-word !important;box-sizing: border-box !important;">Crossin的編程教室內(nèi)回復(fù): 666

          瀏覽 118
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  处一女一级a一片 | 中文字幕男女 | 91麻豆精品国产91久久久吃药 | 成人久久大香蕉 | 三级毛片电影 |