利用 Python 做 ASCII 轉換

ASCII 是程式語言中的一種編碼方式,代表了電腦上的128字元。相信大家應該知道電腦是由一連串的 0 和 1 在運作,所以我們在儲存字元的時候,電腦會將他們轉換成0和1後儲存起來,不過為了方便人類看所以一般來說 ASCII 看起來會是十進位表示,不過在電腦中實際儲存的會是一組 2 進位數字。下面我來看看幾個例子:

A : 65 (0100 0001) ; B : 66(0100 0010) ; ! : 33(0010 0001)…

其中要特別注意,在 ASCII 編碼中我們會把數字也轉換成一組二進位編碼,而這組二進位編碼再轉回十進位時,看起來就會是一組不同的數字。

1 : 49(0011 0001) ; 2 : 50 (0011 0010)….

所以一開始大家可能會覺得很奇怪 : 為什麼明明是 1 在 ASCII會變成 49 ,其實他是一組2 進位方式儲存,這組二進位剛好是十進位的 49。
(詳細轉換表可以參考維基百科)

而利用 Python ,將字元做轉換,把字元轉換成 ASCII中所代表的數字,也可以把 ASCII 的數字轉換成字元,下面我們來實際操作看看吧 :

利用chr()我們可以把 ASCII 中的數字轉換成字元 :

利用ord()則可以把字元轉換成 ASCII 編碼方式:

接著我們來試著寫一個程式可以一段輸入的字元都轉換成 ASCII ,在我的做法中我會先把輸入字轉換成字串(str()),接著把字串中的每個字拿出來轉換,並儲存在一開始宣告的空清單中:

word_ascii = []
word = str(input("輸入文字"))
for i in word: 
    ascii_transform = ord(i)
    print(ascii_transform )
    word_ascii.append(ascii_transform)

print(word_ascii)

在空格中輸入我們想要轉換的字元,我們就會發現可以利用這個程式把字元通通轉換成ASCII 囉~

當然,要把 ASCII 轉換回來也OK,大家可以想一想上面的程式碼要怎麼修改。

用 Python 讀取 txt 檔案

前面我們使用Python來開啟與儲存檔案,現在我們要來做相反的動作,我們要把存在記事本裡面的檔案讀到程式中,儲存與讀取是一體兩面的事情,首先我們先創建一份記事本檔案,我把檔名取作 Python_reading

首先,我們要先讀取檔案出來:

f = open(r'E:/Python_reading.txt')
f.readlines()
f.close()

大家可以看到我們就把記事本中的三行文字都讀出來囉~另外大家看到 ” \n ” 不知道有沒有問題,在程式語言中, ” \n ” 指的是換行的意思,也就是在記事本中按下enter後,換航其實做的就是在剛剛的那段文字中加上” \n “,而程式在讀取的時候就會自動換行顯示給我們看。

接著如果是想要一行一行讀取呢?

利用readline()可以只讀取一行,而且再次使用的話他會變成讀取下一行,這種做法可以讓我們一行一行的閱讀記事本裡面的內容,但如果我們要一次把一行一行的資料取出來的話,我們可以利用for迴圈來完成:

f = open(r'E:/Python_reading.txt')
for line in f:
    print(line, end="")

上面就把整份記事本中的文字給讀出來了。不過這這樣其實也不夠好用,因為他只是單純印出來,所以我們可以用 list 的方式存起來。這樣我們就可以指定取出我們要的某一句。

f = open(r'E:/Python_reading.txt')
text = []
for line in f:
    text.append(line)
print(text)

接下來我們就可以依照我們想要的方式叫出來:

print(text[1])
print(text[0])
print(text[2])

順道提醒一下,在 list 當中,第一筆資料是 [0] 開始算起。所以我們就可以隨心所欲的 call出我們要的資料囉~~

以上就是我們把資料讀到 Python 中的方式,利用 Python 中的檔案存檔與讀取,就可以組合出許多新的功能。

Matplotlib ( IV ) — 畫圓餅圖

