《用程式設計師的方式思考》 [ 位置:監獄 ] [ 第一集:逃獄 ] 從深度睡眠中甦醒過來之後, 艾希克得到了三個不幸的「驚喜」。 第一:監獄牢房。 第二:完全失憶。 第三:一個神祕陌生的東西想要 擠過她的窗戶鐵條之間卻卡住了。 他叫海吉, 來協助艾希克拯救世界。 但首先他們得要逃獄。 海吉把他的手變成開鎖工具, 並說明了他們要面臨的挑戰。 獄中的每個鎖都用了 同一種不尋常的設計。 在鑰匙孔中有一個紅色轉盤, 可以轉到一百個刻度的其中之一, 編號一到一百。 每一間牢房的鑰匙能將 鎖的轉盤轉到正確的位置, 轉盤的位置對了就會變成綠色, 接著門就會被解鎖。 從守衛身上偷鑰匙是不可能的, 但海吉有個更好的點子。 海吉能執行艾希克的指令。 如果艾希克要他向前走五步、 向右轉、再前進五步, 他就會完全照做。 不過海吉需要明確的指示。 如果艾希克說「把鎖打開」 或「嘗試所有組合」, 那就太模糊了, 但說「把轉盤向前轉五格」 就是可行的。 離開牢房之後, 他們只有一點時間 破解外面監獄大門的鎖, 太慢就會被守衛逮到。 所以,什麼樣的指示能讓海吉 有效率地打開任何一扇門? 請在這裡暫停,自己思考片刻。 在解答之前,先提供一個提示。 有一種寫程式的關鍵概念, 能夠協助將門解鎖, 那就是迴圈。 也就是說,海吉能將一個或數個指示 迭代或重覆執行一定的次數, 比如「上下跳一百次」。 或者海吉不斷重覆某個指示, 直到某個條件被滿足為止, 比如「持續上下跳, 直到七點為止」。 如果你想自己嘗試,請在此暫停。 第一件事很明確, 就是要找出一種方法, 讓海吉去嘗試所有組合, 直到試出能開鎖的那一組。 比較要花心力的, 是要如何做到這件事。 一種解決方案是讓海吉 去依序嘗試所有組合。 嘗試 1,然後檢查 轉盤燈號的顏色。 如果燈號變綠色,就打開門, 如果沒有變綠色,就嘗試 2。 如果不行,再嘗試 3, 一直嘗試到 100。 但這整個過程會非常冗長。 為什麼要寫超過一百行的程式, 如果只要用三行程式 就能做到同樣的事? 這就是迴圈出場的時候了。 有幾種方法可以應用迴圈。 鎖有一百個刻度, 所以,艾希克可以說: 「檢查轉盤的顏色,接著 將轉盤再向前轉一個刻度, 重覆一百次。 記住轉盤變成綠色時的數字, 讓海吉最後將它設回那個數字。」 像這樣指明重覆次數的迴圈, 稱為「for」迴圈。 但還有更有效率的迴圈, 就是要海吉將轉盤一次轉 一個刻度,直到它變成綠色, 一旦變成綠色, 就要他停止並將門打開。 這麼一來,如果在 試到 1 時門就解鎖了, 他就不用把其他數字都嘗試完。 這是「until」迴圈, 因為它的重點在於持續 執行一個動作,直到條件滿足。 還有一個類似的替代方法:只要 轉盤還是紅色,就持續轉動它, 否則停止。 叫做「while」迴圈。 回到原本的冒險。 海吉重覆嘗試不同組合, 在 41 時,牢房打開了。 艾希克和海吉等到 守衛繞行的完美空檔時機, 逃出牢房。 艾希克馬上就面臨了一個選擇: 躲在神秘的水晶當中, 或嘗試破解外面的大門,逃出去。 艾希克選擇逃出去。 第二扇門讓海吉花了更多時間, 一直嘗試到 93 才解鎖。 但他把門打開了。 海吉用這個機會,解釋 他為什麼要解救艾希克。 世界陷入混亂: 機器人主宰世界,只有 艾希克能恢復秩序。 為了要重建秩序, 他們必須收集三件強大的物品, 這些物品在各地被用在 窮兇極惡的用途上。 收集到手之後,艾希克 才能返回世界機器——巨型水晶, 去逆轉未來。 艾希克逃離了監獄…… 她又將面臨怎樣的困境呢?