全国服务热线:400-6263-721

位置:海口童程童美少儿编程培训学院 > 学校动态 > Scratch数据类型的隐式转换

Scratch数据类型的隐式转换

来源:海口童程童美少儿编程培训学院时间:2021/9/28 15:11:32

  大家首先看一下这个scratch代码, 3>2>1,你们来说他成立吗?

   初学者会这样写脚本的原因是将数学中的习惯带到编程里来了(别问笔者是怎么知道的,问就是笔者也犯过相同的错误。。)乍一看好像没有什么问题。但是要知道,程序是一步一步执行的,像这样嵌套关系的积木,也是先执行上层的,再执行下层的(相当于数学中的括号)。3>2的结果是true(不打引号以区分字符类型),再比较true和1的大小。到这一步,不论接下去的结果如何,都应该能发现,和数学中连续比较的的3>2>1不一样,这么写是错的,是肯定无法得到预期结果的。本着 Scratch 格物堂的“格物”精神,继续往下看。true和1怎么比大小?这还不简单吗?《Scratch 3.0的大小比较是如何进行的》一文中已经说得很清楚了,字符类型的数据在参与比较运算时,比较的是ASCII码或者说是Unicode码。而数字0的十进制编号是48,A是65,a是97。就算Scratch不区分大小写,二十六个字母怎么的也是排在数字后面,字母是肯定大于数字的,“true”>1肯定是true。

  看似没毛病

  但是一运行整个脚本。。。

  于是开始倒推哪个环节出了问题。

  还是没问题,true在参与比较运算时,真的是“true”吗?我们想当然地以为true被转换成了字符类型。但不是字符类型还能是什么?在我们其它编程语言中,往往用1表示true,0表示false。

  测试1:

  布尔类型(true)参数参与算术运算(+空字符)

  测试2:

  布尔类型(false)参数参与算术运算(+空字符)

  这两个小测试足以证明,true被转换为数字类型时,会被转换为1;false在被转换为数字类型时,会被转换为0.在上文中的比较运算符的连续嵌套使用示例中,第二次其实是在比较1>1,结果自然是false了。至于为什么“气泡输出”会失效,这是因为“说xxx”这类积木会将参数转换为字符类型。

  实例

  也许使用布尔值参与比较运算的确实用价值不高,一般在案例实战中不会这么用,仅仅需要了解其原因即可。但是笔者的的确确见过一种使用布尔值参与算术运算,巧妙利用数据类型隐式转换这个特点的案例。下面和读者朋友们分享一下。

  一起盗窃案,有4名嫌疑人。这4人只有一名小偷。已知,这4名嫌疑人中,有且仅有1人在说谎。

  首先用脚本把4个嫌疑人的供词用逻辑表达式表示出来:

  1号:“不是我。”

  2号:“小偷是3号。”

  3号:“小偷是4号。”

  4号:“3号在说谎”

  接着根据条件“4个嫌疑人中有且仅有1人在说谎”,可以推导出结论:以上4个逻辑表达式中,有3个是成立的,有1个是不成立的。再结合上文中get的新技能:布尔值在被转换为数字类型时,true会被转换为1,false会被转换为0,不难得出以下结论:

  4名嫌疑人中,有且仅有1人在说谎,zui后要做的就只有一件事了:遍历,从小偷=1开始,逐个验证即可。

领取试听课
每天限量名额,先到先得

尊重原创文章,转载请注明出处与链接:http://www.peixun360.com/963/news/416814/违者必究! 以上就是海口童程童美少儿编程培训学院 小编为您整理 Scratch数据类型的隐式转换的全部内容。

温馨提示:提交留言后老师会第一时间与您联系!热线电话:400-6263-721