用Python 把英文字母轉換成數字?ord() 和chr() 的教學
文章推薦指數: 80 %
如果您有A、B、C 等的數據,如何按英文字母的順序轉換成1、2、3 的索引方便進行Python 的數據處理?想知道如何在Python 找出和使用ASCII 索引表?
Skiptocontent
Python編程.圖表
October1,2021
4:37am
目錄
Addaheadertobegingeneratingthetableofcontents
用Python把英文字母轉換成數字?ord()和chr()的教學
Shareonfacebook
Shareontwitter
Shareonlinkedin
Shareonwhatsapp
目錄
Addaheadertobegingeneratingthetableofcontents
最近面試的時候遇到一個頗容易,但我卻一時三刻不能解答的問題,就是在Python裡如何把英文字母以數字的形式表達?
譬如說我們有像Excel試算表的數據,以英文字母代表列(Column):{'A1':10,'B1':30,'C3':20}。
我們如何把A1轉換成(1,1),B1轉換成(2,1)等座標,方便我們使用數字索引(index)?
ASCII與英文字母
如果您曾經學習過一些編程,或者會聽說過ASCII(美國資訊交換標準代碼)這一個概念。
簡單來說,ASCII是一個國際認受的字元(character)索引(index)。
上圖顯示ASCII索引表的某些數值。
留意左邊的數值(46-109)是一個索引(index),而右邊是該索引所指的符號/字元。
比方說,在ASCII索引表的第63個符號是「?」。
我是廣告^o^
我們注意到ASCII索引表的第65個符號是大寫「A」,而第97個符號是小寫「a」。
而其他英文字母則以順序排列在66-90(大寫)和98-122(小寫)。
因此,我們只需要在ASCII表找到將所需的英文字母,例如「p」,便可以把所有英文字母以數字形式排列。
ord():英文字母到數字
print('a的ASCII索引是',ord('a'))
print('A的ASCII索引是',ord('A'))
註:先按一下綠色按鈕“Run”執行代碼,讓您能在IPythonShell看到編程結果!
要達到上面提及的要求,在Python裡,我們可以使用內置的功能ord()獲取一個單字的ASCII索引。
如上面所示,我們輸入ord('a')以後,會輸出97,即英文字母a的ASCII索引。
我是廣告^o^
留意‘a’(小寫)和‘A’(大寫)的ASCII索引不同,因此我們在處理大小寫時需要小心。
如果我們需要找到一串英文字母的ASCII索引,該如何辦?
多於一個英文字母的ord()
my_str='PythonViz'
[x+'的ASCII代碼是'+str(ord(x))forxinmy_str]
註:先按一下綠色按鈕“Run”執行代碼,讓您能在IPythonShell看到編程結果!
我們當然使用Python的好朋友ListComprehension(按此了解更多)去處理這個情況。
如上圖所示,我們可以直接使用ord(x)forxinmy_str的語法,揉合ListComprehension去獲取多個英文字母的ASCII索引。
把英文字母排序
回到我們原本的問題:如何知道英文字母的排列(如A->1,B->2…)?
我是廣告^o^
我們最終希望寫出一個Python功能。
這裡我們先做一些假設:
大寫小寫不重要:英文字母“P”和“p”的排序是一樣英文字母從1開始:A代表1,B代表2,如此類推輸入只有1個字母:如輸入“ab”,程式會顯示錯誤輸入不是字母時:如輸入“1”,程式會顯示錯誤
defalphabet_index(alphabet:str):
iflen(alphabet)>1:
raiseNotImplementedError('請輸入1個單字的英文字母')
elifalphabet.isupper():
returnord(alphabet)-ord('A')+1
elifalphabet.islower():
returnord(alphabet)-ord('a')+1
else:
raiseNotImplementedError('"'+alphabet+'"並不是英文字母')
#現在我們試一下不同情況的回傳
forxin['a','B','1','abcd']:
try:
print('輸入:',x,'\n輸出:',alphabet_index(x),'\n')
exceptExceptionase:
print('輸入:',x,'\n輸出:',e,'\n')
註:先按一下綠色按鈕“Run”執行代碼,讓您能在IPythonShell看到編程結果!
我們在上面編寫了一個簡單的Python功能alphabet_index()處理我們上述的要求。
這個編程的結構如下:
iflen(alphabet)>1:如果我們輸入多於一個字元(例如‘abcd’),要求用家改為輸入單一英文字母elifalphabet.isupper():如果用家輸入一個大寫英文字母,回傳這個字母與“A”的ASCII位置分別elifalphabet.islower():如果用家輸入一個大寫英文字母,回傳這個字母與“a”的ASCII位置分別else:如果用家不是輸入一個英文字母,要求用家改為輸入單一英文字母
在我們的輸出可見我們成功回傳“B”為2,並正確地要求用家重新輸入“1”和“abcd”。
將A1,B2等換成座標
最後一個ord()功能的是把A1、B2格式的座標轉換成(1,1)、(2,2)的格式,方便我們使用數字索引進行計算。
我是廣告^o^
如上圖所示,假如我們使用一個字典(dictionary)儲存這個座標的資料,會是{'A1':10,'B2':12,'C4':15,'D2':11}。
我們能否把座標變成(1,1)的格式?
coordinates={'A1':10,'B2':12,'C4':15,'D2':11}
{(ord(k[0])-ord('A')+1,int(k[1])):vfork,vincoordinates.items()}
註:先按一下綠色按鈕“Run”執行代碼,讓您能在IPythonShell看到編程結果!
我們可以直接使用ord(k[0])-ord('A')+1把存於字典的座標‘A’轉換成1,‘B’轉換成2等等。
如果我們想在輸出前進一步核實座標,可以考慮重用我們剛才的alphabet_index()自訂功能:
defalphabet_index(alphabet:str):
iflen(alphabet)>1:
raiseNotImplementedError('請輸入1個單字的英文字母')
elifalphabet.isupper():
returnord(alphabet)-ord('A')+1
elifalphabet.islower():
returnord(alphabet)-ord('a')+1
else:
raiseNotImplementedError('"'+alphabet+'"並不是英文字母')
coordinates={'A1':10,'b2':12,'C4':15,'d2':11}
print({(alphabet_index(k[0]),int(k[1])):vfork,vincoordinates.items()})
coordinates={'A1':10,'#2':12,'C4':15,'d2':11}
print({(alphabet_index(k[0]),int(k[1])):vfork,vincoordinates.items()})
註:先按一下綠色按鈕“Run”執行代碼,讓您能在IPythonShell看到編程結果!
留意我們把“B”和“D”換成小寫亦能回傳正確的座標。
而假如我們輸入了無效的座標(例如“#1″),亦會回傳錯誤(Error)。
我是廣告^o^
chr():數字到英文字母
學會了ord()這一個功能後,chr()就只不過是還原ord()的動作而已。
簡單來說,chr()是將ASCII索引(index)轉換成ASCII字元(character)的功能。
{x:chr(x)forxin[65,90,97,122]}
註:先按一下綠色按鈕“Run”執行代碼,讓您能在IPythonShell看到編程結果!
留意上圖顯示,如果我們輸入chr(65)會回傳‘a’。
這符合我們文初的ASCII索引表裡,以ASCII65代表小寫‘a’的。
而英文字母的ASCII表索引是從65至90和97至122的。
參考上面的alphabet_index()功能,我們也可以寫出類似的的「索引至英文字母」功能。
我們先一起看看以下例子:
defindexToAlphabet(ind:int,upperCase:bool=False):
ifind<1orind>26:
raiseNotImplementedError('請輸入1至26之間的整數')
ifupperCase:
returnchr(ord('A')+ind-1)
else:
returnchr(ord('a')+ind-1)
#現在我們試一下不同情況的回傳
forxin[(1,False),(1,True),(17,True),(27,False)]:
try:
print('輸入:',x,'\n輸出:',indexToAlphabet(x[0],x[1]),'\n')
exceptExceptionase:
print('輸入:',x,'\n輸出:',e,'\n')
註:先按一下綠色按鈕“Run”執行代碼,讓您能在IPythonShell看到編程結果!
我是廣告^o^
這個indexToAlphabet有2個輸入:索引(例如我們輸入1會見到‘a’或‘A’)和大寫(如果輸入True會見到‘A’)。
如果輸入的索引小於1或大於26,那麼我們不能回傳一個英文字母,所以我們回傳一個錯誤(Error)如果用戶選擇upperCase=True便回傳相應的大寫英文字母,否則回傳小寫
教學完整代碼
最後送給大家這篇教學的GoogleColab完整代碼。
如果您不懂得使用免安裝又好用的GoogleColabNotebook,記得閱讀這篇教學了:新手1/3:5分鐘免安裝學習Python?GoogleColabNotebook幫緊您!
結語
希望大家如果在Python面試遇到類似問題時,可以想起ord()和chr(),成功擄獲面試官的芳心!
人氣文章
Git3/4:在VSCode使用.gitignore避免pycache、venv索引?
使用Git的時候,您有想過如何能夠使Git避免索引一些暫存、機密的資料嗎?如何避免Git索引虛擬環境.venv和位元組碼pycache?快來學習如何在VSCode啟用gitignore的功能,令您的Git技巧和專案管理更上一層樓!
ReadMore»
Git2/4:在VSCode啟用Git?介紹Git版面基本操作
您知道如何在VSCode的專案裡開始使用Git的功能嗎?在VSCode的SourceControl版本管理版面上的按鈕是什麼意思?快來學習如何在VSCode安裝和使用Git,為您的編程過程加入強大的Git輔助吧!
ReadMore»
Git1/4:甚麼是Git/Github?為什麼需要專案版本管理?
相信您一定會聽說過Git/GitHub,但您知道什麼是Git,和為什麼我們需要使用Git輔助編程嗎?快來學習基本的版本管理(versioncontrol),以及簡單易明的圖表告訴您Git的基本概念,準備您開始在自己的Python專案使用Git!
ReadMore»
GoogleAPI2/4:Python存取GoogleSheets?讀寫pandasdf
您知道Python可以直接存取GoogleSheets數據,並讀取成一個pandasdataframe嗎?如何把pandasdataframe輸出至GoogleSheets作數據保留?快來學習如何使用方便的GoogleSheetsAPI吧!
ReadMore»
GoogleAPI1/4:使用GoogleAPIPythonClient存取Google服務
您知道如何使用官方的GoogleAPIPythonClient存取Google服務,如GoogleSheets、Gmail郵件嗎?如何把GoogleAPI授權重用和存放在Python專案?快來學習使用GoogleAPIPythonClient,增強Python功效!
ReadMore»
Pandas的groupby就是簡單!如何統合數據與文字?
您知道如何使用pandas的groupby功能嗎?如何把文字串連、數字疊加、找出分組的平均值?如何處理多層的數據關係,和重複使用同一個列?快來一起學習如何使用pandasgroupby讓您可以簡單輕鬆上手。
ReadMore»
大家都在看
Git3/4:在VSCode使用.gitignore避免pycache、venv索引?
Git2/4:在VSCode啟用Git?介紹Git版面基本操作
Git1/4:甚麼是Git/Github?為什麼需要專案版本管理?
文章分類
Git與GitHub(3)
GoogleColab與JupyterNotebook(7)
Google雲端平台(3)
pandas(4)
VSCode(11)
入門(22)
金融(1)
電郵(1)
快讓我學更多
ReadMore»
ReadMore»
ReadMore»
ReadMore»
ReadMore»
ReadMore»
ReadMore»
ReadMore»
ReadMore»
ReadMore»
ReadMore»
ReadMore»
主頁
使用條款
聯絡我們
Menu
主頁
使用條款
聯絡我們
©2021PYTHONVIZ.COM版權所有翻印必究
想學習Python嗎?
快來訂閱我們的電子報!
Name
Email
Confirm
我同意接收來自Python編程.圖表的通訊
我想收到最新Python資訊
訂閱電子報
延伸文章資訊
- 1支票英文中文大寫金額轉換器 - Monki App
「支票英文中文大寫金額轉換器」是用來把阿拉伯數字轉換成英文大寫金額及中文 ... 為了清晰起見,十位與個位數字中間的連字符也可以省去,而兩個詞的首字母都要大寫。
- 2如何在Excel中將字母轉換為數字,反之亦然? - ExtendOffice
使用出色的工具將數字轉換為貨幣文本 · 1。 選擇要轉換為貨幣詞的數字,然後單擊庫工具> 內容> 數字到貨幣單詞. · 2。 在“數字轉換為貨幣詞”對話框中,請檢查英語or 中文選項 ...
- 3數字轉換英文 - 工具邦
英文數字. one million. 支援發音功能; 您可以貼上包含逗號的數字。 支援小數點和負值。 這也適用於填寫英文支票。 ... 轉換器建立在NPM/numbered 的JS 庫上。
- 4用Python 把英文字母轉換成數字?ord() 和chr() 的教學
如果您有A、B、C 等的數據,如何按英文字母的順序轉換成1、2、3 的索引方便進行Python 的數據處理?想知道如何在Python 找出和使用ASCII 索引表?
- 5英文字母轉換數字 - 軟體兄弟
英文字母轉換數字, 有網友問到:在Excel 中常會用到要將英文字母A~Z 對應到數字1~26, ... 例如:身份證的第一碼是英文字,常在信用卡繳費時需要做這樣的轉換。, ...