iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 17
0
AI & Data

看對話學 Python 資料分析,用情境故事帶你入門系列 第 17

Day-17 模組 module,除了自己努力外,也要站在巨人肩膀上

  • 分享至 

  • xImage
  •  


使用模組,就像站在巨人的肩膀上看得更遠!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 點

  1. 程式隨機產生數字,我們把它設成computerSelect
  2. 程式請你輸入一個數字,我們把它設定成yourInput
  3. 接著用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 囉!


上一篇
Day-16 函式 function,就好像建造積木一樣(下)
下一篇
Day-18 錯誤與例外處理,寫程式不用怕出錯(上)
系列文
看對話學 Python 資料分析,用情境故事帶你入門30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
green520701
iT邦新手 5 級 ‧ 2021-01-19 11:21:41

哈囉不好意思我想知道解答~

我要留言

立即登入留言