条件语句(亦称条件)很简单,是计算机根据给定的信息做出选择的语句,我们在循环中已经见过。生活中,我们每天所做出的决定,都要考虑条件。关于这一点,可以想想不同的天气对穿衣的影响。请看下面的例子:
如果外面在下雨,
那么我就需要带把伞出门。
如果人行道信号灯是绿色,
那么我就可以安全地穿过马路。
如果手机充电完毕,
那么我就可以拔掉充电器。
条件语句通常以“if(如果)”开头,比如:“if发生那种情况,then(那么就)做这件事”。我们还可以在条件语句中增加else(否则,要不然),来表示更进一步的选择和具体的情况。比如:
if外面在下雨,
then我就需要带把伞出门。
else(要不然)
我就穿件外套出门。
if人行道信号灯是绿色,
then我就可以安全地穿过马路。
else
我就可能会受伤。
if手机正在充电,
then我就让手机继续充电。
else
出门时手机电量就不满。
还记得吗?我们在“编程就是要简单”一节中设计了让小智整理床铺的流程图,已经学过了使用条件语句。
在流程图中,小智整理床铺时要检查一些条件是否具备。如果条件不具备,小智就要完成这个步骤,然后进行下一步。我们可以将小智的动作步骤用条件语句表达出来:
if羽绒被不平整,
then拉平羽绒被。
else
进行下一步。
if枕头不在毯子的上面,
then把枕头放在毯子上面。
else
结束。
我们还可以通过给羽绒被、毯子和枕头的状态赋予布尔值进一步简化程序。
if羽绒被拉平了=真,
进行下一个步骤。
else if羽绒被拉平了=假,
拉平羽绒被。
if枕头放在毯子上面=真,
进行下一个步骤。
else if枕头放在毯子上面=假,
把枕头放在毯子上面。
结束。
关于小智整理床铺的算法,在以下最后一个版本中,我们将以事件的真假作为语句的条件。“‘羽绒被拉平了’=假”就相当于“‘羽绒被不平整’=真”,我们上面编写的算法将羽绒被、毯子和枕头的真假值全部考虑到了。但是,只有当条件为假时,我们才需要小智采取行动,即只有当床铺没铺好的情况下,我们才需要小智行动,反之则不需要。就整理床铺而言,以下还有一种算法表达形式,更为简单:
if羽绒被拉平了=假,
拉平羽绒被。
else
进行下一个步骤。
if毯子拉平了=假,
拉平毯子。
else
进行下一个步骤。
if枕头放在毯子上面=假,
将枕头放在毯子上面。
else
结束。
以上后两个算法均正确,你认为哪一个更为高效呢?两个算法均占八行,你能说一个比另一个更高效吗?请别忘记,高效不仅在于所占行数更少,更在于每一个步骤都有意义。
其实,在倒数第二个例子中,我们完全不需要加入“if羽绒被拉平了=真”这一条件。因为我们已经将其包含在内了:if羽绒被不平整,将羽绒被拉平。if情况反之,则进行下一步。也就是说,else语句就将“真”的情况考虑在内了。
正如古老的谚语所说,质量第一,数量第二。
“钓鱼”游戏的更多条件
我们再来看看“钓鱼”游戏。如果回顾游戏规则,你会发现游戏当中有不少条件句。条件句找起来并不难,通常以“if(如果)”开头。你能把条件句全都找出来吗?
我们来看第一条规则:
(带条件的)“钓鱼”游戏规则
1.给每位玩家发五张牌(若只有两三位玩家,则每人发七张牌)。然后把剩下的牌牌面朝下放在中间,成为“池塘”。
读完游戏规则的第一条,我们就可以看到第一个条件语句:if游戏人数小于等于三且大于一,then给每位玩家发七张牌。
我们再来看第二条规则:
2.从发牌者左边的人开始,为第一位玩家,他可以根据手中的牌向另一位玩家要一张牌,要的这张牌一定要和自己手中至少一张牌数字相同,不可以要(或者钓)一张和自己手中牌面数字不同的牌。
在这一步骤中也出现了条件语句:
if这位玩家手中没有某个数字的牌,
then这位玩家不能要此数字的牌。
3.如果被要牌的那位玩家手中有被要的牌,则必须交给这位要
牌的玩家。
步骤3中的句子就是现成的条件语句啦!
4.成功之后,这位玩家再继续问其他玩家要牌。
5.如果被要牌的玩家手中没有要牌的这位玩家所要的牌,他就告诉这位玩家“去钓鱼吧”。于是这位玩家就从中间的“池塘”中拿出一张牌。然后,就轮到下一位玩家来要牌。
在步骤5中,条件句有三个后续的动作。
if被要牌的玩家手中有所要的牌=假,
then被要牌的玩家就告诉要牌的玩家“去钓鱼吧”。
要牌的玩家就从池塘中拿一张牌。
此轮结束。
6.一旦玩家手中有四张数值相同花色不同的牌(一册牌),玩家就拿出来,放在自己的面前。
在步骤6中出现了有if的条件句!
if玩家手中有一册牌,
then就从手里拿出来。
7.如果玩家手中一张牌也没有了,就从池塘中拿一张
下面又是一个思路清晰的条件语句:
if玩家手中的牌数=0,
then玩家从池塘中拿一张牌。
8.当池塘中没有牌时游戏结束。拥有册牌多者获胜。
步骤8中的条件语句:
if池塘中的牌数=0,
then游戏结束。
if玩家A比玩家B拥有的牌册数多,
then玩家A获胜。
else if玩家B比玩家A拥有的牌册数多,
then玩家B获胜。
请注意,“拥有册牌多者获胜”这一表达要求我们对胜出和失败的情况给予详细的指令描述。
“钓鱼”这款简单的扑克牌游戏,有着易学易用的游戏规则与玩法。
同时,这个游戏也告诉我们,任何事物都可以用编程思维的方式进行思
考!
明日预告:写给所有人的编程思维-流畅的运算符篇
今日内容节选自《写给所有人的编程思维》,作者:吉姆.克里斯蒂安 ,如侵权,联系本号删除