iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 3
1
AI & Data

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

Day-3 腦波弱?讓程式協助你判斷 !學會 if-else 條件判斷


Meiko 到百貨公司購物用信用卡結帳消費,Licensed by Adobe Stock

Jason:「上次你媽打電話跟你講信用卡的事...還好嗎?該不會卡刷爆了吧?」

Meiko:「是還沒刷爆拉,哎~你知道我逛街的時候很容易腦波弱,一下就被店員說服給他手刀刷下去,可是買回家之後,常常只穿一次後來都不想穿。程式能幫我判斷該不該買嗎?」

Jason:「沒問題,程式最厲害的就是做判斷。但,我需要知道在你『冷靜』的時候,你買衣服的預算大概多少?」

Meiko:「我『冷靜』的時候,就不會買衣服了啊!」

Jason:「好吧,那我換個方式問,當你想買衣服的時候,大概都落在哪個價位嗎?」

Meiko:「大概 500 元吧,一般 300~500 元的衣服我都沒在看價錢的,想說工作那麼辛苦,下班犒賞一下自己。」

Jason:「Okay,那我大概知道怎麼做了。」

priceConstraint = 500
inputPrice=int(input("請輸入購買金額:"))
if inputPrice>priceConstraint:
	print ("超出預算!請加強腦波! ")
else:
	print ("價位合宜,但你確定要買嗎 ?")

Jason:「來,你輸入一下,看看會發生什麼事?」

Meiko:「輸入購買金額是吧,我想一下...最近一次上網看了一件上衣...好像是 650元的樣子,Okay,我打 650 元,再按 Enter 對吧?...哇!它怎麼那麼聰明,馬上就知道我超出預算,還叫我『加強腦波』,傻眼!」

![]https://dense-insight-blog.s3.ap-northeast-1.amazonaws.com/wordpress/wp-content/uploads/2020/08/31014113/ifelse_price_over_500.png)

Jason:「嘿嘿,因為我在裡面寫了判斷式啊!」

Meiko:「判斷式? Jason 你可不可以講點人話,倒是我在你這段程式碼裡面,我有看懂 input(“請輸入購買金額”),上次你告訴我要輸入的時候,就打input(),然後把想要詢問的字放在裡面。」

Jason:「有慧根唷,你先別急,你有看到最上面有一個 priceConstraint = 500?」

Meiko:「有啊,這行是在做什麼?」

Jason:「你記得前一次有提到變數的設定嗎?」

Meiko:「記得啊,就是你把 input() 設定成 yourName。」

Jason:「沒錯,這邊也一樣的意思,我剛有問你,買衣服大概落在哪個價位?你說:『大概500元,』,所以我設定了一個變數叫做 priceConstraint *,並且讓它等於 500。」

priceConstriant = 500
inputPrice=int(input("請輸入購買金額:")

*及時補充
我大寶寶~拉,有朋友問為什麼變數priceConstraint,price 在前面是小寫,Constraint 在後面要大寫?這其實就是一種撰寫程式的命名習慣,主要是為了增加程式的可讀性和識別性,如果我寫priceconstraint,你會不會覺得很難看懂這個變數是什麼意思?詳細可以參考小駝峰式命名法則)

Meiko:「歐,原來是這樣,然後在 inputPrice下面那邊開始有 if-else 這是什麼意思?」

Jason:「你剛不是說想要讓程式告訴你要不要買衣服嗎? if-else 就是在做這件事,我們看到

if inputPrice > priceConstraint:
	print ("超出預算,請加強腦波!")

這行的意思就是說,『如果inputPrice大於priceConstraint的時候,程式就會印出 “超出預算,請加強腦波”』,再往下看

else:
	print ("價位合宜,但你確定要買嗎?")

這行要表達,『不然inputPrice沒有比priceConstraint大的話,程式就會印出 “價位合宜,但你確定要買嗎?”』」

Meiko:「好像蠻直覺的耶,難怪我剛剛輸入 650 的時候,程式跟我說『超出預算,請加強腦腦波!』,那我試一下,如果我輸入 480 的話,會發生什麼事。」

Meiko:「不錯耶,它告訴我價位合宜,但還問提醒我確定要買嗎?」

Jason:「對啊,我想像你這樣腦波弱的人,所以即使價位低於 500 元,我還是讓程式提醒你一下。」

Meiko,踢了 Jason 一腳:「還好吧?我還是有基本的判斷能力。不過話說回來,如果有這樣的程式在我猶豫不決的時候,能夠給我一些提醒,但,這樣我好像都不能買一樣,讓人很OOXX,Jason 能不能再有一種情況告訴我可以買?滿足我想要買買買的念頭。」

Jason:「也是拉,不然以你這樣愛買的個性,應該會被悶壞吧!我多增加一個變數叫做validPrice,並且設定成 400元,如果你今天買的衣服,價格低於 400 元的話,程式就會印出『可以買!手刀刷下去』」

