2019年8月4日 星期日

手把手學Python - 最基礎的輸出(print)

這次除了 IDLE 整合式的環境之外, 我們也要開始使用檔案的方式, 真的去寫可以重複使用的程式。如果你忘了, 請再回去看看之前的文章。

這次, 我們要來學最基礎的輸出函式 --- print()。我們先在 IDLE 裡試著執行下列的指令

指令意義結果
print(123)印出數字 123123
print("123")印出字串 "123"123
print(123, 456)印出數字 123 與 456123 456
print("123", 456)印出字串 123 與數字 456123 456
print("123", "456")印出字串 123 與 456123 456



觀察上面的範例, 我們會發現兩件事
  1. 字串和數字在 print 印出來時, 結果是相同的
  2. 兩個不同的字串或數字, 可以利用逗號(,) 分隔
當然, 我們也可以利用變數一起處理, 我們試試下列的指令

name = "dunst"
print("My name is ", name)

上面兩行指令, 第一行指令

name = "dunst"

功能是把 "dunst" 這個字串指給 name 這個變數。而第二行指令

print("My name is ", name)

則是分別印出字串 "My name is " 以及 name 這個變數的值(字串 "dunst")。所以你會看到的結果是

My name is  dunst


有一個小地方可以注意的是 "is" 和 "dunst" 兩個字中間隔了兩個空白, 第二個空白是逗號造成的, 所以如果你想要讓空白變成只有一個, 你有兩個方法可以做到。
  1. 把 "My name is " 改成 "My name is", 這樣字後面的空格就不見了。
  2. 把指令 print("My name is ", name) 改成 print("My name is " + name), 這樣就會讓兩個字串結合成一個字串。


如果上半段, 你沒有問題, 那麼, 我們就來看看下半段。

還記得你寫的第一支程式 test1.py 嗎?

a = input("Please input your name : ")
print("Hello,", a)

和上一篇的手把手學Python - 最基礎的輸入(input) 一起看, 你應該就能很輕鬆的解讀這支程式吧。



執行這支程式(python test1.py)後, 第一行的

a = input("Please input your name : ") 

會給你一個提示號 "Please input your name : ", 然後就停在那裡等待輸入。當輸入 dunst 後, 就把 "dunst" 這個字串指定給 a 這個變數。所以當執行到第二行

print("Hello,", a)

就會看到結果

Hello, dunst

如果這個程式你能看得懂, 那麼, 請試著寫一支新的程式, 分別輸入兩個整數 a 和 b, 然後, 把兩個數字相加之後印出來。在往下看之前, 先想想, 你會怎麼寫。不過, 有件事要提醒你, 你要輸入 a 時, 別忘了 input() 給你的是字串, 所以你要利用 int() 這個函數把它轉成整數。

a = int(input("Please input a = "))

如果你還是想不出來, 或者你已經寫完了, 不妨就看看下面這個範例(test2.py)

a = int(input("Please input a = "))
b = int(input("Please input b = "))
c = a + b
print(a, "+", b, "=", c)

當然, 這樣子的結果就很容易看到了



當然, 這支程式的解法不唯一, 我們來看看兩個不一樣的寫法。

a = int(input("Please input a = "))
b = int(input("Please input b = "))
print(a, "+", b, "=", a + b)

像這樣的寫法, 我們除了可以少一個變數 c 的使用, 也可以少一行指令。所以隨著我們學的程式愈來愈複雜, 就會有愈多不同的寫法。

還記得我們在前面手把手學Python - 最簡單的資料型別 整數(int) 與 字串(str)的問題(四捨五入法), 我給的答案是

(a + 0.5) * 10 // 10

這樣子就能把 a 四捨五入到整數。如果你沒有問題, 請試著寫一支程式, 輸入 a 和 b 兩個整數, 然後輸出 a / b 之後, 四捨五入到小數下第二位。

2019年7月29日 星期一

手把手學Python - 最基礎的輸入(input)

這次的內容裡, 我們會同時用到 IDLE 來學習並驗證學習的成果。如果你忘了怎麼做, 不妨看看這篇 手把手學Python - 第一支小程式

首先請先到 IDLE 裡, 輸入以下的指令

a = input("Please input a = ")

在執行後, 你會看到畫面就停在

Please input a =

這時候, 其實就是在等你輸入資料, 在這裡, 我們先輸入 123, 等到提示號(>>>)出現後, 再輸入 a。你就會看到

