Python编写的一个简单的石头剪刀布游戏

  还记得“石头剪刀布”吗?这项此前被讥为“吃饱了撑的”的研究,入选了“麻省理工学院科技评论2014年度最优”,成为中国首次入选“麻省理工科技评论”的社科领域成果。
  
  这项由浙江大学、浙江工商大学、中国科学院组成的跨学科团队共同完成的成果,叫作“石头剪刀布”中的社会循环与条件响应,解释了“剪刀石头布”的制胜原理。“石头剪刀布”研究采用经济学控制性实验方法—也就是实验经济学的方法,利用“石头剪刀布”这一家喻户晓而又在博弈论中处于元博弈模型的框架进行研究。这其中,包含了物理学、心理学、神经科学等领域的内容。
  
  Python编写的一个简单的石头剪刀布游戏_第1张图片

  最简单的事情后面,却隐藏这不简单的道理,让人嗟叹,让人感叹。
  
  研究,是为了发现规律。发现规律,方能运用规律,将其作用于社会生活,以及开发产品中去。研究要针对问题,可以是大问题,也可以是小问题,甚至只是小问题中的一个方面。研究所针对的问题,不能够面面俱到,常常通过抽象和简化,去除表象的干扰,找到问题的核心,直达其本质地进行下去。
  

  类似的,了解些博弈论的人,该知道“囚徒困境”、“鹰鸽博弈”等很多有意思的问题,而这样的问题,在一些人看来,当然是毫无价值。要意识到,在现实生活中,将问题做些分类,会发现这些貌似浅显的问题,代表的就是一类问题。这样的好玩的小问题,是一类大问题的抽象。
  
  不止在科学研究中,在工程研究中,其实也有类似的思路。比如谈到“机器人足球”,科学家提出要在2050年要造出一支机器人组成的足球队,打败人类的世界冠军队,千万别以为人类就是没事干造机器找自虐。组建机器人足球队,其真实意图是借此其中涉及的问题,在计算机技术、自动化技术、机电一体化技术、人工智能技术、模式识别技术等多个方面获得突破,在机器人制作、材料科学、自动决策、智能协商等领域,产生能够延伸到其他领域的有价值的成果。
  
  我对“石头剪子布”没有做过研究,但直观感觉,这就是一个研究的好问题,有明确的规则,而且还有可贵的“简单性”。媒体似乎更在意用“标题党”吸引眼球,公众也就被忽悠着放出让人发笑的谩骂。
  
  想起了我成天忙于破解的“学而无用论”。在校的大学生,就是将“直接之用”看得太重了。凡是向抽象层面绕个弯子去追本质的内容,有更大用,有更深远意义的知识载体,是该看到其价值的。这样的抽象能力,也本该是大学生要具备的。

下面给出一个用python编写的石头剪子布的小脚本:

# -*- coding: utf-8 -*-  
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import sys,random

QTextCodec.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_()



Python编写的一个简单的石头剪刀布游戏_第2张图片

这里用的是python2.7。

你可能感兴趣的:(前端与python)