1 00:00:00,000 --> 00:00:04,000 可惜的是,我們還不能高興得太早 2 00:00:04,000 --> 00:00:07,000 Sebastian 告訴我,還需要幾年時間 3 00:00:07,000 --> 00:00:11,000 我才能擁有一輛自己的自動駕駛車, 但更大的問題是,我們還沒談到 4 00:00:11,000 --> 00:00:13,000 如何實際地使用程序 5 00:00:13,000 --> 00:00:17,000 我們所做的一切只是定義程序, 在我們能夠實際地使用它們之前 6 00:00:17,000 --> 00:00:19,000 我們還不能高興得太早 7 00:00:19,000 --> 00:00:22,000 下面我們將學習如何使用它們,之後我們就能重展笑顏 8 00:00:22,000 --> 00:00:25,000 現在我們將要學習如何使用程序 9 00:00:25,000 --> 00:00:32,000 要使用程序,我們需要程序名稱 10 00:00:32,000 --> 00:00:36,000 後面加上左括弧,再跟著一系列的輸入 11 00:00:36,000 --> 00:00:40,000 輸入的數目可以是任何數字,但是它必須 12 00:00:40,000 --> 00:00:42,000 與程序所預期的輸入個數相同 13 00:00:42,000 --> 00:00:44,000 這些輸入有時被稱為 "運算元" (operand) 14 00:00:44,000 --> 00:00:46,000 有時被稱為參數 (argument) 15 00:00:46,000 --> 00:00:48,000 我們不在這上面多作討論 16 00:00:48,000 --> 00:00:50,000 我們就稱它們為輸入 (input) 17 00:00:50,000 --> 00:00:52,000 其實你已經做過一些類似的事情 18 00:00:52,000 --> 00:00:57,000 在第一單元中,你學到如何對字串使用 find 19 00:00:57,000 --> 00:00:59,000 透過 find,你能夠傳入一個或兩個輸入 20 00:00:59,000 --> 00:01:01,000 第一個輸入是個字串 21 00:01:01,000 --> 00:01:04,000 那是你要尋找的字串,那是第一個輸入 22 00:01:04,000 --> 00:01:07,000 第二個輸入是個數字 23 00:01:07,000 --> 00:01:09,000 也就是你從何處開始尋找那個字串 24 00:01:09,000 --> 00:01:13,000 在第一單元,我們以不同的方法使用 find 25 00:01:13,000 --> 00:01:15,000 在第一單元的家庭作業中,你也使用過 26 00:01:15,000 --> 00:01:17,000 find 與你自己定義的程序有點不同 27 00:01:17,000 --> 00:01:19,000 首先,它是內建的 (built-in) 28 00:01:19,000 --> 00:01:22,000 另外一個不同點是,除了 find 之外 29 00:01:22,000 --> 00:01:25,000 還有另外一個輸入,在這個位置 30 00:01:25,000 --> 00:01:31,000 我們使用 find 功能時,還有這個字串 31 00:01:31,000 --> 00:01:34,000 我們稱為變數 page,實際上那是 find 的另一個輸入 32 00:01:34,000 --> 00:01:38,000 之後的課程,我們會談到為什麼有這些差別 33 00:01:38,000 --> 00:01:41,000 但這與呼叫程序很相似,一個輸入在那裡 34 00:01:41,000 --> 00:01:43,000 另外兩個在這裡 35 00:01:43,000 --> 00:01:46,000 兩者稍有不同,我們在這裡並不深入地討論它 36 00:01:46,000 --> 00:01:50,000 但在之後的課程中,你會學到其真正的意義 37 00:01:50,000 --> 00:01:55,000 對於所有你自己定義的程序 38 00:01:55,000 --> 00:01:56,000 我們不會以物件 (object) 的方式呼叫它們 39 00:01:56,000 --> 00:02:00,000 我們只要呼叫程序,並且傳入 40 00:02:00,000 --> 00:02:03,000 參數、運算元或者輸入 (隨你如何稱呼) 41 00:02:03,000 --> 00:02:06,000 讓我們用一個簡單的程序,來看它如何運作 42 00:02:06,000 --> 00:02:10,000 我要定義程序 rest-of-string 43 00:02:10,000 --> 00:02:13,000 給它一個參數 s,也就是說, 此程序需要一個輸入 44 00:02:13,000 --> 00:02:16,000 我們用名稱 s 指向輸入的值 45 00:02:16,000 --> 00:02:21,000 我們會傳回字串,從第一個字元到最後一個字元 46 00:02:21,000 --> 00:02:25,000 我們會用字串的指標運算子 (index operator) 傳回 s[1:] 47 00:02:25,000 --> 00:02:31,000 字串被除去第一個字母 48 00:02:31,000 --> 00:02:33,000 所以,得到從位置 1 一直到結尾的字串 49 00:02:33,000 --> 00:02:35,000 這就是傳回的結果 50 00:02:35,000 --> 00:02:39,000 所以 rest-of-string 的輸出是個新字串 51 00:02:39,000 --> 00:02:42,000 從輸入的字串的第二個字母開始 52 00:02:42,000 --> 00:02:45,000 這裡有個例子,顯示如何使用這個程序 53 00:02:45,000 --> 00:02:47,000 我們可以直接呼叫它 54 00:02:47,000 --> 00:02:51,000 我們可以寫 print rest-of-string 55 00:02:51,000 --> 00:02:53,000 這就是我們的程序 56 00:02:53,000 --> 00:02:56,000 我們使用括弧,並傳入一個輸入 57 00:02:56,000 --> 00:02:59,000 rest-of-string 有一個參數 58 00:02:59,000 --> 00:03:02,000 所以我們需要傳入一個輸入,而且它應該是個字串 59 00:03:02,000 --> 00:03:05,000 我們傳入字串 'audacity' 60 00:03:05,000 --> 00:03:07,813 當我們呼叫這樣一個程序時 61 00:03:07,813 --> 00:03:10,000 執行會跳進到程序的主體 62 00:03:10,000 --> 00:03:10,566 我們可以想想解譯器正在做什麼 63 00:03:10,566 --> 00:03:17,000 它不會執行這裡的程式,解譯器會移開 64 00:03:17,000 --> 00:03:21,000 當我們呼叫程序時,解譯器跳到程序內部執行程式碼 65 00:03:21,000 --> 00:03:26,000 它把我們傳入的輸入值,指定給參數 66 00:03:26,000 --> 00:03:30,000 我們可以把它視為一個指定 (assignment) 67 00:03:30,000 --> 00:03:31,974 現在的 s 值,就是我們所傳入的輸入值 68 00:03:31,974 --> 00:03:36,000 現在,我們要執行程序的主體 69 00:03:36,000 --> 00:03:39,000 在這裡,只有一個陳述,就是 return 陳述 70 00:03:39,000 --> 00:03:43,000 我們會找到這個值,也就是 s[1:] 71 00:03:43,000 --> 00:03:47,000 得出的結果將是字串 'udacity' 72 00:03:47,000 --> 00:03:49,000 接著我們執行到 return 73 00:03:49,000 --> 00:03:51,000 return 的意思是 "跳回" 74 00:03:51,000 --> 00:03:56,000 跳回到我們呼叫程序的地方 75 00:03:56,000 --> 00:03:58,000 現在,我們已經有了結果 76 00:03:58,000 --> 00:04:03,000 當我們跳回時,得到的值 77 00:04:03,000 --> 00:04:04,000 是我們所傳回的值 78 00:04:04,000 --> 00:04:07,000 在這裡,就是字串 'udacity' 79 00:04:07,050 --> 00:04:08,556 雖然我們沒有自動駕駛車 80 00:04:08,556 --> 00:04:10,867 但是,你現在能夠定義並使用程序了 81 00:04:10,867 --> 00:04:12,745 這是一個非常具有威力的觀念 82 00:04:12,902 --> 00:04:14,993 我們在今後課程中所要做的任何事 83 00:04:14,993 --> 00:04:18,529 以及任何人在寫電腦程式中所做的事情 84 00:04:18,529 --> 00:04:20,697 幾乎都是關於定義程序,和使用程序 85 00:04:20,697 --> 00:04:22,778 現在我們應該有一個燦爛的笑容 86 00:04:22,778 --> 00:04:26,777 我們可以把程序當作從輸入映射到輸出 87 00:04:26,777 --> 00:04:30,396 我們也可以把人類當作從輸入映射到輸出 88 00:04:30,396 --> 00:04:33,065 我們透過眼睛和嘴巴來輸入 89 00:04:33,065 --> 00:04:35,689 甚至還有鼻子 90 00:04:35,689 --> 00:04:39,081 我不想畫出任何人類程序的輸出 91 00:04:39,081 --> 00:04:41,495 但既然程序是如此重要的一個概念 92 00:04:41,495 --> 00:04:44,495 那麼我們現在來做幾個測驗,檢測你是否已經理解