Skip to content

輸入與輸出

tags: python

Format output

我們已經知道如何使用變數來紀錄數值,但如果要印出一句易於閱讀的結果,會需要很多步驟:

python
numberSoldOfCoke = 10
print("可樂賣了:", end='')
print(numberSoldOfCoke, end='')
print("罐")
# output: 可樂賣了:10罐

我們可以利用「格式化輸出」將這三行程式碼變成一行:

python
numberSoldOfCoke = 10
print("可樂賣了:%d罐" % (numberSoldOfCoke))
# output: 可樂賣了:10罐

%d代表的是「這個地方要替換成整數」的意思,而後面 % (numberSoldOfCoke)則是要替換成的東西。

繼續延伸這個例子:

python
numberSoldOfCoke = 10
itemName = "可樂"
print("%s賣了:%d罐" % (itemName, numberSoldOfCoke))
# output: 可樂賣了:10罐

剛剛說%d代表整數,而現在多了一個%s代表字串。

後面的% (itemName, numberSoldOfCoke)代表依照順序替換成變數 itemNamenumberSoldOfCoke

Format Specifier

符號意義
%s字串
%d整數
%f浮點數(小數)
  • 若在%跟英文中間加上整數,代表至少幾個字元的意思。預設靠右對齊,負整數則會靠左對齊。 例如:%5d代表輸出這個整數時,補齊至少五個字元。
  • 若在浮點數%f加上小數點.,則代表保留小數幾位。 例如:%.2f代表輸出該小數時,保留小數點後兩位。

Other ways

除了上述這個做法外,還有其他方法:

python
a = 123
print(f"a = {a:4d}")
# output: a =  123
print("a = {}".format(a))
# output: a = 123

input()

當我們需要跟程式互動的時候,會想要讓使用者輸入東西,然後程式再根據使用者的輸入,做出相對應的輸出。這時候我們可以使用input()這個函數。

python
a = input("please input an integer: ")

如此,當程式執行到這邊的時候,就會停下來,並且出現「please input an integer: 」然後等待使用者輸入。

python
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()接收到的任何東西都當作字串,然後再讓程式設計者自行去決定怎麼處理它。

因此我們若要把它當作數字來處理,就要先進行型別的轉換!

這裡介紹兩個方法:

  1. 轉型別

    python
    a = '3'
    print(type(a))
    # output: <class 'str'>
    int(a)
    print(type(a))
    # output: <class 'int'>

    這邊我們做的事情就是利用int()這個函數,強制將括號內的東西變成整數。

    但要注意的是,若變數a本身內容不是整數,那麼可能就會出錯!試試看令a是一個字串,然後轉型別看看吧!

  2. eval()

    python
    a = '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(),會把輸入的字串,根據( )內的值分割( 其預設為 ' '空格 ),並依順序賦值於變數。

python
a,b = input().split(',')
#輸入:1,2
print(f"a={a}")
print(f"b={b}")
#輸出1 2

而當你輸入多個數值進入 list 時,只要在外面再套一層list(),就可以根據.split()的設定分割值,把輸入的字串分割,並放入串列內。

python
list123 = list(input().split())
#輸入 1 2 3 4 5
print(list123)
#輸出 ['1', '2', '3', '4', '5']