6(2)歧路好風(fēng)光 兜兜又轉(zhuǎn)轉(zhuǎn)

Fire

下面的小貼士能夠在你們寫分支程序中有所幫助掌实,同時也能運(yùn)用在其他的流程控制中:

循環(huán)Loop

我們經(jīng)常想讓電腦一遍又一遍得做相同的事--畢竟這正是電腦被認(rèn)為所擅長的。

當(dāng)你告訴你的電腦保持重復(fù)做某事時邦马,你也需要告訴它在何時停止做這件事。電腦從來不會為重復(fù)做某事而感到厭煩的滋将,如果不告訴它何時停止它就會無限重復(fù)這件事。在告訴電腦在某個特定條件是真時重復(fù)程序中某部分時耕渴,我們也要確保它不會無限重復(fù)下去拘悦。這與if條件語句很相似:

command = ''

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

puts 'Come again soon!'


上面就是一個循環(huán)(你可能注意到在輸出的開頭有一個空行础米,這是在我們輸入數(shù)據(jù)前程序的第一個輸出。你可以試試如何修改程序來去除第一行添诉,你的程序是不是能像上面程序一樣成功運(yùn)行?)

循環(huán)能夠讓我們做各種有趣的事栏赴,你們能想到的都能做到。然而如果你寫的程序有錯誤循環(huán)程序就會產(chǎn)生問題须眷,如果電腦運(yùn)行程序進(jìn)入了無限循環(huán)怎么辦竖瘾?不用太擔(dān)心花颗,如果你認(rèn)為程序已經(jīng)進(jìn)入無限循環(huán),你只需要同時按下CtrlC鍵就可以扩劝。

在我們開始學(xué)習(xí)循環(huán)前职辅,我們先學(xué)習(xí)一點(diǎn)其他的內(nèi)容來使后面的學(xué)習(xí)更加容易一些。

一點(diǎn)邏輯知識

讓我們再回顧一下我們第一個分支程序聂示。假如我妻子回到家看到這個程序跑了一下程序,程序沒有告訴她有一個美麗可愛的名字鱼喉?好吧……可能她不一定太在乎這個秀鞭,但是我在乎翱盖荨!因此讓我們重寫一下:

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


運(yùn)行無誤……但并不太完美旋圆。有什么問題嗎?好吧灵巧,我在這些年的編程中學(xué)到的最好的規(guī)則是DRY規(guī)則:不要重復(fù)你自己2蠼谩( Don't Repeat Yourself)我甚至可以寫一本討論DRY規(guī)則為什么如此有效的書刻肄。在我們的程序中我們重復(fù)寫了兩遍'What a lovely name!'的命令,你可能會問這樣也不太重要吧敏弃?好吧,假如我第二遍寫的過程中有拼寫錯誤呢麦到?假如我想將兩行中的‘lovely’都改成‘beautiful’呢绿饵?要知道我很懶的瓶颠,因此如果我想要程序在遇到‘Chris’或‘Katy’時做相同的事,它的確應(yīng)該運(yùn)行下面相同的命令

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


完美粹淋!上面程序中為了使程序順利運(yùn)行我用到了or這個邏輯運(yùn)算符,還有兩個邏輯運(yùn)算符是andnot.當(dāng)用到它們時最明智的做法是與括號一起用桃移,下面讓我們來看看它們是如何使用的:

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這個運(yùn)算符。在英語中我們通常用or表示“這一個或者那一個借杰,但不包含兩個”过吻。比如你媽媽說:“你可以吃pie或者cake作為餐后甜點(diǎn).”她并不是說你可以兩個都做甜點(diǎn)一起吃掉第步!但是在計(jì)算機(jī)中用or表示“這一個或者那一個,或者兩個都包含”(或者說至少包含一個)粘都,這樣來看計(jì)算機(jī)比你們的媽媽寬容多了廓推。

牛刀小試

  • 寫一個程序來輸出經(jīng)典歌曲“99 bottles of beer”的歌詞

  • 寫一個聾外婆的程序:不論你對外婆說什么(不論你鍵入什么內(nèi)容)她總會用“HUH?! SPEAK UP, SONNY!”回應(yīng)翩隧,除非你大聲對她說(鍵入的內(nèi)容都大寫);當(dāng)你大聲說外婆能夠聽見你(至少她自己認(rèn)為能聽到)然后回應(yīng)“NO, NOT SINCE 1938!”為了使程序更加可信堆生,每次外婆都會說出不同的年份,可以是1930至1950年中隨機(jī)的一年(這部分是可選的淑仆,如果你在天外有天(4)數(shù)字迷宮中學(xué)了隨機(jī)數(shù)會相對容易解決)涝婉。你只能喊出‘BYE’才能結(jié)束和外婆的對話蔗怠。
    提示1:不要忘了chomp!‘BYE’加上回車與‘BYE’是不同的
    提示2:試著想清楚你的程序應(yīng)該在哪部分開始循環(huán)寞射,這部分應(yīng)該在while循環(huán)中

  • 擴(kuò)展你的聾外婆程序:假如你的外婆不想你離開怎么辦渔工?當(dāng)你喊‘BYE’嚷掠,她可能假裝沒聽見你兄渺。修改一下你的程序使你不得不一次性喊3次。測試你的程序確保如果你喊3次但不是在一行旺韭,你應(yīng)該仍然和你外婆聊著天掏觉。

  • 寫一個閏年程序:這個程序?qū)柲阋粋€開始年份和結(jié)束年份,之后它會輸出之間的閏年(如果開始和結(jié)束年份也是閏年的話履腋,也要輸出來)珊燎。閏年是年份可以被4整除的(比如1984和2004)遵湖,但能夠被100整除的年份不是閏年(比如1800和1900)除非它們能被400整除(比如1600和2000是閏年)。(這里有些許讓人困惑延旧,但是還比不上存在著7月是冬天這樣讓人困惑的事谋国,而這確實(shí)會發(fā)生)

