0:00:00.000,0:00:04.000 可惜的是,我們還不能高興得太早 0:00:04.000,0:00:07.000 Sebastian 告訴我,還需要幾年時間 0:00:07.000,0:00:11.000 我才能擁有一輛自己的自動駕駛車,[br]但更大的問題是,我們還沒談到 0:00:11.000,0:00:13.000 如何實際地使用程序 0:00:13.000,0:00:17.000 我們所做的一切只是定義程序,[br]在我們能夠實際地使用它們之前 0:00:17.000,0:00:19.000 我們還不能高興得太早 0:00:19.000,0:00:22.000 下面我們將學習如何使用它們,之後我們就能重展笑顏 0:00:22.000,0:00:25.000 現在我們將要學習如何使用程序 0:00:25.000,0:00:32.000 要使用程序,我們需要程序名稱 0:00:32.000,0:00:36.000 後面加上左括弧,再跟著一系列的輸入 0:00:36.000,0:00:40.000 輸入的數目可以是任何數字,但是它必須 0:00:40.000,0:00:42.000 與程序所預期的輸入個數相同 0:00:42.000,0:00:44.000 這些輸入有時被稱為 "運算元" (operand) 0:00:44.000,0:00:46.000 有時被稱為參數 (argument) 0:00:46.000,0:00:48.000 我們不在這上面多作討論 0:00:48.000,0:00:50.000 我們就稱它們為輸入 (input) 0:00:50.000,0:00:52.000 其實你已經做過一些類似的事情 0:00:52.000,0:00:57.000 在第一單元中,你學到如何對字串使用 find 0:00:57.000,0:00:59.000 透過 find,你能夠傳入一個或兩個輸入 0:00:59.000,0:01:01.000 第一個輸入是個字串 0:01:01.000,0:01:04.000 那是你要尋找的字串,那是第一個輸入 0:01:04.000,0:01:07.000 第二個輸入是個數字 0:01:07.000,0:01:09.000 也就是你從何處開始尋找那個字串 0:01:09.000,0:01:13.000 在第一單元,我們以不同的方法使用 find 0:01:13.000,0:01:15.000 在第一單元的家庭作業中,你也使用過 0:01:15.000,0:01:17.000 find 與你自己定義的程序有點不同 0:01:17.000,0:01:19.000 首先,它是內建的 (built-in) 0:01:19.000,0:01:22.000 另外一個不同點是,除了 find 之外 0:01:22.000,0:01:25.000 還有另外一個輸入,在這個位置 0:01:25.000,0:01:31.000 我們使用 find 功能時,還有這個字串 0:01:31.000,0:01:34.000 我們稱為變數 page,實際上那是 find 的另一個輸入 0:01:34.000,0:01:38.000 之後的課程,我們會談到為什麼有這些差別 0:01:38.000,0:01:41.000 但這與呼叫程序很相似,一個輸入在那裡 0:01:41.000,0:01:43.000 另外兩個在這裡 0:01:43.000,0:01:46.000 兩者稍有不同,我們在這裡並不深入地討論它 0:01:46.000,0:01:50.000 但在之後的課程中,你會學到其真正的意義 0:01:50.000,0:01:55.000 對於所有你自己定義的程序 0:01:55.000,0:01:56.000 我們不會以物件 (object) 的方式呼叫它們 0:01:56.000,0:02:00.000 我們只要呼叫程序,並且傳入 0:02:00.000,0:02:03.000 參數、運算元或者輸入 (隨你如何稱呼) 0:02:03.000,0:02:06.000 讓我們用一個簡單的程序,來看它如何運作 0:02:06.000,0:02:10.000 我要定義程序 rest-of-string 0:02:10.000,0:02:13.000 給它一個參數 s,也就是說,[br]此程序需要一個輸入 0:02:13.000,0:02:16.000 我們用名稱 s 指向輸入的值 0:02:16.000,0:02:21.000 我們會傳回字串,從第一個字元到最後一個字元 0:02:21.000,0:02:25.000 我們會用字串的指標運算子 (index operator) 傳回 s[1:] 0:02:25.000,0:02:31.000 字串被除去第一個字母 0:02:31.000,0:02:33.000 所以,得到從位置 1 一直到結尾的字串 0:02:33.000,0:02:35.000 這就是傳回的結果 0:02:35.000,0:02:39.000 所以 rest-of-string 的輸出是個新字串 0:02:39.000,0:02:42.000 從輸入的字串的第二個字母開始 0:02:42.000,0:02:45.000 這裡有個例子,顯示如何使用這個程序 0:02:45.000,0:02:47.000 我們可以直接呼叫它 0:02:47.000,0:02:51.000 我們可以寫 print rest-of-string 0:02:51.000,0:02:53.000 這就是我們的程序 0:02:53.000,0:02:56.000 我們使用括弧,並傳入一個輸入 0:02:56.000,0:02:59.000 rest-of-string 有一個參數 0:02:59.000,0:03:02.000 所以我們需要傳入一個輸入,而且它應該是個字串 0:03:02.000,0:03:05.000 我們傳入字串 'audacity' 0:03:05.000,0:03:07.813 當我們呼叫這樣一個程序時 0:03:07.813,0:03:10.000 執行會跳進到程序的主體 0:03:10.000,0:03:10.566 我們可以想想解譯器正在做什麼 0:03:10.566,0:03:17.000 它不會執行這裡的程式,解譯器會移開 0:03:17.000,0:03:21.000 當我們呼叫程序時,解譯器跳到程序內部執行程式碼 0:03:21.000,0:03:26.000 它把我們傳入的輸入值,指定給參數 0:03:26.000,0:03:30.000 我們可以把它視為一個指定 (assignment) 0:03:30.000,0:03:31.974 現在的 s 值,就是我們所傳入的輸入值 0:03:31.974,0:03:36.000 現在,我們要執行程序的主體 0:03:36.000,0:03:39.000 在這裡,只有一個陳述,就是 return 陳述 0:03:39.000,0:03:43.000 我們會找到這個值,也就是 s[1:] 0:03:43.000,0:03:47.000 得出的結果將是字串 'udacity' 0:03:47.000,0:03:49.000 接著我們執行到 return 0:03:49.000,0:03:51.000 return 的意思是 "跳回" 0:03:51.000,0:03:56.000 跳回到我們呼叫程序的地方 0:03:56.000,0:03:58.000 現在,我們已經有了結果 0:03:58.000,0:04:03.000 當我們跳回時,得到的值 0:04:03.000,0:04:04.000 是我們所傳回的值 0:04:04.000,0:04:07.000 在這裡,就是字串 'udacity' 0:04:07.050,0:04:08.556 雖然我們沒有自動駕駛車 0:04:08.556,0:04:10.867 但是,你現在能夠定義並使用程序了 0:04:10.867,0:04:12.745 這是一個非常具有威力的觀念 0:04:12.902,0:04:14.993 我們在今後課程中所要做的任何事 0:04:14.993,0:04:18.529 以及任何人在寫電腦程式中所做的事情 0:04:18.529,0:04:20.697 幾乎都是關於定義程序,和使用程序 0:04:20.697,0:04:22.778 現在我們應該有一個燦爛的笑容 0:04:22.778,0:04:26.777 我們可以把程序當作從輸入映射到輸出 0:04:26.777,0:04:30.396 我們也可以把人類當作從輸入映射到輸出 0:04:30.396,0:04:33.065 我們透過眼睛和嘴巴來輸入 0:04:33.065,0:04:35.689 甚至還有鼻子 0:04:35.689,0:04:39.081 我不想畫出任何人類程序的輸出 0:04:39.081,0:04:41.495 但既然程序是如此重要的一個概念 0:04:41.495,0:04:44.495 那麼我們現在來做幾個測驗,檢測你是否已經理解