在上一节《赛跑排名》中,我们已经学会了如何借助Scratch进行逻辑推理,通过已知的条件做出正确的判断。现在,就让我们借助于这种逻辑推理能力,来过一把当侦探的瘾吧。
问题
斯可瑞奇城的著名侦探Tom接到威灵顿古堡的管家打来的电话,说他们古堡有一件重要的首饰丢失了。警方虽然抓到了四名嫌疑人,断定小偷就在这四个人当中,但是无法确定谁才是真正的小偷,需要Tom帮忙。于是Tom赶到现场协助审查这几个嫌疑人,出于对嫌疑人隐私的保护,我们用甲、乙、丙、丁来代表他们,他们的口供如下:
甲:我不是小偷。
乙:丙是小偷。
丙:丁是小偷。
丁:丙在胡说八道!
现在可以确定的是这四个人中有三个人说的是真话,一个人说的是假话。根据这些信息,请你帮助Tom找出到底谁是小偷。
分析
上一节我们已经学会了用Scratch进行推理的方法,就是先把已知的条件转化为逻辑表达式,然后再在所有的可能性中寻找满足条件的那一项。对于这个问题来说,我们把甲、乙、丙、丁四个人分别用1、2、3、4表示,再设置一个“小偷”变量,那么这个变量的取值只有1、2、3、4四种可能性,根据四个人的口供,我们可以生成下面这四个逻辑表达式:
已知条件 | 逻辑表达式 |
---|---|
甲:我不是小偷。 | < 小偷 = 1 > 不成立 |
乙:丙是小偷。 | < 小偷 = 3 > |
丙:丁是小偷。 | < 小偷 = 4 > |
丁:丙在胡说八道! | < 小偷 = 4 > 不成立 |
根据题目描述,上面四个逻辑表达式只有三个成立,那我们就把四种情况,即小偷等于1、2、3、4枚举出来,看哪种情况下有三个表达式成立,这个时候看小偷变量就知道谁是小偷了。
编程
我们新建Scratc程序,加入甲乙丙丁四个角色,并新建一个变量“小偷”,再建立一个列表,里面按顺序写入甲乙丙丁,这个列表的作用是最后根据序号(1、2、3、4)找到小偷的名字。接下来编写程序让嫌疑人依次说出口供,由一个小螃蟹角色进行判断,判断的相关代码如下:
其它角色说话、发送消息的代码就交给你完成吧!程序的运行效果如下:
真相只有一个,丙是小偷!
总结
这节课我们应用Scratch的逻辑推理又解决了新的问题,相信你对这类问题的解决办法有了更深入的体会。那么,你不妨试一下,如果把条件中丁的口供修改为“乙在胡说八道”,那么谁才是小偷呢?