今天來教大家怎麼畫圓餅圖,其實跟摺線圖與柱狀圖一樣我們只要做點修正就可以成功地把我們要的圓餅圖給畫出來,只是每一種畫法的所需要用到的參數都不太一樣,所以現在我們就來看要怎麼畫出漂亮的圓餅圖吧~~

這次我們只取出 a 班來畫,下面可以很清楚的看到只要將 plt.後面改成 pie 就好了

import matplotlib.pyplot as plt
x = ['basketball', 'swim', 'take photos', 'reading', 'guitar']

class_a = [8, 7, 1, 6, 5]
plt.pie(class_a)

上面的可以看到圓餅圖很輕易的就被我們給畫出來了,然而看著這張圖你會發現什麼東西都看不出來,所以一樣,我們樣替每一塊顏色修改 ” labels ” 的參數,就可以把名稱加上去,另外我們可以也可以挑整圓餅的顏色,利用修改 ” colors ” 的參數,下面我們來時做看看:

pie_color = ["yellow","plum", "grey", "brown", "orange"]
plt.pie(class_a, colors = pie_color, labels = x)

顏色就被我們調整過囉~而且我們也把每個項目都加上名稱囉 !! 接下來就要幫這個圓餅圖取一個標題,不過這邊還存在一個問題,那就是很難看出每一塊每一塊的大小到底是多少,這時我們可以修改 ” autopct ” 這個參數,可以叫出每一塊的百分比,並選擇要用幾位數來表示:

pie_color = ["yellow","plum", "grey", "brown", "orange"]
plt.pie(class_a, colors = pie_color, labels = x, autopct = "%2.2f%%")
plt.title("Hobbies Investigation")

另外其中看起來很像外星文的"%2.2f%%"代表的是取兩位整數,兩位小數;如果是三位整數,一位小數的寫法就是:"%3.1f%%"。大家可以自己選擇百分比的寫法。

有一件事情,大家有沒有發現這個圓好像不是正圓,對這原本就是這樣,不是我亂拉圖的變形,這是一開始我也看了好久= =,後來發現還對 x, y 軸做設定。

好啦,這樣就是我要的圓餅圖了。不過還有一種場景,如果說在簡報的時候,我們要特別拿出其中一塊出來討論的話,在 Matplotlib 中可以特別把那一塊移出來。假設我們今天想要看” guitar ” 這一塊,我們可以利用 ” explode ” 這個參數來調整,不過要注意的是explode這個參數是要 ” 每一個 ” 區塊都做設定,跟上面的 ” colors “設定方法是一樣的:

pie_color = ["yellow","plum", "grey", "brown", "orange"]
explode_p = (0, 0, 0, 0, 0.1)
plt.pie(class_a, colors = pie_color, labels = x, autopct = "%2.2f%%", explode=explode_p)
plt.title("Hobbies Investigation")
plt.axis("equal")

其中如果要保持原位的就令成 ” 0 “,而第五項的 guitar 就把它設成 0.1 就可以得到我們我們一開始預期得到的圖案拉~~

 

 

 

 

 

 

 

Matplotlib ( III ) — 畫柱狀圖

今天我們繼續來用 Matplotlib ,今天做的是直方圖,和摺線圖相比,我們只要把 plot 改成 bar 就好,我們延續 plot 中的兩個班級課後休閒活動調查來畫畫看。這邊我們先單獨畫出a 班的圖。

import matplotlib.pyplot as plt
x = ['basketball', 'swim', 'take photos', 'reading', 'guitar']

class_a = [8, 7, 1, 6, 5]
class_b = [12, 2, 9, 5, 3]
plt.bar(x, class_a, label = 'class_a')

大家可以看到非常簡單的只要把 plot 改成 bar 就好了。接著我們試著看看把 b 班也一起加上來吧~~

plt.bar(x, class_a, label = 'class_a')
plt.bar(x, class_b, label = 'class_b')

