輸入與輸出
tags: python
Format output
我們已經知道如何使用變數來紀錄數值,但如果要印出一句易於閱讀的結果,會需要很多步驟:
numberSoldOfCoke = 10
print("可樂賣了:", end='')
print(numberSoldOfCoke, end='')
print("罐")
# output: 可樂賣了:10罐我們可以利用「格式化輸出」將這三行程式碼變成一行:
numberSoldOfCoke = 10
print("可樂賣了:%d罐" % (numberSoldOfCoke))
# output: 可樂賣了:10罐%d代表的是「這個地方要替換成整數」的意思,而後面 % (numberSoldOfCoke)則是要替換成的東西。
繼續延伸這個例子:
numberSoldOfCoke = 10
itemName = "可樂"
print("%s賣了:%d罐" % (itemName, numberSoldOfCoke))
# output: 可樂賣了:10罐剛剛說%d代表整數,而現在多了一個%s代表字串。
後面的% (itemName, numberSoldOfCoke)代表依照順序替換成變數 itemName 、numberSoldOfCoke。
Format Specifier
| 符號 | 意義 |
|---|---|
| %s | 字串 |
| %d | 整數 |
| %f | 浮點數(小數) |
- 若在%跟英文中間加上整數,代表至少幾個字元的意思。預設靠右對齊,負整數則會靠左對齊。 例如:
%5d代表輸出這個整數時,補齊至少五個字元。 - 若在浮點數
%f加上小數點.,則代表保留小數幾位。 例如:%.2f代表輸出該小數時,保留小數點後兩位。
Other ways
除了上述這個做法外,還有其他方法:
a = 123
print(f"a = {a:4d}")
# output: a = 123
print("a = {}".format(a))
# output: a = 123input()
當我們需要跟程式互動的時候,會想要讓使用者輸入東西,然後程式再根據使用者的輸入,做出相對應的輸出。這時候我們可以使用input()這個函數。
a = input("please input an integer: ")如此,當程式執行到這邊的時候,就會停下來,並且出現「please input an integer: 」然後等待使用者輸入。
a = input("please input an integer: ")
# 輸入8989339
print(a)
# output: '8989339'
print(a-3)
# Traceback (most recent call last):
# File "<stdin>", line 1, in <module>
# TypeError: unsupported operand type(s) for -: 'str' and 'int'這個地方會注意到一件事,我們明明輸入的是「整數」但輸出卻出現了引號,引號的出現代表它是一個「字串」。
因此當我們做數字的運算的時候,會出現錯誤!讓我們讀一下錯誤訊息:
TypeError: unsupported operand type(s) for -: 'str' and 'int'
代表它是一個型別錯誤(TypeError),他說'str'(字串)跟'int'(整數)不能做-減法的運算!
為什麼會這樣呢?Python將input()接收到的任何東西都當作字串,然後再讓程式設計者自行去決定怎麼處理它。
因此我們若要把它當作數字來處理,就要先進行型別的轉換!
這裡介紹兩個方法:
轉型別
pythona = '3' print(type(a)) # output: <class 'str'> int(a) print(type(a)) # output: <class 'int'>這邊我們做的事情就是利用
int()這個函數,強制將括號內的東西變成整數。但要注意的是,若變數a本身內容不是整數,那麼可能就會出錯!試試看令a是一個字串,然後轉型別看看吧!
eval()pythona = '3' eval(a) print(type(a)) # output: <class 'int'>eval()是一個好用的函數,可以直接理解成「將引號脫掉」。因此這邊若將第一行的a的引號脫掉,自然剩下3,是個整數。這裡比轉型別好用在哪呢?若是原本輸入是一個浮點數(小數),而妳強制更改型別成整數的話,那麼小數部分就會被捨去,而身為程式設計者的你可能渾然不知。但若用
eval(),python可以自然而然幫你判斷成浮點數。
Exercise 猜生日魔術
- 請一個人輸入自己的生日的月份,然後乘以4,等於A。
- 再加9,等於B。
- 再乘以25,等於C。
- 最後,再加上自己生日的日期,等於D。
- 然後,讓她把最後得出的數字D大聲的念出來。
此時,你偷偷把數字減掉225,就會是她的生日了!
Wrapping up
你現在可以讓使用者輸入東西、或是自己宣告變數並且賦值,可以做基本的運算,可以印出東西。
Little Project
來做一個【自我介紹生成器】吧!
- 找一個(或自己打一個)自我介紹模板
- 把關鍵詞變成變數
- 讓使用者在執行時輸入這些變數
- 除了直接輸入外,也可以有一些小變化,例如,輸入出生年,輸出年紀;輸入身高體重,輸出BMI。
- 可以將自我介紹變成其他東西,例如作文生成器等等。
Advance
補充
1. .split()
當你需要單行設定多個變數時,可以用.split(),會把輸入的字串,根據( )內的值分割( 其預設為 ' '空格 ),並依順序賦值於變數。
a,b = input().split(',')
#輸入:1,2
print(f"a={a}")
print(f"b={b}")
#輸出1 2而當你輸入多個數值進入 list 時,只要在外面再套一層list(),就可以根據.split()的設定分割值,把輸入的字串分割,並放入串列內。
list123 = list(input().split())
#輸入 1 2 3 4 5
print(list123)
#輸出 ['1', '2', '3', '4', '5']