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

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

如果外面在下雨, 

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

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

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

如果手机充电完毕, 

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

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

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

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

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

考!

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

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,039评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,426评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,417评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,868评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,892评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,692评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,416评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,326评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,782评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,957评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,102评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,790评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,442评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,996评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,113评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,332评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,044评论 2 355

推荐阅读更多精彩内容