'123'

這就表示, 你剛才輸入的 123 已經被放入 a 這個變數裡, 而且, 這個 123 是一個"字串"。

我們來解釋一下剛才輸入的這行指令吧。

a = input("Please input a = ")

"Please input a = " 是提示句, 也就是當你輸入 input() 時, python 會等待使用者從鍵盤輸入資料, 並且按 Enter 鍵後, 把資料指定給 a 這個變數。但是, 如果只是 input() 的話, 電腦會讓使用者不知所措, 因為停在那裡什麼都沒有。所以我們要利用括號裡的那句 "Please input a = " 來提醒使用者輸入資料, 甚至要告訴他們, 輸入什麼樣的資料。

在你了解 input() 的功能之後, 有件事要請你特別注意, input() 傳給 a 的資料型別是字串, 這件事很重要, 所以當你想要使用者輸入數字時, 就要請你利用 int() 這個指令, 把 a 的值轉成整數。如果你忘了, 請得再去看看"手把手學Python - 最簡單的資料型別 整數(int) 與 字串(str)這篇文章。

當然, 如果你想要一開始就讓 a 是一個"數字", 那麼, 你也可以利用下面這個指令

a = int(input("Please input a = "))

這樣一來, input() 傳回的值會先變成整數, 再傳給 a


