写给所有人的编程思维-循环篇(条件循环)

条件语句(亦称条件)很简单,是计算机根据给定的信息做出选择的语句,我们在循环中已经见过。生活中,我们每天所做出的决定,都要考虑条件。关于这一点,可以想想不同的天气对穿衣的影响。请看下面的例子:

如果外面在下雨, 

那么我就需要带把伞出门。 

如果人行道信号灯是绿色, 

那么我就可以安全地穿过马路。 

如果手机充电完毕, 

那么我就可以拔掉充电器。

条件语句通常以“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获胜。

请注意,“拥有册牌多者获胜”这一表达要求我们对胜出和失败的情况给予详细的指令描述。

“钓鱼”这款简单的扑克牌游戏,有着易学易用的游戏规则与玩法。

同时,这个游戏也告诉我们,任何事物都可以用编程思维的方式进行思

考!

明日预告:写给所有人的编程思维-流畅的运算符篇

今日内容节选自《写给所有人的编程思维》,作者:吉姆.克里斯蒂安  ,如侵权,联系本号删除

你可能感兴趣的:(写给所有人的编程思维-循环篇(条件循环))