天天看點

《Python語言程式設計》——3.3 字元串和字元

本節書摘來自華章計算機《python語言程式設計》一書中的第3章,第3.3節,作者:[美]梁勇(y. daniel liang) 更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

關鍵點:字元串(第1章講過)是一連串的字元。python處理字元和字元串的方式是一樣的。

在python裡,你除了可以處理數值,還可以處理字元串。一個字元串就是一串包括文本和數字的字元。字元串必須被括在一對單引号( ' )或者雙引号( " )裡。python沒有字元資料類型。一個字元的字元串代表一個字元。例如:

《Python語言程式設計》——3.3 字元串和字元

第一條語句将隻有字元a的字元串指派給變量letter。第二條語句将隻有數字字元4的字元串指派給變量number。第三條語句将字元串“good morning”指派給變量message。

注意:本書統一使用雙引号來包覆多個字元構成的字元串,用單引号來包覆單個字元的字元串或空字元串。這個習慣與其他程式設計語言是一緻的,是以很容易就能讓你将一個python程式轉換成其他語言程式。

3.3.1 ascii碼

計算機在内部是使用二進制數的(參見第1.2.2節)。在計算機裡,一個字元被存儲為一連串的0和1。把一個字元映射成它對應的二進制被稱為字元編碼。對字元編碼的方式有很多。編碼表定義編碼字元的方式。流行的編碼标準是ascii(美國資訊交換标準代碼),它是一個比特的編碼表,足以表示所有的大小寫字母、數字、标點符号以及控制字元。ascii碼使用0到127來表示字元。附錄b中給出ascii碼表示的字元。

3.3.2 統一碼

python也支援統一碼。統一碼是一種編碼表,它能表示國際字元。ascii碼表是統一碼的子集。統一碼由統一碼協會(unicode consortium)建立,支援世界上各種語言所寫的文本進行交換、處理和展示。一個統一碼以“u”開始,後面緊跟四個十六進制數字,它們從“u0000到uffff”(有關十六進制數的資訊參見附錄c)。例如,“welcome”被翻譯成中文後就是兩個字元:“歡”和“迎”。這兩個字元的統一碼表示是“u6b22u8fce”。

程式清單3-3中的程式顯示兩個中文字元和三個希臘字母,如圖3-1所示。

程式清單3-3 displayunicode.py

《Python語言程式設計》——3.3 字元串和字元

如果你的系統裡沒有安裝中文字型,你将看不到相應的中文字元。在這種情況下,為了避免錯誤,就從你的程式裡删除“u6b22u8fce”。希臘字母α、β、γ的統一碼表示是“u03b1”、“u03b2”和“u03b3”。

3.3.3 函數ord和chr

python提供ord(ch)函數來傳回字元ch的ascii碼,用chr(code)函數傳回code所代表的字元。例如:

《Python語言程式設計》——3.3 字元串和字元

a的ascii碼值是97,比a(65)的編碼值要大。小寫字母的ascii碼是從a開始,然後是b、 c依次類推直到z的連續整數。大寫字母也是一樣的。任何小寫字母的ascii碼與它對應的大寫字母的ascii碼的內插補點都一樣:32。這是一個很有用的處理字元的特性。例如,任何小寫字母的大寫字母,如下代碼所示:

《Python語言程式設計》——3.3 字元串和字元

第六行将一個小寫字母指派給lowercaseletter。第七行擷取它對應的大寫字母。

3.3.4 轉義序列

假如你想輸出帶有引号的字元串。你能編寫如下所示的語句嗎?

《Python語言程式設計》——3.3 字元串和字元

https://yqfile.alicdn.com/91ac64604e82f821959ad294867954bf5a9660d4.png

" >

答案是不行!這條語句有一個錯誤。因為python認為第二個雙引号就是這個字元串的結尾,是以,它就不知道該如何處理剩下的字元。

為了解決這個問題,python使用一種特殊的符号來表示特殊的字元,如表3-3所示。這種由反斜杠“”和其後緊接着的字母或數字組合構成的特殊符号被稱為轉義序列。

字元“n”也被稱為換行符或行結束(eol)字元,它們表示一行的結束。字元“f”讓列印機從下一頁列印。字元“r”被用來把光标移動到同一行的第一個位置。字元“f”和“r”在本書中很少被用到。

現在,你可以使用下面的語句列印帶引号的消息:

《Python語言程式設計》——3.3 字元串和字元

https://yqfile.alicdn.com/d16736093f18540db32d91caf40c424890484bbe.png

注意:符号和"在一起代表一個字元。

3.3.5 不換行列印

當使用print函數時,它會自動列印一個換行符,這會導緻輸出提前進入下一行。如果你并不想在使用print函數後換行,可以使用下面的文法在調用print函數時傳遞一個特殊的參數end =“anyendingstring”:

《Python語言程式設計》——3.3 字元串和字元

https://yqfile.alicdn.com/e2d181aed8033270634eaeca6cd89dc49138cc52.png

例如,下面的代碼:

《Python語言程式設計》——3.3 字元串和字元

顯示:

《Python語言程式設計》——3.3 字元串和字元

https://yqfile.alicdn.com/49b70c23d83f79230cca09605f99a62afcd61f83.png

第1行列印aaa和一個空字元' ',第2行列印bbb,第三行列印ccc和,第4行列印ddd和。注意:第2行的' '表示一個空字元串。是以,' '不會列印任何内容。

你也可以使用下面的文法使用end參數列印各項條目:

《Python語言程式設計》——3.3 字元串和字元

https://yqfile.alicdn.com/b703eaae37d1a8b012a4aaf4412d342d7dd99c6b.png

例如:

《Python語言程式設計》——3.3 字元串和字元

顯示

《Python語言程式設計》——3.3 字元串和字元

3.3.6 函數str

str函數可以将一個數字轉換成一個字元串。例如:

《Python語言程式設計》——3.3 字元串和字元

3.3.7 字元串連接配接操作

你可以使用運算符+來對兩個數字做加法。你也可以使用+運算符來連接配接兩個字元串。下面是一些例子:

《Python語言程式設計》——3.3 字元串和字元

第1行把三個字元串連接配接成一個。在第5行,str函數将變量chapterno中的數值轉換成一個字元串。這個字元串與“chapter”連接配接在一起得到一個新字元串“chapter 3”。

增強型指派運算符+=也能用來連接配接字元串。例如:下面的代碼就将字元串“message”與字元串“and python is fun”連接配接在一起。

《Python語言程式設計》——3.3 字元串和字元

https://yqfile.alicdn.com/123b98b3b1d7847e3cf8a9c40ccc5ef5f2aa9a6c.png

3.3.8 從控制台讀取字元串

為了從控制台讀取一個字元串,可以使用input函數。例如:下面的代碼從鍵盤讀取了三個字元串:

《Python語言程式設計》——3.3 字元串和字元

檢查點

3.5 使用ord函數找出1、a、b、a和b的ascii碼,使用chr函數找出十進制數40、59、79、85和90所對應的字元。

3.6 如何顯示字元和"?

3.7 如何用統一碼編寫一個字元?

3.8 假如運作下面程式的時候輸入a。那麼輸出什麼?

《Python語言程式設計》——3.3 字元串和字元

https://yqfile.alicdn.com/8e3530005ca39acc09f16a6942d1c902fe49228c.png

3.9 假如運作下面的程式的時候輸入a和z。那麼輸出什麼?

《Python語言程式設計》——3.3 字元串和字元

3.10 下面的代碼錯在哪裡?你能改正嗎?

《Python語言程式設計》——3.3 字元串和字元

3.11 顯示下面代碼的結果。

《Python語言程式設計》——3.3 字元串和字元