iT邦幫忙

5

【Python 超入門】(9) input()函數- 使用者跟電腦對話的方法

大家好,我是「心原一馬」,內心原來一心喜歡打程式碼。
早在這系列的第一篇中,
我們就介紹過print()函數,可以讓電腦把結果印出來。
那有沒有讓使用者輸入資訊給電腦的方法呢?
答案是有的,在python中使用input函數讀進使用者輸入的字串。
先看範例:

範例1: 請問您的芳名?

#程式一
yourName = input()
print("Nice to meet you, " + yourName)

這支程式希望讀入使用者輸入的名字,
程式會跟使用者打招呼。

我們試著執行這支程式看看:
(本馬的環境是使用anaconda的spyder,
對環境還不是很了解的朋友,
可以參考我的【Python 超入門】(2) 心原一馬從零開始帶你認識spyder開發環境)

https://ithelp.ithome.com.tw/upload/images/20190705/20117114JJVSCIq5cJ.jpg

按下編繹按鈕後,發現什麼都沒印出來,這是為什麼呢?
因為使用input()函數,程式會等待使用者輸入一行文字,
我們可以直接在Ipython視窗中打字:
(例如,本馬輸入「可愛的小馬」)

https://ithelp.ithome.com.tw/upload/images/20190705/20117114heBdKwageS.jpg

然後按下鍵盤上的「Enter」鍵。
這時就可以看到程式印出Nice to meet you, 可愛的小馬囉~

https://ithelp.ithome.com.tw/upload/images/20190705/201171140Vc3XCjP1P.jpg

範例2: 判斷7的倍數

再看一個簡單的例子:
我們希望讓使用者輸入一個數字,
判斷它是不是7的倍數。

試著寫程式如下:

#程式二
num = input()
if num % 7 ==0:
    print("你輸入的數是7的倍數")
else:
    print("你輸入的數不是7的倍數")

程式會編繹成功,
但是當本馬嘗試在Ipython介面中輸入 15,
程式卻出現了錯誤訊息,如下:

https://ithelp.ithome.com.tw/upload/images/20190705/20117114yB6XHJ82EW.jpg

這又是為什麼呢?
因為input()函數默認使用者輸入的是一個「字串」,
%是一種數學運算(計算除法的餘數),
原則上「字串」是不能做數學運算的。
那怎麼解決呢?
我們只要在程式的第二行改成 num = int(input())
int是interger(整數)的縮寫,
它可以把使用者輸入的數字字串轉換成可以做數學運算的整數,
修改後的程式如下:

#程式二
num = int(input())
if num % 7 ==0:
    print("你輸入的數是7的倍數")
else:
    print("你輸入的數不是7的倍數")

此時可以正常計算出「15不是7的倍數了」,如下:

https://ithelp.ithome.com.tw/upload/images/20190705/20117114r6Gx4fgLrM.jpg

在真實世界的應用?

通常新手學到input()函數會有個問題,
倒也不是說看不懂input()的用法,
但就是有種說不出來的怪,
覺得說「為什麼要用input」,
既然要輸入的話,
為什麼不乾脆在「程式碼」裡面輸入就好?
例如:

#程式一
print("Nice to meet you, " + yourName)

#程式二
num = 15
if num % 7 ==0:
    print("你輸入的數是7的倍數")
else:
    print("你輸入的數不是7的倍數")

原因是input是使用者跟電腦講話的方式啊。
而且在平時大家上網時,讓使用者輸入資訊的例子隨處可見。
例如現代幾乎每個人都有email吧?
你在登入email的時候,
會有個欄位讓你輸入帳號密碼,
然後才呈現你的信箱資訊給你。

又或者,你玩線上遊戲幫角色取名字,
填google表單,線上問卷,…等等,
都算是讓使用者輸入資訊,再讓程式去做後續處理的例子。

input("提示使用者輸入的內容")

