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。

原创粉丝点击