你會發現, a 的 123 是數字, 而不再是字串(也就是 123 沒有被單引號(')夾住), 所以對我們來說

a = input("Please input a = ")
a = int(a)

這兩行, 和下面這行

a = int(input("Please input a = "))

所造成的結果是完全一樣的。


了解了簡單的輸入函數(input()), 在下一篇, 我們來聊聊簡單的輸出函數(print())

2019年7月23日 星期二

手把手學Python - 最簡單的資料型別 整數(int) 與 字串(str)

好了, 環境建置完畢, 接下來, 我們就開始朝程式設計的路前進吧。

這篇文章裡, 我們應該會利用 IDLE 來實作, 如果你忘了, 就先去看看這篇文章(手把手學Python - 第一支小程式)


程式設計的過程中, 其實對於各種資料不斷"加工", 讓它們成為我們期待的數學模型。這也就是為什麼不少人都會說, 學好數學對於學程式是很重要的事。在寫程式的過程中, 所有的資料都要有各自的型別。對於電腦來說, 整數、小數、字母、字串都是不相同的"東西"。所以操作起來也都會不同。

舉個簡單的例子來說,

  • 整數的 12 + 34 你會得到 46
  • 字串的 "12" + "34" 你會得到 "1234"

你可以自行嚐試看看, 就會發現明明都是 12 和 34 用 "+" 這個運算子結合, 得到的結果卻不一樣。所以對我們來說, 要寫程式就要先了解各種不同的資料結構對電腦來說, 會如何被操作。然而, 若是要像傳統的教學裡, 把所有的資料型別都介紹完, 應該會有不少人會打退堂鼓, 所以我們就先從最簡單而且常用的兩種資料型別來學起。
  • 整數
    整數(integer), 在不少程式語言裡都被簡化成 int。它其實就是我們在日常生活裡用的整數, 包含了正整數(1, 2, 3, ...)、0 以及負整數(-1, -2, -3, ...)。在比較低階的語言(例如 C 語言)裡, 當你作了像 3/2 這樣的操作, 卻沒放到對的型別裡(浮點運算 floating point), 程式就會幫你無條件捨去後, 再變成整數。但是在 Python 裡, 它會自行幫你轉換型別, 這也是 Python 對於初學者比較友善的地方。
  • 字串
    字串(string), 被簡化為 str。也就是我們日常在用的句子, 除了英文外, 在 Python 裡也可以輸入中文。但中文的編碼有 Big5 和 UTF-8 的不同, 所以個人建議, 初學的時候, 請儘量用英文吧。在 Python 裡, 要表示一個字串, 我們會以成對的單引號, 或是雙引號表示。如 "This is a book"、'This is a book'。
    比較特別的, 是當你的字串裡會出現單引號(')或是雙引號(")時, 你可以用下列的方法表示。
    'This\'s a book'
    "This's a book"
    "I say \"yes\""
    'I say "yes"'


    也就是說, 你可以利用單雙引號的交替使用, 或者在字中裡的單引號前加上反斜線(\)來表示
在 Python 中, 整數常用到的運算表列如下

運算子意義運算結果
+加法4 + 26
-減法4 - 22
*乘法4 * 28
/除法4 / 22 (註1)
**指數運算(註2)4 ** 216
//整數除法的商數17 // 53
%整數除法的餘數17 % 52
註1:除法如果得到的結果不是整數, 結果會自動轉換成浮點運算(也就是小數)。
註2:在 Python 和一般習慣不同, 它的指數運算是 ** 而非常用的 ^, 它的 ^ 被用在位元(二進位)運算的加法, 這是特別要注意的地方。

這些請在 IDLE 裡, 自己試試看, 你會更了解這些整數的運算。其實, 就因為在 Python 裡, 整數的除法如果出現小數, 就會自動轉成浮點運算, 所以在官方的文件裡, 就沒有特別提到整數這種資料型別, 而是把整數和小數合併為數(Number)。

而字串的運算, 其實要到後面, 我們提到串列(List), 才會有比較詳細的介紹, 在這裡, 你大概只需要學到兩種就可以了。

  1. 加法(+)

    "123" + "234" = "123234"

    在 Python 裡, 字串的加法也就是字串的合併。
  2. 乘法(*)

    "123" * 3 = "123123123"

    當你把一個字串乘以一個正整數 n 時, 會把同一個字串複製  n 次。如果你後面乘的不是正整數而是負整數, 其實你自己可以試試看。
最後提兩個很重要的函數
  1. int()
    當你把一個字串 "1234" 放到函數 int() 裡, 如 int("1234"), 此時你就會得到一個整數 1234。這在下一章, 我們要使用 input() 讓使用者可以輸入數字時, 會是個很重要的函數。

    另外, int() 的另一個功用, 是幫你做取整數的部份。也就是你會看到
    int(17.5) = 17
    int(17.4) = 17
    int(-17.5) = -17
    int(-17.4) = -17
    這在某些運算上, 是一個很好用的工具, 只是要很小心負的部份。
  2. str()
    當你把一個整數 1234 放到函數 str() 裡, 如 str(1234), 會得到一個字串 "1234"。這部份則是在下一章, 我們要使用 print() 秀出程式結果時, 會是一個很重要的技巧。
好了, 就先提到這裡, 個人建議學程式, 最重要的, 是多多嚐試。要不要試著想想, 怎麼利用整數的運算, 實作出四捨五入法? 如果你覺得你會操作, 不妨把你的答案寫在下面的推文裡。

2019年7月20日 星期六

手把手學 Python - test1.py 第一支可以存起來執行的程式

上一篇的文章裡, 寫了第一支"只有一行的小程式。如果你有買 Python 的入門書籍, 有不少書都會從這樣的方式開始學習。這種方式, 其實比較適合學一些指令的操作或是概念的測試, 例如之後在學"整數的運算"、"list 的操作"、"簡單的迴圈"之類。然而, 真的要開始寫一支可以"使用"的小程式時, 就不是那麼合適。所以在這篇文章裡, 會用最簡單的方式來寫一支可以重覆執行的程式。

在開始之前, 要先提醒這篇會出現的三件事。

  1. 命令列模式(cmd.exe)
    這是 windows 裡利用指令執行各種程式、工作的方式。在這裡, 我們也要利用它來執行 python 的小程式。
  2. 記事本
    在 windows 的附屬應用裡可以找到最簡單的文字編輯程式。它和 word 的功能很像, 但是卻沒有 word 的排版功能, 所以當你編輯完之後, 你存起來的就是最簡單的文字檔。
    當然, 如果你有其他更好用的純文字編輯器, 也可以用它來取代"記事本", 像我用的就是一支叫"vim"的程式。
  3. 建立一個專門用來放 python 程式的資料夾
    這算是一個建議養成的習慣。因為在一開始, 我們會寫一堆小程式來印證所學。如果能建立一個資料夾存放這些程式, 接下來的學習應該會比較方便。
    在接下來的文章裡, 我會試著建立一個叫"myprogram"的資料夾, 用來存放所有的程式。


好吧, 接下來就開始這次的課程。

首先, 我們要先建立一個新的資料夾, 用來存放後面我們所寫的程式。個人比較建議把這個目錄建立在 C 槽或是 D 槽的最底層, 而在我的系統裡, 系統的程式是在 C 槽, 而資料是放在 D 槽, 所以我們就在 D 槽裡建立"myprogram"的資料夾。建立後, 打開就會發現裡面是空的, 這就是我們的起點了。


接下來, 我們要利用 windows 左下方的搜尋功能(這是 windows 7 版)



在搜尋功能裡, 輸入 "cmd" 然後按

你就會看到命令列視窗。而這個視窗預設的資料夾位置應該是在使用者的資料夾,


不過, 我們已經建立一個專門用來放資料的資料, 所以我們現在先進到那個目錄裡。在這裡, 我們要教你三個指令。

  • c: 或 d:
    利用這個指令, 我們可以進入你建立 myprogram 的硬碟。c: 是指進入 C 槽, d: 則是指進入 D 槽。而我這次的 myprogram 是建立在 D 槽, 所以等一下你會看到我進到 D 槽。
  • cd
    cd 這個指令的全名是(change directory), 也就是進入下一層的資料夾。
  • dir
    這個指令是列出所在資料夾的所有資料。
好的, 接下來, 我就會輸入兩個指令 d: 和 cd myprogram, 進入位在 D 槽的 myprogram。

當然, 如果你的 myprogram 是建在 C 槽, 就請留在 C 槽。不過, 可能就要你先做一件事。因為你原本是在 C 槽的使用者目錄(C:\Users\User) 所以請先打 cd \ 回到最底層的目錄後, 再輸入 cd myprogram


進入 myprogram 之後, 試著打 dir 這個指令, 你會看到裡面沒東西, 顯示就像下面的狀況。


接著, 請找到"記事本"這支程式, 打開它。


輸入下面的程式

a = input("Please input your name : ")
print("Hello,", a)


在這裡要說明一件事, 因為中文的部份我們會在命令列視窗, 這裡會有編碼的問題, 所以在初期, 我們先避開中文的訊息。打完這兩行程式之後, 我們利用檔案中的另存新檔, 把這支程式存起來。存到我們建立的 myprograme, 並且把檔案改成 test1.py。


此時, 如果你到檔案管理員, 應該就會看到 myprograme 這個資料夾下, 多了一個 test1.py 的程式。


再切回去命令列視窗, 再次鍵入 dir 這個指令。也會看到這支程式。

最後, 就是執行程式的時刻了。在命令列視窗鍵入 python test1.py, 你就看到成果。


你可以重覆執行這支程式, 不管你是再次鍵入 python test1.py 或是按往上的游標鍵, 都可以喔。

請再重新讀一次這篇文章, 因為我們接下來就要利用這個方式學習 python。

如果有任何問題, 也請在推文裡提出。

註(20190723): 在安裝時, 請選擇 for all user, 另外, 在最後時, 如果有看到要你 disable path length, 就是指你的預設路徑有限制, 請把它 disable 掉。

2019年7月12日 星期五

手把手學Python - 第一支小程式

好吧, 現在預設你已經裝好了 Python 3 的程式。沒意外, 你的程式集裡應該多了像下面的的程式。



這裡面的程式分別是

  • IDLE
    整合式的環境, 這也是我們接下來會試著學一些最基礎東西的地方。
  • Python
    主程式, 也就是幫我們把指令翻譯給電腦聽懂的程式。
  • Python Manuals
    python 的說明文件。
  • Python Module Docs
    python 的模組說明。
如果都沒問題, 那我們就先來利用 IDLE 試著寫看看。點開 IDLE, 你應該會看到下面的畫面。



那個 ">>>" 是提示號, 也就是我們寫程式的地方。請你在提示號後面輸入

print("Hello Kitty!")

在輸入的過程, 你應該會看到像這樣的畫面



print 會變成紫色, 而你在打 "Hello 則會變綠色, 而且打的過程中, 會出現



這是 print 這個指令的簡易說明。當你輸入完後, 你會看到



白色的 "Hello Kitty!" 其實就是結果。

簡單解釋一下, print() 這是一個指令, 用來印出括號裡的資料。而我們這次在括號裡放了一個字串 --- "Hello Kitty!", 所以你就看到這個結果了。

如果你有興趣, 不妨用滑鼠點到 print("Hello Kitty!") 的那行, 再按一下 Enter 鍵, 你應該會看到, 這一行程式被複製到最新的提示號後面, 試看看, 印出你想印的所有句子吧。

到這裡, 就表示你已經可以開始試著寫程式了。我們接下來, 大多數的程式都可以在 IDLE 上寫。不過, 若想把寫的程式留下來, 甚至將來可以跟程式互動, 就要利用 python 主程式。這部份, 就下次再寫囉。