当你参加Teambuilding、培训或者参加团体旅行的时候,常常会碰到一群陌生人,这会给大家造成一种无形的拘束感,也不利于活动的效果。为了让小伙伴消除隔膜、彼此快速熟悉起来,最有效的办法就是玩游戏,比如游戏:国王与天使,这个游戏其实很多人内心是抗拒的,为了配合举办方,很多人还是默默行动了。
另一个游戏叫成语接龙,是中华民族传统的文字游戏。它不仅有着悠久的历史和广泛的社会基础,同时还是体现我国文字、文化、文明的一个缩影,是老少皆宜的民间文化娱乐活动。成语接龙规则多样,大家一般熟知的是采用成语字头与字尾相连不断延伸的方法进行接龙。大家可以面对面沟通,深受很多人喜爱。
参加成语接龙的小伙伴,在短时间内无法想到更多的成语,将陷入死循环。为解决死循环、解决瞬间想不到接龙成语的尴尬!今天我将使用Python给大家介绍一个解决方案,具体步骤如下:
引入数据包
import os
import sys
import random
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
数据获取
我整理23594条的成语数据,如果还不够的话,可以自行添加即可。
实现过程
读取数据
'''读取成语数据'''
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[item[0]] = item[1:]
return idiom_data, valid_idioms
界面设计
首先我方输入一个成语,然后点击确定,从而告诉电脑方我们现在输入的成语是什么,让电脑方接龙,然后我方再根据电脑方的输出进行接龙,以此类推,重新开始按钮用来重置当前的游戏状态。
# 读取数据
self.idiom_data, self.valid_idioms = self.readData('data/data.txt')
self.ai_answer = None
# 定义界面
self.setWindowTitle('成语接龙-公众号: Python学习与数据挖掘')
self.setWindowIcon(QIcon('data/icon.jpg'))
self.setFixedSize(600, 200)
self.user_input_label = QLabel('我方:')
self.user_input_edit = QLineEdit()
self.user_input_button = QPushButton('确定')
self.ai_input_label = QLabel('电脑方:')
self.ai_input_edit = QLineEdit()
self.restart_button = QPushButton('重新开始')
self.user_explain_label = QLabel('我方成语释义:')
self.user_explain_edit = QLineEdit()
self.ai_explain_label = QLabel('电脑方成语释义:')
self.ai_explain_edit = QLineEdit()
接龙设计
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, '成语输入错误', '你输入的成语不对哦, 不可以耍小聪明哒!', QMessageBox.Yes | QMessageBox.No)
else:
self.user_explain_edit.setText('读音: %s; 含义: %s' % (self.valid_idioms[idiom][0], self.valid_idioms[idiom][1]))
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])
self.ai_explain_edit.setText('读音: %s; 含义: %s' % (self.valid_idioms[answer[0]][0], self.valid_idioms[answer[0]][1]))
else:
QMessageBox.information(self, '你赢啦', '电脑都接不上你的成语, 你太厉害啦!', QMessageBox.Yes | QMessageBox.No)
结果展示
代码获取地址
推荐阅读
- Python办公自动化|只需三秒,一键生成数据分析报告!
- 真香!Python可以让画的图舞动起来 !
- 马赛克秒变高清,这个名为PULSE的方法火了
- 制作一份可视化的旅行攻略,疫情后来场说走就走的旅行
- GitHub热榜|5款优质的Python小工具,最后一款是福利!
更多精彩内容,关注微信公众号『Python学习与数据挖掘』
为方便技术交流,本号开通了技术交流群,有问题请添加小助手微信号:connect_we,备注:加群来自CSDN,欢迎转载,收藏,码字不易,喜欢文章就点赞一下!谢啦