iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 4
2
AI & Data

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

Day-4 想省時?讓程式幫你做重複的事情!學會 for- loop 迴圈的概念(上)

  • 分享至 

  • xImage
  •  


上面的鴨子,有著重複的模式,這篇就來跟大家談談當你遇到重複的事情,可以用什麼方法來寫程式? Licensed by Adobe Stock

Jason:「Meiko 上次請你回家整理一下這兩週的發票,這次有帶來嗎?」

Meiko:「有唷,其實我後來都下載 APP 載具幫我做記錄了拉,看了一下我的消費,如果不買衣服的話,每天的花費大概就是吃飯、還有買化妝品、另外就是每個月的電話費、水電瓦斯、哩哩摳摳其實加起來也是不少耶!。」

Jason:「那你看一下你的記帳 APP,看一下過去 7 天每天的消費是多少?」

Meiko:「我看一下,205、350、520,因為那天去了糠似渼買了比較多日用品,然後240、330、180、2000。」

Jason:「2000,你真的是好野人耶!好,我把你剛告訴我的消費裝在一個叫做串列 (list) 的資料結構裡面。像這樣。」

spendList=[205,350,520,240,330,180,2000]

Meio:「什麼是資料結構?」

Jason:「就是一種可以讓你把資料排好的方式啊,你現在可以先不知道沒關係,概念上就是我把你過去 7 天的消費,存在一個地方。」

Meiko:「原來是醬。說到消費記錄和發票,以前每個月,我都要對發票實在很蠻煩(心裏OS:想說中個 200 元也開心,不無小補一週的早餐就有著落)。現在設定好 APP 載具,有沒有中獎看 App 就知道。誒,Jason,像對發票這種工作,也能夠用你教我的 Python 寫程式嗎?」

Jason:「當然可以囉,就像你現在買東西,都會把你的手機拿出來,請結帳人員幫你把發票存載具,這就是一種輸入資料的行為,就像我剛才把你的消費記錄裝串列(list)一樣。等到你要對獎的時候,APP 會去國稅局把中獎的號碼找到,然後再把你過去一個月以來消費的紀錄進行比對,就可以知道你有沒有中獎囉!」

Meiko:「哇,聽起來這個方便的功能背後,好像做了蠻多事情的,我有辦法做到嗎?」

Jason:「沒問題,對發票其實就是一種重複的工作,不過我們可以先從簡單的開始,如果我問你,請你把 7 天的消費都印出來,你現在會怎麼做?」

Meiko:「印出來?我記得你之前有跟我講print()可以印東西出來,那應該是這樣」

print (205)
print (350)
print (520)
print (240)
print (330)
print (180)
print (2000)


Meiko:「誒,怎麼這麼麻煩呀,有沒有快一點的方式?」

Jason:「對啊,你看你就在做重複的事情,我來幫你想個辦法,像這樣」

spendList=[205,350,520,240,330,180,2000]
for i in spendList:
	print (i)

Meiko:「哇,你只打3行就做完了耶!但是我不太懂 for 這行代表什麼意思?」

for i in spendList:
	print (i)

Jason:「我正要跟你解釋!在這段程式碼中的 i 就是代表一個在 spendList 裡面的變數,就像小學生排隊報數一樣,程式利用for-loop迴圈把spendList這個串列之中儲存的資料,一個一個用print()印出來。」

Meiko:「好像有點理解!不過你直接印這些數字出來沒什麼感覺,你能不能印出星期一到星期日,我每天花了多少錢?」

Jason:「Okay,請你唸星期一到星期日,每一天都唸出來?」

「Jason 你是程式寫太多?星期一到星期日,不就星期一、星期二、星期三、星期四、星期五、星期六、星期日?」Meiko 雖然抱持懷疑的心理,但還是念了出來。

Jason:「答對了,你看你一個個的念出來,如果用數字來表示的話,應該會是 1、2、3、4、5、6、7?」

Meiko:「對啊,然後咧?」