priceConstraint = 500
validPrice = 400
inputPrice=int(input("請輸入購買金額:"))
if inputPrice>priceConstraint:
	print ("超出預算!請加強腦波! ")
elif (inputPrice>validPrice):
  print ("價位合宜,但你確定要買嗎 ?")
else:
  print ("可以買!手刀刷下去!")
	

Meiko:「那我輸入 290 元看看!」

Meiko:「程式跟我說,『可以買!手刀刷下去!』耶,這還差不多,要省錢還是要顧慮一下生活品質!」

Jason:「哈~沒想到學程式也可以讓你省錢,不錯吧!」

Meiko:「不過你剛說價格低於 400 元的話,可是我在程式上看不到對應的關係耶?」

Jason:「前面在if的地方已經有一個條件是inputPrice>priceConstraint了,所以如果衣服價格大於 500元的話,就會落在第一個if區塊。接著,我們看一下新增加的elif (inputPrice>validPrice),新增的 400 元的條件,意思就是如果今天衣服價比 400元大的話,但小於等於(<=) 500 元小的話,程式就請你考慮一下,最後如果價位小於等於 400元(<=)的話,就會落在程式邏輯的最後一個區塊else,我畫一張示意圖給你看好了!」

Meiko:「歐,原來你的if-elif-else就像是在做價格的分類區間一樣,分成 3 個區域。」

Jason:「沒錯,這樣就能夠同時滿足你購物的慾望,也能夠控制你的消費囉!」

Meiko:「好像是耶!說到提醒,我有在用記帳 App,它每天晚上 10 點會提醒我記帳,可是我就是沒有什麼動力耶?不然你下次跟我講,怎麼用 Python 幫我記帳?」

Jason:「記帳是吧?那你回去找一下過去 2 週的發票,我們再來看怎麼做吧?」

Meiko:「好唷!」

Meiko 在她的記事本中寫下整理發票記錄...

牛刀小試

我大寶寶~拉,你有曾經用過語音服務的經驗嗎?其實語音客服轉接,就是一個 if-else 判斷條件的最佳實用案例,
在網路上我找了幾家大家耳熟能詳的語音客服中華郵政玉山銀行So-net(So-net的圖示做得蠻直覺的,給大家參考!)

使用語音客服最常聽到的字句,大概就是下面這些吧?
「正確請按 1,錯誤請按 0,如不留言請掛斷!」、「掛失及道路救援 請按 * 」、「信用卡服務 請按1」、「存款、貸款、外匯服務 請按2]

給大家一個情境,Meiko 媽要幫 Meiko 查詢她這個月的信用卡帳單(你知道媽媽那輩還是比較喜歡用電話),她要經過哪些步驟才能知道 Meiko 上個月花多少錢?

情境開始

電話那頭:「『IT厚銀行』您好,請選擇您所需樣的服務,信用卡服務請按 1,存款、貸款、外匯服務請按 2,掛失及道路救援請按 3,重複一次,請按 0。」

Meiko 媽:「我要幫 Meiko 查信用卡帳單,應該是按 1 吧!」

電話那頭:「查詢帳單、額度請按 1,卡友貸款、刷卡分期、預借現金請按 2,開卡、辦卡進度卡片換發、變更資料請按 3, 機場接送優惠及預約請按 4,轉接專人服務請按 0。」

Meiko 媽:「我要查詢帳單,按 1」

電話那頭:....核對資料...

Meiko 媽:「齁,還要跟我核對這麼多資料,真麻煩,我重打一次找專人服務好了...」

情境結束

這次你可用前幾次教的print()input(),還有今天談到的if-elif-else判斷式,把上面的情境用程式來表達嗎?

試試看能不能自己寫一個符合這樣的情境的語音客服吧!Let’s go!

給大寶寶留言、分享、鼓勵

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

1.喜歡這樣方式學 Python 的朋友請留言『+1』
2.想要知道解答,請留言『我要解答』,大寶寶再私訊給你唷!


上一篇
Day-2 與程式第一次接觸,學會 input(輸入) 和 print(輸出)
下一篇
Day-4 想省時?讓程式幫你做重複的事情!學會 for- loop 迴圈的概念(上)
系列文
看對話學 Python 資料分析,用情境故事帶你入門30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
PeggyC
iT邦新手 5 級 ‧ 2020-12-16 15:27:26

不好意思,我想要解答, 謝謝!

大寶寶 iT邦新手 5 級 ‧ 2020-12-17 10:10:49 檢舉

您好~請私訊我您的 E-mail,我下週寄解答給您唷!

0
F566
iT邦新手 5 級 ‧ 2021-07-23 14:43:29

您好~我想要解答, 感謝您!^^

我要留言

立即登入留言