用Python 把英文字母轉換成數字?ord() 和chr() 的教學

文章推薦指數: 80 %
投票人數:10人

如果您有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資訊 訂閱電子報



請為這篇文章評分?