當(dāng)你完成了這些程序迁沫,讓自己放松一下捌蚊!你已經(jīng)學(xué)了許多,祝賀你近弟!你會驚訝于你已經(jīng)可以讓電腦去做如此多的事情了!再學(xué)習(xí)幾個章節(jié)祷愉,你就能夠編出任何程序了窗宦,這是真的二鳄!回顧一下你能夠?qū)懙乃谐绦颍F(xiàn)在你已經(jīng)離不開循環(huán)和分支程序了订讼。

下期我們將了解一種新的對象陣列髓窜,它對于處理其他對象的列表很有幫助欺殿。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市祈餐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌帆阳,老刑警劉巖哺壶,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蜒谤,死亡現(xiàn)場離奇詭異,居然都是意外死亡鳍徽,警方通過查閱死者的電腦和手機(jī)资锰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進(jìn)店門阶祭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人濒募,你說我怎么就攤上這事」逄辏” “怎么了齿诉?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長粤剧。 經(jīng)常有香客問我,道長抵恋,這世上最難降的妖魔是什么焕议? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮懊烤,結(jié)果婚禮上梯醒,老公的妹妹穿的比我還像新娘腌紧。我一直安慰自己茸习,他們只是感情好壁肋,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著浸遗,像睡著了一般猫胁。 火紅的嫁衣襯著肌膚如雪跛锌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天髓帽,我揣著相機(jī)與錄音,去河邊找鬼郑藏。 笑死衡查,一個胖子當(dāng)著我的面吹牛必盖,可吹牛的內(nèi)容都是我干的拌牲。 我是一名探鬼主播歌粥,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼阁吝!你這毒婦竟也來了砚婆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤坷虑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后埂奈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡账磺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了垮抗。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片氏捞。...
    茶點(diǎn)故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡冒版,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出辞嗡,到底是詐尸還是另有隱情捆等,我是刑警寧澤续室,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站挺狰,受9級特大地震影響班缎,放射性物質(zhì)發(fā)生泄漏她渴。R本人自食惡果不足惜达址,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一趁耗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧苛败,春花似錦满葛、人聲如沸罢屈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽锄贷。三九已至,卻和暖如春谊却,著一層夾襖步出監(jiān)牢的瞬間柔昼,已是汗流浹背炎辨。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留碴萧,地道東北人乙嘀。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓破喻,卻偏偏與公主長得像虎谢,于是被迫代替她去往敵國和親低缩。 傳聞我的和親對象是個殘疾皇子曹货,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內(nèi)容