3-5 python中定義字串
3-6 python中raw字串與多行字串
3-7 python中unicode字串
前面我們講解了什麼是字串。字串可以用」或者」「括起來表示。
如果字串本身包含』怎麼辦?比如我們要表示字串 i』m ok ,這時,可以用」 「括起來表示:
"i'm ok"
類似的,如果字串包含」,我們就可以用』 『括起來表示:
'learn
"python"
in imooc'
如果字串既包含』又包含」怎麼辦?
這個時候,就需要對字串的某些特殊字元進行「轉義」,python字串用\進行轉義。
要表示字串 bob said 「i』m ok」.
由於 』 和 」 會引起歧義,因此,我們在它前面插入乙個\表示這是乙個普通字元,不代表字串的起始,因此,這個字串又可以表示為
'bob said \"i\'m ok\".'
注意:轉義字元 \ 不計入字串的內容中。
常用的轉義字元還有:
\n 表示換行
\t 表示乙個製表符(tab)
\\ 表示 \ 字元本身
任務
請將下面兩行內容用python的字串表示並列印出來:
python was started in
1989
by"guido".
python is free and easy to learn.
答案
s = '\tpython was started in 1989 by \"guido\".\n
\tpython is free and easy to learn.'
print s
如果乙個字串包含很多需要轉義的字元,對每乙個字元都進行轉義會很麻煩。
為了避免這種情況,我們可以在字串前面加個字首 r ,表示這是乙個 raw 字串,裡面的字元就不需要轉義了。例如:
r'\(~_~)/ \(~_~)/'
但是r』…』表示法不能表示多行字串,也不能表示包含』和 「的字串(為什麼?)
如果要表示多行字串,可以用」』…」』表示:
'''line 1
line 2
line 3'''
上面這個字串的表示方法和下面的是完全一樣的:
'line 1\nline 2\nline 3'
還可以在多行字串前面新增 r ,把這個多行字串也變成乙個raw字串:
r'''python is created by "guido".
it is free and easy to learn.
let's start learn python in imooc!'''
任務
請把下面的字串用r」』…」』的形式改寫,並用print列印出來:
'\"to be, or
not to be\": that
is the question.\nwhether it\'s nobler in the mind to suffer.'
答案
print
r'''"to be, or not to be": that is the question.
whether it's nobler in the mind to suffer.'''
字串還有乙個編碼問題。
因為計算機只能處理數字,如果要處理文字,就必須先把文字轉換為數字才能處理。最早的計算機在設計時採用8個位元(bit)作為乙個位元組(byte),所以,乙個位元組能表示的最大的整數就是255(二進位制11111111=十進位制255),0 - 255被用來表示大小寫英文本母、數字和一些符號,這個編碼表被稱為==ascii編碼==,比如大寫字母 ==a==的編碼是==65==,小寫字母 ==z== 的編碼是==122==。
如果要表示中文,顯然乙個位元組是不夠的,至少需要兩個位元組,而且還不能和ascii編碼衝突,所以,中國制定了==gb2312==編碼,用來把中文編進去。
類似的,日文和韓文等其他語言也有這個問題。為了統一所有文字的編碼,==unicode==應運而生。unicode把所有語言都統一到一套編碼裡,這樣就不會再有亂碼問題了。
unicode通常用兩個位元組表示乙個字元,原有的英文編碼從單位元組變成雙位元組,只需要把高位元組全部填為0就可以。
因為python的誕生比unicode標準發布的時間還要早,所以最早的python只支援ascii編碼,普通的字串』abc』在python內部都是ascii編碼的。
python在後來新增了對unicode的支援,以unicode表示的字串用u』…』表示,比如:
print
u'中文'
中文
注意: 不加 u ,中文就不能正常顯示。
unicode字串除了多了乙個 u 之外,與普通字串沒啥區別,轉義字元和多行表示法仍然有效:
轉義:
u'中文\n日文\n韓文'
多行:
u'''第一行
第二行'''
raw+多行:
ur'''python的unicode字串支援"中文",
"日文",
"韓文"等多種語言'''
如果中文字串在python環境下遇到 unicodedecodeerror,這是因為.py檔案儲存的格式有問題。可以在第一行新增注釋
# -*- coding: utf-8 -*-
目的是告訴python直譯器,用utf-8編碼讀取源**。然後用notepad++ 另存為… 並選擇utf-8格式儲存。
任務
用多行unicode字串表示下面的唐詩並列印:
靜夜思
床前明月光,
疑是地上霜。
舉頭望明月,
低頭思故鄉。
答案
# -*- coding: utf-8 -*-
print (r'''靜夜思 # 這裡不需要用u,開頭一句,已經定義了。
床前明月光,
疑是地上霜。
舉頭望明月,
低頭思故鄉。''')
python中的字串
方法1 用字串的join方法 a a b c d content content join a print content 方法2 用字串的替換佔位符替換 a a b c d content content s s s s tuple a print content 我們可以通過索引來提取想要獲取的...
python中的字串
b nihao hahah xixi 輸出 nihao nhahah nxixi n 原字串 big r this hhaha big輸出 this nhhaha 還原為unicode字串 hello u hello u0020world hello輸出 hello world 字串是不可以改變的 ...
python中的字串
字串連線操作 字串複製操作 字串索引操作,通過索引訪問指定位置的字元,索引從0開始 字串取片操作 完整格式 開始索引 結束索引 間隔值 結束索引 從開頭擷取到結束索引之前 開始索引 從開始索引擷取到字串的最後 開始索引 結束索引 從開始索引擷取到結束索引之前 擷取所有字串 開始索引 結束索引 間隔值...