Jason:「我們剛剛不是提到 for-loop,如果我們想用數字來表示的話,可以用list來呈現。」

dayList=[1,2,3,4,5,6,7]

如果我們不想要怎麼麻煩,其實 Python 程式裡面,也已經有一個預先寫好的函式給我們用了,叫做range()range()你看英文字面上的意思是『範圍』,所以它會有幾個條件限制分別是初始值、終止值、遞增(減)值 」

Jason 繼續說:「像下面這樣的形式,
range(初始值(可不填,預設為 0 ), 終止值, 遞增(減)值(可不填,預設為 1 ))

Meiko:「看不懂,一下太多東西了拉,Jason!」

Jason:「歐,那我舉幾個可能型的例子好了,最簡單的話,我們可以只設定終止值,初始值和最後一個遞增(減)值我們不設定,就會只有像這樣range(7)

for i in range(7):
	print (i)

Meiko:「誒,我沒告訴它初始值從哪個數字開始,它就自動從 0 開始計算,一直算到 6,總共 7 個數字耶。」

Jason:「答對了,跟你講這個是因為當你開始寫程式的時候,要開始習慣從 0 開始計算的特性,還有這種整數序列蠻重要的,幾乎在所有的地方都用得到。」

Jason:「另外,比較常見的寫法,我們會寫初始值和終止值,像這樣range(1,7)

for i in range(1,7):
	print (i)

Meiko:「喂,Jason,程式怎麼只有印出來1~6,你不是說要像 dayList 一樣,要印出 1~7 嗎?」

Jason:「嘿嘿,我就是想測試看看你有沒有睡著呀!你有發現range(1,7)其時最後只印出到6 嗎?」

Meiko:「所以這個range(1,7)的意思,就是從 1 開始,印到 6 的意思嗎?」

Jason:「沒錯!我剛不是提到終止值? range(初始值,終止值,遞增(減)值)這個函式就會印到終止值的前一個值。」

Meiko:「那我要印 1~7 的話,終止值應該要設成 8 囉?所以要改成range(1,8)對吧?」

for i in range(1,8):
	print (i)

Meiko:「這樣才對麻,那我知道了,像range()這樣的用法,就會算到終止值的前一個!」

Jason:「還有最後一種 case ,同時有初始值、終止值,以及遞增值,且遞增的值不是1的樣子,range(1,7,2)

for i in range(1,7,2):
	print (i)

Meiko:「誒,真的耶,它一次跳 2的方式增加,依序出現 1、3、5,但是因為它最多只能出現到 6,所以就不能印出 7 來,是這樣的意思嗎?」

Jason:「不錯唷,看來你現在知道這個for-looprange要怎麼使用了!但我還沒講完唷...」

牛刀小試

我大寶寶~拉,今天還沒把所有的for-loop內容講完,所以不急著出練習給大家,不過可以請你思考for-loop是否還有其他的應用?掌握 2 個要點:

  • 重複性
  • 可以用數字有次序的表達(有初始值即終止值,可以依序遞增或遞減)
    想一下,日常生活中,曾經做過什麼事情,是有這樣特性的?

歡迎登入留言跟我分享你的成果唷!(登入不麻煩,點一下 FB 登入就可以留言了!)

1.喜歡這樣方式學 Python 的朋友請留言『+1』
2.今天沒有解答~星期天就輕鬆點囉!


上一篇
Day-3 腦波弱?讓程式協助你判斷 !學會 if-else 條件判斷
下一篇
Day-5 想省時?讓程式幫你做重複的事情!學會 for- loop 迴圈的概念(下)
系列文
看對話學 Python 資料分析,用情境故事帶你入門30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1

嗨嗨~ 用情境帶大家學習程式很不錯哦,
可以讓教學生活化,
留言鼓勵一下

大寶寶 iT邦新手 5 級 ‧ 2020-09-13 10:35:20 檢舉

感謝心原一馬大大,您的鼓勵,是大寶寶繼續前進的動力!

我要留言

立即登入留言