結果發生悲劇惹,我們可以看到大家可以看到 b 班的資料把 a 班蓋掉拉 ~ 尤其是basketball 跟 swim 因為 a 班數量比較少,所以完全看不出來是多少。所以我們要想其他的處理方式。在plt.bar()中還有可以參數align可以調整,他有兩種選擇,一是” center “,另一種是” edge “,設定” center “的話,長條圖會對準中間,而 ” edge ” 則會左邊對準黑線。所以我們再來修改一下這個參數試試看吧~

plt.bar(x, class_a, label = 'class_a', align = "center")
plt.bar(x, class_b, label = 'class_b', align = "edge")

畫出來之後覺得結果還是差強人意,雖然部分分開來了,但是有一部分還是重疊的,我們必須要想辦法把它分開,大家可能會想說既然有左邊靠齊的 ” edge “,那有沒有右邊靠齊的選項呢?很不幸的,答案是沒有,不過我們可以利用另一個參數讓他右邊對齊,那個參數叫做width,但大家可能又發現一件事情,width不是指的是寬度嗎?對沒錯,width 指的是直方圖左邊對齊的地方到右邊的寬度,所以我們把 width 令成負數的話,他就會變成往左邊,就可以達到對齊右邊的目標,我們現在來試試看:

plt.bar(x, class_a, label = 'class_a', align = "edge", width = 0.35)
plt.bar(x, class_b, label = 'class_b', align = "edge", width = -0.35)

最後我們用之前學過的,增加標題與x, y軸的名稱,調整一下這張圖:

plt.bar(x, class_a, label = 'class_a', align = "edge", width = 0.35)
plt.bar(x, class_b, label = 'class_b', align = "edge", width = -0.35)
plt.legend() #要使用label要加這行

plt.title("hobbies investigation")
plt.xlabel("hobbies")
plt.ylabel("numbers")

 

Matplotlib ( II ) — X軸、Y軸 與 title 的名稱設定

延續上一篇的教學,今天要將我們做出來的圖變得更完整。首先我們要為這張圖表先加上標題,並加上 x, y 座標的名稱。首先在plt.title()我們可以替這張圖表下標題,並利用plt.xlabel()plt.ylabel()替 x 座標跟 y 座標註解。做出來就會是完整的一張完整的摺線圖囉~

import matplotlib.pyplot as plt
x = [1, 3, 5, 7, 9]
y = [20, 30, 10, 40, 20]
plt.plot(x, y)
plt.title("Test 1")
plt.xlabel("data x")
plt.ylabel("data y")

接著在這張圖上我們也可以放上不同的資料表,下面是我模擬的場景,假設要調查兩個班級不同的的興趣分布,對了,除了放數字外,表單中也可以放英文字進去,於是下面我們依序調查了五種休閒活動,並計算喜歡的人數。接著我們還可以把兩個班級放在同一張圖上。

import matplotlib.pyplot as plt
x = ['basketball', 'swim', 'take photos', 'reading', 'guitar']

class_a = [8, 7, 1, 6, 5]
class_b = [12, 2, 9, 5, 3]

plt.plot(x, class_a)
plt.plot(x, class_b)

plt.title("hobbies investigation")
plt.xlabel("hobbies")
plt.ylabel("numbers")

好啦,我們就把兩個調查好的資料放在一張圖上囉~~其實光是這個做法初步就可以了解一些資料囉~不過大家有沒有發現,在圖上我們看不出來哪一個是 class_a ,哪一個是 class_b ,所以我們還必須這個資訊標到上面去,

plt.plot(x, class_a, label = 'class_a')
plt.plot(x, class_b, label = 'class_b')
plt.legend()

其實這個標籤也是在plt.plot()中的一個參數,大家只要去把label改成自己需要的就好,不過這邊要特別注意,需要加一行plt.legend(),他們才會顯出來喔~

好啦大致上 Matplotlib 折線圖的部分就是這樣囉,依照這兩篇的教學應該可以應付大部分的需求了。不過可不要以為 Matplotlib 的功能只有這樣喔,他還有很多不同類型的圖的可以做出來~~未來我們也會為大家一一介紹~