Python编写的一个简单的石头剪刀布游戏
来源:互联网 发布:黄海真实故事知乎 编辑:程序博客网 时间:2024/04/30 05:14
还记得“石头剪刀布”吗?这项此前被讥为“吃饱了撑的”的研究,入选了“麻省理工学院科技评论2014年度最优”,成为中国首次入选“麻省理工科技评论”的社科领域成果。
这项由浙江大学、浙江工商大学、中国科学院组成的跨学科团队共同完成的成果,叫作“石头剪刀布”中的社会循环与条件响应,解释了“剪刀石头布”的制胜原理。“石头剪刀布”研究采用经济学控制性实验方法—也就是实验经济学的方法,利用“石头剪刀布”这一家喻户晓而又在博弈论中处于元博弈模型的框架进行研究。这其中,包含了物理学、心理学、神经科学等领域的内容。
最简单的事情后面,却隐藏这不简单的道理,让人嗟叹,让人感叹。
研究,是为了发现规律。发现规律,方能运用规律,将其作用于社会生活,以及开发产品中去。研究要针对问题,可以是大问题,也可以是小问题,甚至只是小问题中的一个方面。研究所针对的问题,不能够面面俱到,常常通过抽象和简化,去除表象的干扰,找到问题的核心,直达其本质地进行下去。
类似的,了解些博弈论的人,该知道“囚徒困境”、“鹰鸽博弈”等很多有意思的问题,而这样的问题,在一些人看来,当然是毫无价值。要意识到,在现实生活中,将问题做些分类,会发现这些貌似浅显的问题,代表的就是一类问题。这样的好玩的小问题,是一类大问题的抽象。
不止在科学研究中,在工程研究中,其实也有类似的思路。比如谈到“机器人足球”,科学家提出要在2050年要造出一支机器人组成的足球队,打败人类的世界冠军队,千万别以为人类就是没事干造机器找自虐。组建机器人足球队,其真实意图是借此其中涉及的问题,在计算机技术、自动化技术、机电一体化技术、人工智能技术、模式识别技术等多个方面获得突破,在机器人制作、材料科学、自动决策、智能协商等领域,产生能够延伸到其他领域的有价值的成果。
我对“石头剪子布”没有做过研究,但直观感觉,这就是一个研究的好问题,有明确的规则,而且还有可贵的“简单性”。媒体似乎更在意用“标题党”吸引眼球,公众也就被忽悠着放出让人发笑的谩骂。
想起了我成天忙于破解的“学而无用论”。在校的大学生,就是将“直接之用”看得太重了。凡是向抽象层面绕个弯子去追本质的内容,有更大用,有更深远意义的知识载体,是该看到其价值的。这样的抽象能力,也本该是大学生要具备的。
下面给出一个用python编写的石头剪子布的小脚本:
# -*- coding: utf-8 -*- from PyQt4.QtGui import *from PyQt4.QtCore import *import sys,randomQTextCodec.setCodecForTr(QTextCodec.codecForName("utf8"))class GameUi(QDialog): def __init__(self,parent=None): super(GameUi,self).__init__(parent) self.guess_list = ['石头', '剪刀', '布'] self.guize = [['石头', '剪刀'], ['剪刀', '布'], ['布', '石头']] self.setWindowTitle(self.tr("石头剪刀布")) self.Total = 0 self.YouWin = 0 self.YouLose = 0 #选项按钮 StonePushButton = QPushButton(self.tr("石头")) ScissorsPushButton = QPushButton(self.tr("剪刀")) ClothPushButton = QPushButton(self.tr("布")) #结果显示 ResultLabel = QLabel(self.tr("结果:")) Computer = QLabel(self.tr("电脑:")) Statistics_Label = QLabel(self.tr("统计")) Total_Label = QLabel(self.tr("总局数:")) self.TotalStat = QLabel()#玩的局数标签 YouWin_Label = QLabel(self.tr("你赢了:")) self.YouWinStat = QLabel()#赢得局数标签 YouLose_Label = QLabel(self.tr("你输了:")) self.YouLoseStat = QLabel()#你输的局数 self.Result = QLabel()#结果显示标签 self.ComputeResult = QLabel()#电脑出什么 #界面布局 layout=QGridLayout() layout.addWidget(StonePushButton,0,0) layout.addWidget(ScissorsPushButton,0,1) layout.addWidget(ClothPushButton,0,2) layout.addWidget(Computer,1,0) layout.addWidget(self.ComputeResult,1,1) layout.addWidget(ResultLabel,2,0) layout.addWidget(self.Result,2,1) layout.addWidget(Statistics_Label,3,1) layout.addWidget(Total_Label,4,0) layout.addWidget(self.TotalStat,4,1) layout.addWidget(YouWin_Label,5,0) layout.addWidget(self.YouWinStat,5,1) layout.addWidget(YouLose_Label,6,0) layout.addWidget(self.YouLoseStat,6,1) self.setLayout(layout) self.connect(StonePushButton,SIGNAL("clicked()"),self.Stone) self.connect(ClothPushButton,SIGNAL("clicked()"),self.Cloth) self.connect(ScissorsPushButton,SIGNAL("clicked()"),self.Scissors) def Stone(self): self.computer = random.choice(self.guess_list) self.ComputeResult.setText(self.tr(self.computer)) self.people='石头' self.Total+=1 self.judge() def Scissors(self): self.computer = random.choice(self.guess_list) self.ComputeResult.setText(self.tr(self.computer)) self.people='剪刀' self.Total+=1 self.judge() def Cloth(self): self.computer = random.choice(self.guess_list) self.ComputeResult.setText(self.tr(self.computer)) self.people='布' self.Total+=1 self.judge() def judge(self): self.TotalStat.setText(str(self.Total)) if self.people == self.computer: self.Result.setText(self.tr("平局")) elif [self.computer,self.people] in self.guize: self.Result.setText(self.tr("你输了")) self.YouLose+=1 self.YouLoseStat.setText(str(self.YouLose)) else: self.Result.setText(self.tr("你赢了")) self.YouWin+=1 self.YouWinStat.setText(str(self.YouWin))if __name__=='__main__': app = QApplication(sys.argv) GUI = GameUi() GUI.show() app.exec_()
这里用的是python2.7。
- Python编写的一个简单的石头剪刀布游戏
- 一个简单的剪刀石头布游戏(C++实现)
- 简单的剪刀石头布游戏
- 石头剪刀布游戏的python代码
- 学习JavaScript(1)-制作一个简单的石头剪刀布游戏
- python 石头剪刀布游戏
- Unity-->实现剪刀石头布的游戏
- C#做的剪刀石头布游戏
- Python核心编程中的一个游戏练习题,石头剪刀布
- 用Python实现的"石头,剪刀,布"
- python 剪刀石头布的入门demo
- java编写剪刀石头布游戏
- 用户与计算机的几个简单交互游戏(猜数字、猜单词、剪刀石头布...)
- 剪刀、石头、布游戏
- 剪刀石头布游戏
- 剪刀石头布游戏
- 石头剪刀布游戏
- 剪刀石头布游戏
- Android 自定义View 之转动风车
- 重启手机后之前新建的VPN消失,且重新添加VPN时提示输入凭据存储的密码
- RSA低指数加密
- 论文中的生词
- E
- Python编写的一个简单的石头剪刀布游戏
- 平衡二叉搜索树
- linux+docker+nginx+tomcat部署web项目
- COGS-2278 树黑白(动态树分治)
- 最短路+DP [ZJOI2006]物流运输
- android使用AIDL实现进程间的通信
- Python_装饰器(一)原理篇
- Terrible Sets (单调队列)
- Unable to initialize MapOutputCollector org.apache.hadoop.mapred.MapTask$MapOutputBuffer java.lang.C