S5Q4 诈欺游戏中双背面牌的几率模拟

本周的 GGB 任务要谈日剧 Liar Game S1E07 的一个双背面扑克牌的几率片段。这是部漫画改编的日剧,剧情十分烧脑,天真善良的女主角陷入一个神秘组织的密室游戏中,在这游戏就要比拼大家的心机算计。天真女主该如何能逃脱呢?数学又在这决策中起了什么作用了?

在第7集中引用了出现了经典的双面卡片的机率游戏。有两张卡片:一张双面为OO, 另一张一O一X。当抽出一张,其一面为O时,那反面为X 的机率为何呢?这次就用 GGB 来做个模拟这游戏的抽牌的活动。

一、影剧片段回顾

先回顾这抽牌片段。思考这个看似公平的游戏,其真实获胜几率为何呢?

二、你将学会

  1. 利用【区间随机数】制造随机效果

  2. 利用【滑动条】来将随机变换的过程显示

  3. 利用【按钮】来更新结果,做记录

  4. 利用 【条形图】 来绘制统计图表

三、利用 【区间随机数】 制造随机的效果

在这节主要模拟随机抽一张牌并随机翻其中一面。主要通过【区间随机数】来达成这效果。

https://www.geogebra.org/m/cghqamfq

为了让整个方案更有些拓展性,先设定三个滑动条来控制三类牌的数量,分别是 noo, nox, nxx ,另还有个 nTotal= noo+nox+nxx 。

noo = 滑动条(0,5,1)

nox = 滑动条(0,5,1)

nxx = 滑动条(0,5,1)

nTotal = noo+nox+nxx

接着利用  【randCard = 区间随机数(1,nTotal)】 从这些牌,随机抽取 1 张, 并用 【HT = 区间随机数(1,2)】来决定其哪一面。

# 建立三类牌 {1,1} 表示 2O, {1,2} 表示 OX, {2,2} 表示 XX

C1={1,1}

C2={1,2}

C3={2,2}

#随机从 n 张排选个数,再判断它的样式是 C1,C2,C3 哪一个

randCard =  区间随机数(1,nTotal)

resC = If(randCard <= noo, C1, randCard<=noo+nox,C2,C3)

# 决定翻开的面

翻开的面HT = 区间随机数(1,2)

resF = resC(HT)

resB = resC(3-HT)

建立一个【按钮】[抽牌],写下如下脚本,让每次点按时,更新 randCard, HT 的值,产生随机的效果。

noo = 滑动条(0,5,1)

nox = 滑动条(0,5,1)

nxx = 滑动条(0,5,1)

nTotal = noo+nox+nxx

接着利用  【randCard = 区间随机数(1,nTotal)】 从这些牌,随机抽取 1 张, 并用 【HT = 区间随机数(1,2)】来决定其哪一面。

# 建立三类牌 {1,1} 表示 2O, {1,2} 表示 OX, {2,2} 表示 XX

C1={1,1}

C2={1,2}

C3={2,2}

#随机从 n 张排选个数,再判断它的样式是 C1,C2,C3 哪一个

randCard =  区间随机数(1,nTotal)

resC = If(randCard <= noo, C1, randCard<=noo+nox,C2,C3)

# 决定翻开的面

HT = 区间随机数(1,2)

resF = resC(HT)

resB = resC(3-HT)

建立一个【按钮】[抽牌],写下如下脚本,让每次点按时,更新 randCard, HT 的值,产生随机的效果。

randCard  = 区间随机数(1,nTotal)

HT = 区间随机数(1,2)

四、显示随机抽牌的过程

当有了随机抽牌的结果,接着就是如何将结果显示。其中,为了显示过程中有随机变换的效果,可利用滑动条让他动态变化。

https://www.geogebra.org/m/mmgyhbwx

先设定显示抽牌结果的区域 CardF, CardB 。再利用 resFB 与 【如果】的配合来显示随机抽牌的结果。

CardF = 多边形((-1,0),(-3,0),(-3,3),(-1,3))

CardB = 多边形((1,0),(3,0),(3,3),(1,3))

resFT = 如果(resF==1,”O”,”X”)

resBT = 如果(resB==1,”O”,”X”)

为了呈现抽牌的效果,可增加个滑动条 slrand 来让显示的过程不断变换,并且将 slrand 的 [重复] 设定为”递增(一次)”。

slrand = 滑动条(0,32,1)

resF = 取余(resC(HT)+slrand,2)

resB = 取余(resC(3-HT)+slrand,2)

同时对[抽牌] 的按钮的脚本作如下修改,并设定一个【复选框】(blB) 来让另一面卡片要经切换才能显示结果。

randCard  = 区间随机数(1,nTotal)

HT = 区间随机数(1,2)

赋值(slrand,0)

赋值(blB, False)

启动动画(slrand,True)

五、记录统计结果

这一段主要通过一个按钮来记录O,X 出现的次数,并用【条形图】来显示结果。

https://www.geogebra.org/m/rgshvjkd

为了记录O,X 出现的次数,建立两个变数 nO, nX 来作记录,并用个条形图来显示这结果。 

nO = 0

X = 0

条形图({1,2},{nO,nX},0.7)

新增一个【按钮】(记录)来记录正反面出现的次数。

赋值(nX, 如果(resB==0,nX+1,nX))

赋值(nO, 如果(resB==1,nO+1,nO))

新增一个【重置】来将 nX nO 的结果归为 0。

赋值(nX, 0)

赋值(nO, 0)

六、思考与讨论

请用滑动杆设更换 OO,OX,XX 的张数,并思考在不同张数时,抽到一面为 O 时,另一面也是 O 的几率。

相关链接

【Bili】

【GGB】https://www.geogebra.org/m/rgshvjkd

资源下载: