使用模組,就像站在巨人的肩膀上看得更遠!Licensed by Adobe Stock
Meiko 坐在車站旁的書店用餐區,手上拿著一杯珍珠奶茶,隨意翻了桌上的雜誌書籍。
Meiko:「Jason,你平常都怎麼練習寫程式的啊?」
Jason:「就多看多學囉,而且現在網路上還有很多免費的資源,然後最棒的事還有 stackoverflow ,基本上大多數的問題,應該都可以找得到答案。就怕你不學,要學的話,可是學不完的,因為每天都有新的東西產生。」
Meiko:「是呀,之前才看到一篇文章,在講軟體正在吃掉世界,(原文)真有這麼厲害?」
Jason:「這是一直在發生的事情呀,軟體世界有個特色就是邊際效益等於 0 ,所以只要你寫好一個軟體,其他人就可以重複使用,或著繼好像站在巨人的肩膀上,設計出更多更好用的軟體。」
Meiko:「邊際效應,是什麼意思?」
Jason:「你可以把它想成重複使用但是不需要再花額外的人力。」
Meiko:「還是有點抽象耶,你可以舉個例子給我看嗎?」
Jason:「簡單講以前在大學的時候,總是會有幾個學霸的同學吧?他們的課堂筆記常常會被其他同學廣為瘋傳,你覺得為什麼?」
Meiko:「因為他們寫得很好啊,所以我們就看著他們的筆記就好,自己就不用再寫一次了!歐,這樣好像懂了,所以邊際效應就是那種,只要做一次就可以讓很多人重複使用的意思?」
Jason:「蠻類似的,像在程式裡面重複使用的做法通常會使用模組 module ,模組就是別人已經寫好的程式,供其他人使用。至於怎麼使用模組?我先賣個關子,你有玩過猜數字的遊戲嗎?1~100 隨意猜出一個數字。」
Meiko:「有呀,可是我通常都要猜好幾次才會猜對。」
Jason :「那我們就來寫一個猜數字的程式,你就會用到模組了!首先,我們先用可以讓電腦決定 1~100 個一個數字。我們可以用一個模組叫做random
,它字面上的意思是『隨機的』,所以說我們就利用random
這模組就是用來幫我們產生隨機數字。」
import random
print (random.randint(1,100))
Jason:「你看,我們先import
模組random
,接著我們印出random.randint(1,100)
。在過程中,我們使用random
模組中的randint
函式,它可以在範圍內隨機抽出一個整數。是哪個範圍?就是我們後面看到的 (1,100),意思是就在 1~100 之間,程式就隨機產生了一個數字 31。」
Meiko:「這樣你就不用再花時間寫一個產生隨機數字的函數?」
Jason:「 沒錯,這樣我們就可專注在開發一個猜數字的遊戲!」
Meiko:「但是,我覺得每次都要寫random.randint(1,100)
這樣好長唷,覺得蠻麻煩的。」
Jason:「的確,所以我這邊有一個簡寫的方式可以跟你說,像這樣
import random as rm
print (rm.randint(1,100))
你看,我們現在在import random
後面,多了一個as
,然後再用rm
這個縮寫,代替了原本 random 這個 module
,所以之後,如果我們想要用到random
這個module
,我們接下來都可以用rm
這個代稱做代表。」
Meiko:「如果我只用到randint()
這個功能,可以只把它叫進來就好了嗎?就好像我只要喝牛奶,去便利商店買就好,不用養一頭牛。」
Jason:「沒錯,在程式的世界裡面也是這樣,有些好用的模組,它背後可能會有很多程式所組成,如果一次把整組叫進來,可能會程式運行的效能降低。比較好的方法是像這樣
from random import randint
print (randint(1,100))
from random
的意思,就是是我們去random
這個模組中將randint
這個函式導入,而不是全部的random
模組,這樣我們就不用在使用程式的時候,還去用 random.
這樣的做法,直接用randint
就可以了!
Meiko:「哇,這樣方便多了麻,不然我還要去記得用 “.” 的功能,以前有一句名言『科技始終來自於人性』,我倒覺得『科技始終來自於懶人』,懶人總是會想出更多輕鬆簡單的方法!
」
Meiko:「對了,Jason 你不是說要寫一個猜數字的程式嗎?不會只有印出一個隨機數字就可以了吧?」
Jason:「當然囉,要寫一小段程式就是,要猜數字的話,你覺得需要哪些功能?」
Meiko:「你意思是電腦會自己隨機產生一個數字?」
Jason:「是的,比如說我們可以先用上面提到的randint
先產生一個 1~100的數字,然後,程式再請你輸入一個數字。」
Meiko:「Okay,假設我輸入一個數字 86 好了,那程式要怎麼知道是否正確?」
Jason:「你記得if-else
判斷式嗎?」
Meiko:「對耶,所以可直接用if-else
做判斷,讓我想想...如果電腦隨機產生的數字跟我輸入數字的一樣,應該會寫在if
的判斷裡面,如果不一樣就放在else
這樣想對嗎?」
Jason:「已經蠻接近了,我幫你整理一下,邏輯的部分應該像下面這 3 點
computerSelect
yourInput
if-else
判斷式,如果computerSelect == your input
代表程式隨機產生的數字,跟你輸入的數字是一樣的,那就印出『你猜對了』,反之,你猜錯了,告訴你程式選的數字,和你輸入的數字。from random import randint
computerSelect=randint(1,100)
yourInput=int(input("請輸入一個 1~100 的任意數字"))
if computerSelect==yourInput:
print ("你猜對了!")
else:
print ("你猜錯了,程式選的數字是 %s, 你輸入的數字是 %s"%(computerSelect,yourInput))
Meiko:「真的耶,我輸入了 86 這個數字,程式就幫我做判斷了!」
Jason:「那我們來看答案是...」
Meiko:「什麼!!電腦選出來的數字是 71,我答錯了,QQ!」
Jason:「哈哈,你可以多玩幾次啊,看看有沒有猜對的機會,我是覺得蠻難的拉,畢竟只有一次的機會。」
Meiko:「也是,沒關係拉,我想今天的重點也不是在猜對數字,又不是樂透開獎!不過我至少知道說,以後要用其他的模組可以用 import 來使用,而且你還跟我講了 2 個小秘訣,可以用as
或是用from
的方式直接引入想要的模組。原來『站在巨人肩膀上』的感覺,就是這樣。」
Jason:「寫程式很好玩吧?....哈!」
我大寶寶~拉,今天繼續介紹函式module
的用法,有沒有發現我們在寫猜數的練習時非常容易?因為我們引入了random
這個module
,所以我們就不用再費心力去設想要怎麼才能產生隨機的數字,專心的撰寫猜數字程式就好,
這也是現實程式世界中,為什麼進步這麼快的原因,因為你可以根據前人撰寫的程式碼,去寫出自己想要的應用!
大寶寶這邊給大家一個練習,如果猜數字的遊戲多 2 個元素,說不定就可以讓玩家繼續玩下去...
有想到是什麼了嗎?
第一個大寶寶想到的就是使用for-loop
,多讓玩家猜幾次,比如說你設定猜 5 次,讓玩家可以重複的猜。第二個有可能的做法,就是當玩家猜一次之後,你可以告訴他是猜大了、還是猜小了,多玩幾次,玩家就有可能猜對唷,這道題目就留給大家練習了!
歡迎登入留言跟我分享你的想法唷!(登入不麻煩,點一下 FB 登入就可以留言了!)
1.喜歡這樣方式學 Python 的朋友請留言『+1』
2.如果前面的內容忘記了,趕快看一下大寶寶這一系列的看對話學 Python 資料分析,用情境故事帶你入門的列表!就能夠繼續 Happy Coding 囉!