[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:00.00,0:00:04.00,Default,,0000,0000,0000,,可惜的是,我們還不能高興得太早 Dialogue: 0,0:00:04.00,0:00:07.00,Default,,0000,0000,0000,,Sebastian 告訴我,還需要幾年時間 Dialogue: 0,0:00:07.00,0:00:11.00,Default,,0000,0000,0000,,我才能擁有一輛自己的自動駕駛車,\N但更大的問題是,我們還沒談到 Dialogue: 0,0:00:11.00,0:00:13.00,Default,,0000,0000,0000,,如何實際地使用程序 Dialogue: 0,0:00:13.00,0:00:17.00,Default,,0000,0000,0000,,我們所做的一切只是定義程序,\N在我們能夠實際地使用它們之前 Dialogue: 0,0:00:17.00,0:00:19.00,Default,,0000,0000,0000,,我們還不能高興得太早 Dialogue: 0,0:00:19.00,0:00:22.00,Default,,0000,0000,0000,,下面我們將學習如何使用它們,之後我們就能重展笑顏 Dialogue: 0,0:00:22.00,0:00:25.00,Default,,0000,0000,0000,,現在我們將要學習如何使用程序 Dialogue: 0,0:00:25.00,0:00:32.00,Default,,0000,0000,0000,,要使用程序,我們需要程序名稱 Dialogue: 0,0:00:32.00,0:00:36.00,Default,,0000,0000,0000,,後面加上左括弧,再跟著一系列的輸入 Dialogue: 0,0:00:36.00,0:00:40.00,Default,,0000,0000,0000,,輸入的數目可以是任何數字,但是它必須 Dialogue: 0,0:00:40.00,0:00:42.00,Default,,0000,0000,0000,,與程序所預期的輸入個數相同 Dialogue: 0,0:00:42.00,0:00:44.00,Default,,0000,0000,0000,,這些輸入有時被稱為 "運算元" (operand) Dialogue: 0,0:00:44.00,0:00:46.00,Default,,0000,0000,0000,,有時被稱為參數 (argument) Dialogue: 0,0:00:46.00,0:00:48.00,Default,,0000,0000,0000,,我們不在這上面多作討論 Dialogue: 0,0:00:48.00,0:00:50.00,Default,,0000,0000,0000,,我們就稱它們為輸入 (input) Dialogue: 0,0:00:50.00,0:00:52.00,Default,,0000,0000,0000,,其實你已經做過一些類似的事情 Dialogue: 0,0:00:52.00,0:00:57.00,Default,,0000,0000,0000,,在第一單元中,你學到如何對字串使用 find Dialogue: 0,0:00:57.00,0:00:59.00,Default,,0000,0000,0000,,透過 find,你能夠傳入一個或兩個輸入 Dialogue: 0,0:00:59.00,0:01:01.00,Default,,0000,0000,0000,,第一個輸入是個字串 Dialogue: 0,0:01:01.00,0:01:04.00,Default,,0000,0000,0000,,那是你要尋找的字串,那是第一個輸入 Dialogue: 0,0:01:04.00,0:01:07.00,Default,,0000,0000,0000,,第二個輸入是個數字 Dialogue: 0,0:01:07.00,0:01:09.00,Default,,0000,0000,0000,,也就是你從何處開始尋找那個字串 Dialogue: 0,0:01:09.00,0:01:13.00,Default,,0000,0000,0000,,在第一單元,我們以不同的方法使用 find Dialogue: 0,0:01:13.00,0:01:15.00,Default,,0000,0000,0000,,在第一單元的家庭作業中,你也使用過 Dialogue: 0,0:01:15.00,0:01:17.00,Default,,0000,0000,0000,,find 與你自己定義的程序有點不同 Dialogue: 0,0:01:17.00,0:01:19.00,Default,,0000,0000,0000,,首先,它是內建的 (built-in) Dialogue: 0,0:01:19.00,0:01:22.00,Default,,0000,0000,0000,,另外一個不同點是,除了 find 之外 Dialogue: 0,0:01:22.00,0:01:25.00,Default,,0000,0000,0000,,還有另外一個輸入,在這個位置 Dialogue: 0,0:01:25.00,0:01:31.00,Default,,0000,0000,0000,,我們使用 find 功能時,還有這個字串 Dialogue: 0,0:01:31.00,0:01:34.00,Default,,0000,0000,0000,,我們稱為變數 page,實際上那是 find 的另一個輸入 Dialogue: 0,0:01:34.00,0:01:38.00,Default,,0000,0000,0000,,之後的課程,我們會談到為什麼有這些差別 Dialogue: 0,0:01:38.00,0:01:41.00,Default,,0000,0000,0000,,但這與呼叫程序很相似,一個輸入在那裡 Dialogue: 0,0:01:41.00,0:01:43.00,Default,,0000,0000,0000,,另外兩個在這裡 Dialogue: 0,0:01:43.00,0:01:46.00,Default,,0000,0000,0000,,兩者稍有不同,我們在這裡並不深入地討論它 Dialogue: 0,0:01:46.00,0:01:50.00,Default,,0000,0000,0000,,但在之後的課程中,你會學到其真正的意義 Dialogue: 0,0:01:50.00,0:01:55.00,Default,,0000,0000,0000,,對於所有你自己定義的程序 Dialogue: 0,0:01:55.00,0:01:56.00,Default,,0000,0000,0000,,我們不會以物件 (object) 的方式呼叫它們 Dialogue: 0,0:01:56.00,0:02:00.00,Default,,0000,0000,0000,,我們只要呼叫程序,並且傳入 Dialogue: 0,0:02:00.00,0:02:03.00,Default,,0000,0000,0000,,參數、運算元或者輸入 (隨你如何稱呼) Dialogue: 0,0:02:03.00,0:02:06.00,Default,,0000,0000,0000,,讓我們用一個簡單的程序,來看它如何運作 Dialogue: 0,0:02:06.00,0:02:10.00,Default,,0000,0000,0000,,我要定義程序 rest-of-string Dialogue: 0,0:02:10.00,0:02:13.00,Default,,0000,0000,0000,,給它一個參數 s,也就是說,\N此程序需要一個輸入 Dialogue: 0,0:02:13.00,0:02:16.00,Default,,0000,0000,0000,,我們用名稱 s 指向輸入的值 Dialogue: 0,0:02:16.00,0:02:21.00,Default,,0000,0000,0000,,我們會傳回字串,從第一個字元到最後一個字元 Dialogue: 0,0:02:21.00,0:02:25.00,Default,,0000,0000,0000,,我們會用字串的指標運算子 (index operator) 傳回 s[1:] Dialogue: 0,0:02:25.00,0:02:31.00,Default,,0000,0000,0000,,字串被除去第一個字母 Dialogue: 0,0:02:31.00,0:02:33.00,Default,,0000,0000,0000,,所以,得到從位置 1 一直到結尾的字串 Dialogue: 0,0:02:33.00,0:02:35.00,Default,,0000,0000,0000,,這就是傳回的結果 Dialogue: 0,0:02:35.00,0:02:39.00,Default,,0000,0000,0000,,所以 rest-of-string 的輸出是個新字串 Dialogue: 0,0:02:39.00,0:02:42.00,Default,,0000,0000,0000,,從輸入的字串的第二個字母開始 Dialogue: 0,0:02:42.00,0:02:45.00,Default,,0000,0000,0000,,這裡有個例子,顯示如何使用這個程序 Dialogue: 0,0:02:45.00,0:02:47.00,Default,,0000,0000,0000,,我們可以直接呼叫它 Dialogue: 0,0:02:47.00,0:02:51.00,Default,,0000,0000,0000,,我們可以寫 print rest-of-string Dialogue: 0,0:02:51.00,0:02:53.00,Default,,0000,0000,0000,,這就是我們的程序 Dialogue: 0,0:02:53.00,0:02:56.00,Default,,0000,0000,0000,,我們使用括弧,並傳入一個輸入 Dialogue: 0,0:02:56.00,0:02:59.00,Default,,0000,0000,0000,,rest-of-string 有一個參數 Dialogue: 0,0:02:59.00,0:03:02.00,Default,,0000,0000,0000,,所以我們需要傳入一個輸入,而且它應該是個字串 Dialogue: 0,0:03:02.00,0:03:05.00,Default,,0000,0000,0000,,我們傳入字串 'audacity' Dialogue: 0,0:03:05.00,0:03:07.81,Default,,0000,0000,0000,,當我們呼叫這樣一個程序時 Dialogue: 0,0:03:07.81,0:03:10.00,Default,,0000,0000,0000,,執行會跳進到程序的主體 Dialogue: 0,0:03:10.00,0:03:10.57,Default,,0000,0000,0000,,我們可以想想解譯器正在做什麼 Dialogue: 0,0:03:10.57,0:03:17.00,Default,,0000,0000,0000,,它不會執行這裡的程式,解譯器會移開 Dialogue: 0,0:03:17.00,0:03:21.00,Default,,0000,0000,0000,,當我們呼叫程序時,解譯器跳到程序內部執行程式碼 Dialogue: 0,0:03:21.00,0:03:26.00,Default,,0000,0000,0000,,它把我們傳入的輸入值,指定給參數 Dialogue: 0,0:03:26.00,0:03:30.00,Default,,0000,0000,0000,,我們可以把它視為一個指定 (assignment) Dialogue: 0,0:03:30.00,0:03:31.97,Default,,0000,0000,0000,,現在的 s 值,就是我們所傳入的輸入值 Dialogue: 0,0:03:31.97,0:03:36.00,Default,,0000,0000,0000,,現在,我們要執行程序的主體 Dialogue: 0,0:03:36.00,0:03:39.00,Default,,0000,0000,0000,,在這裡,只有一個陳述,就是 return 陳述 Dialogue: 0,0:03:39.00,0:03:43.00,Default,,0000,0000,0000,,我們會找到這個值,也就是 s[1:] Dialogue: 0,0:03:43.00,0:03:47.00,Default,,0000,0000,0000,,得出的結果將是字串 'udacity' Dialogue: 0,0:03:47.00,0:03:49.00,Default,,0000,0000,0000,,接著我們執行到 return Dialogue: 0,0:03:49.00,0:03:51.00,Default,,0000,0000,0000,,return 的意思是 "跳回" Dialogue: 0,0:03:51.00,0:03:56.00,Default,,0000,0000,0000,,跳回到我們呼叫程序的地方 Dialogue: 0,0:03:56.00,0:03:58.00,Default,,0000,0000,0000,,現在,我們已經有了結果 Dialogue: 0,0:03:58.00,0:04:03.00,Default,,0000,0000,0000,,當我們跳回時,得到的值 Dialogue: 0,0:04:03.00,0:04:04.00,Default,,0000,0000,0000,,是我們所傳回的值 Dialogue: 0,0:04:04.00,0:04:07.00,Default,,0000,0000,0000,,在這裡,就是字串 'udacity' Dialogue: 0,0:04:07.05,0:04:08.56,Default,,0000,0000,0000,,雖然我們沒有自動駕駛車 Dialogue: 0,0:04:08.56,0:04:10.87,Default,,0000,0000,0000,,但是,你現在能夠定義並使用程序了 Dialogue: 0,0:04:10.87,0:04:12.74,Default,,0000,0000,0000,,這是一個非常具有威力的觀念 Dialogue: 0,0:04:12.90,0:04:14.99,Default,,0000,0000,0000,,我們在今後課程中所要做的任何事 Dialogue: 0,0:04:14.99,0:04:18.53,Default,,0000,0000,0000,,以及任何人在寫電腦程式中所做的事情 Dialogue: 0,0:04:18.53,0:04:20.70,Default,,0000,0000,0000,,幾乎都是關於定義程序,和使用程序 Dialogue: 0,0:04:20.70,0:04:22.78,Default,,0000,0000,0000,,現在我們應該有一個燦爛的笑容 Dialogue: 0,0:04:22.78,0:04:26.78,Default,,0000,0000,0000,,我們可以把程序當作從輸入映射到輸出 Dialogue: 0,0:04:26.78,0:04:30.40,Default,,0000,0000,0000,,我們也可以把人類當作從輸入映射到輸出 Dialogue: 0,0:04:30.40,0:04:33.06,Default,,0000,0000,0000,,我們透過眼睛和嘴巴來輸入 Dialogue: 0,0:04:33.06,0:04:35.69,Default,,0000,0000,0000,,甚至還有鼻子 Dialogue: 0,0:04:35.69,0:04:39.08,Default,,0000,0000,0000,,我不想畫出任何人類程序的輸出 Dialogue: 0,0:04:39.08,0:04:41.50,Default,,0000,0000,0000,,但既然程序是如此重要的一個概念 Dialogue: 0,0:04:41.50,0:04:44.50,Default,,0000,0000,0000,,那麼我們現在來做幾個測驗,檢測你是否已經理解