既然是讓使用者輸入,
通常我們會需要一個提示字串,
提示使用者要輸入的內容,
我們可以再input()函數內輸入字串,
ipython視窗會印出那個字串來提示使用者要輸入什麼內容。
例如,我們可以這樣改寫範例1:

改良的範例1

#改良的程式一
yourName = input("請輸入您的大名")
print("很高興見到你, " + yourName)

這時再執行範例1,可以看到ipython視窗中多了一行字:

https://ithelp.ithome.com.tw/upload/images/20190705/20117114zbxQIfdXFp.jpg

這樣一來,使用者對於要輸入什麼資訊便會清楚很多。
如果你想用python寫一支小遊戲給你的朋友玩,
那麼這個功能會非常實用。
本馬再輸入一次可愛的小馬做為測試:
https://ithelp.ithome.com.tw/upload/images/20190705/20117114gcugkIwzMB.jpg

但是可以看到目前請輸入您的大名可愛的小馬這兩串字黏在一起了,
這樣不甚美觀,我們可以在請輸入您的大名後加入冒號和空格:

再改良的範例1

#改良的程式一
yourName = input("請輸入您的大名: ")
print("很高興見到你," + yourName)

測試結果:
https://ithelp.ithome.com.tw/upload/images/20190705/20117114lNXW9kg1PG.jpg

改良的範例2

同樣地,我們可以類似的改寫範例2:

#改良的程式二
num = int(input("請輸入一個數字,程式會判斷它是否為7的倍數: "))
if num % 7 ==0:
    print("你輸入的數是7的倍數")
else:
    print("你輸入的數不是7的倍數")

測試結果:
https://ithelp.ithome.com.tw/upload/images/20190705/201171140MZQGigAZ3.jpg

應用: 運用while和input()達到重複輸入測試數據的效果

有時候,你希望不斷手動輸入數據來測試自己的程式,
但是一直修改程式碼是一件很麻煩的事情,
這時,便可以用while迴圈來讓自己方便重複輸入,
例如我們把範例二加上while True 迴圈:

while True:
   num = int(input("請輸入一個數字,程式會判斷它是否為7的倍數: "))
   if num % 7 ==0:
       print("你輸入的數是7的倍數")
   else:
       print("你輸入的數不是7的倍數")

但是注意while True 是一個無窮迴圈,
我們在【Python 超入門】(8)break/continue邏輯這篇有介紹過,可以搭配使用break語法來跳出迴圈。(否則你的程式會一直執行~)
因此我們加入一個判斷式: 當使用者輸入-1時,使程式結束。

while True:
   num = int(input("請輸入一個數字,程式會判斷它是否為7的倍數: "))
   if num == -1:
       print("Bye~")
       break
   if num % 7 ==0:
       print("你輸入的數是7的倍數")
   else:
       print("你輸入的數不是7的倍數")

本馬以不同數字測試結果:

https://ithelp.ithome.com.tw/upload/images/20190705/201171146LXa0ob3yl.jpg

輸入-1時,程式順利結束。

【Python 超入門】系列就快進入尾聲啦~

今天沒有課後練習,來做個結尾預告。
學到【Python 超入門】(9)了,在為還無法寫出夠炫的程式苦惱嗎?
心原一馬預計在教程的最後一堂課,帶大家利用input()功能,
結合各章節內容靈活運用,
寫出一支你能夠拿去秀給你朋友玩的小遊戲,
敬請期待悠~
也再次感謝眾多網友的支持,使小馬的文章成為本站的熱門文章。
能使新手們感到收穫滿滿,是本馬持續創作的動力呢~

若您對於教學有任何疑問或想法的話,歡迎留下你的回饋哦。


1 則留言

0
跑得快
iT邦新手 3 級 ‧ 2019-07-05 17:57:37

頭香,感謝小馬老師!
內容明瞭循序漸進
期待後續發文

好的,謝謝你的回饋哦~ 很高興能讓讀者感覺【Python 超入門】整個系列讀起來有由淺入深的效果,敬祝學習愉快哦~

我要留言

立即登入留言