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