6(2)歧路好风光 兜兜又转转

Fire

下面的小贴士能够在你们写分支程序中有所帮助,同时也能运用在其他的流程控制中:

循环Loop

我们经常想让电脑一遍又一遍得做相同的事--毕竟这正是电脑被认为所擅长的。

当你告诉你的电脑保持重复做某事时,你也需要告诉它在何时停止做这件事。电脑从来不会为重复做某事而感到厌烦的,如果不告诉它何时停止它就会无限重复这件事。在告诉电脑在某个特定条件是真时重复程序中某部分时,我们也要确保它不会无限重复下去。这与if条件语句很相似:

command = ''

while command != 'bye'
  puts command
  command = gets.chomp
end

puts 'Come again soon!'


上面就是一个循环(你可能注意到在输出的开头有一个空行,这是在我们输入数据前程序的第一个输出。你可以试试如何修改程序来去除第一行,你的程序是不是能像上面程序一样成功运行?)

循环能够让我们做各种有趣的事,你们能想到的都能做到。然而如果你写的程序有错误循环程序就会产生问题,如果电脑运行程序进入了无限循环怎么办?不用太担心,如果你认为程序已经进入无限循环,你只需要同时按下CtrlC键就可以。

在我们开始学习循环前,我们先学习一点其他的内容来使后面的学习更加容易一些。

一点逻辑知识

让我们再回顾一下我们第一个分支程序。假如我妻子回到家看到这个程序跑了一下程序,程序没有告诉她有一个美丽可爱的名字?好吧……可能她不一定太在乎这个,但是我在乎啊!因此让我们重写一下:

puts 'Hello, what\'s your name?'
name = gets.chomp
puts 'Hello, ' + name + '.'
if name == 'Chris'
  puts 'What a lovely name!'
else
  if name == 'Katy'
    puts 'What a lovely name!'
  end
end


运行无误……但并不太完美。有什么问题吗?好吧,我在这些年的编程中学到的最好的规则是DRY规则:不要重复你自己!( Don't Repeat Yourself)我甚至可以写一本讨论DRY规则为什么如此有效的书。在我们的程序中我们重复写了两遍'What a lovely name!'的命令,你可能会问这样也不太重要吧?好吧,假如我第二遍写的过程中有拼写错误呢?假如我想将两行中的‘lovely’都改成‘beautiful’呢?要知道我很懒的,因此如果我想要程序在遇到‘Chris’或‘Katy’时做相同的事,它的确应该运行下面相同的命令

puts 'Hello, what\'s your name?'
name = gets.chomp
puts 'Hello, ' + name + '.'
if (name == 'Chris' or name == 'Katy')
  puts 'What a lovely name!'
end


完美!上面程序中为了使程序顺利运行我用到了or这个逻辑运算符,还有两个逻辑运算符是andnot.当用到它们时最明智的做法是与括号一起用,下面让我们来看看它们是如何使用的:

iAmChris  = true
iAmPurple = false
iLikeFood = true
iEatRocks = false

puts (iAmChris  and iLikeFood)
puts (iLikeFood and iEatRocks)
puts (iAmPurple and iLikeFood)
puts (iAmPurple and iEatRocks)
puts
puts (iAmChris  or iLikeFood)
puts (iLikeFood or iEatRocks)
puts (iAmPurple or iLikeFood)
puts (iAmPurple or iEatRocks)
puts
puts (not iAmPurple)
puts (not iAmChris )

output

其中可能骗到你的是or这个运算符。在英语中我们通常用or表示“这一个或者那一个,但不包含两个”。比如你妈妈说:“你可以吃pie或者cake作为餐后甜点.”她并不是说你可以两个都做甜点一起吃掉!但是在计算机中用or表示“这一个或者那一个,或者两个都包含”(或者说至少包含一个),这样来看计算机比你们的妈妈宽容多了。

牛刀小试

  • 写一个程序来输出经典歌曲“99 bottles of beer”的歌词

  • 写一个聋外婆的程序:不论你对外婆说什么(不论你键入什么内容)她总会用“HUH?! SPEAK UP, SONNY!”回应,除非你大声对她说(键入的内容都大写);当你大声说外婆能够听见你(至少她自己认为能听到)然后回应“NO, NOT SINCE 1938!”为了使程序更加可信,每次外婆都会说出不同的年份,可以是1930至1950年中随机的一年(这部分是可选的,如果你在天外有天(4)数字迷宫中学了随机数会相对容易解决)。你只能喊出‘BYE’才能结束和外婆的对话。
    提示1:不要忘了chomp!‘BYE’加上回车与‘BYE’是不同的
    提示2:试着想清楚你的程序应该在哪部分开始循环,这部分应该在while循环中

  • 扩展你的聋外婆程序:假如你的外婆不想你离开怎么办?当你喊‘BYE’,她可能假装没听见你。修改一下你的程序使你不得不一次性喊3次。测试你的程序确保如果你喊3次但不是在一行,你应该仍然和你外婆聊着天。

  • 写一个闰年程序:这个程序将问你一个开始年份和结束年份,之后它会输出之间的闰年(如果开始和结束年份也是闰年的话,也要输出来)。闰年是年份可以被4整除的(比如1984和2004),但能够被100整除的年份不是闰年(比如1800和1900)除非它们能被400整除(比如1600和2000是闰年)。(这里有些许让人困惑,但是还比不上存在着7月是冬天这样让人困惑的事,而这确实会发生)

当你完成了这些程序,让自己放松一下!你已经学了许多,祝贺你!你会惊讶于你已经可以让电脑去做如此多的事情了!再学习几个章节,你就能够编出任何程序了,这是真的!回顾一下你能够写的所有程序,现在你已经离不开循环和分支程序了。

下期我们将了解一种新的对象阵列,它对于处理其他对象的列表很有帮助。

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

推荐阅读更多精彩内容