1.數(shù)據(jù)存儲形式
計算機以二進制的形式存儲
(1).原碼:數(shù)據(jù)的二進制形式
10 --> 1010 原碼:00001010
-10 --> 原碼:10001010
(2).反碼
- 正數(shù)的反碼:反碼和原碼一樣
- 負數(shù)的反碼:符號位不變卤妒,后面每一位取反
10 --> 反碼:00001010
-10 --> 反碼:11110101
(3).補碼
- 正數(shù)的補碼:補碼和原碼一樣
- 負數(shù)的補碼:符號位不變,后面每一位取反再加1(反碼+1)
2.認識字符串
- 用單引號或者雙引號括起來的字符集就是字符串
- 字符串中的每個獨立的單元就叫字符
3.轉(zhuǎn)義字符
- 通過 \ 將一些特殊的字符轉(zhuǎn)換成一個具有特殊功能或特殊意義的字符,就是轉(zhuǎn)義字符蹦狂。
-
常見的轉(zhuǎn)義字符
\n --- 換行
\t --- 制表符(tab)
\' --- '
(1).需要顯示轉(zhuǎn)義字符,在前面加 \ 即可命浴。
\\ --- \
計算字符串長度的時候署拟,轉(zhuǎn)義字符的長度是1
/n /t //
(2).如果需要同時轉(zhuǎn)義多個字符,可以在字符串前面加 r 即可妙色。
a = r'abcd\nsde\t'
print(a)
abcd\nsde\t #a
(3).python中字符的編碼采用的是Unicode編碼
A.Unicode編碼包括了ASCII碼。
B.Unicode是采用兩個字節(jié)對一個字符進行編碼(2^15),將世界上所有符號進行編碼慧耍。
- 將字符轉(zhuǎn)換成指定的數(shù)值身辨,這個過程就是編碼(目的是方便計算機存儲)
- 將數(shù)值轉(zhuǎn)換成對應的符號的過程及時反編碼(解碼)
Unicode和字符的轉(zhuǎn)換
1).將Unicode碼轉(zhuǎn)換成字符:chr(編碼)--
print(chr(0xAC00))
print(chr(0x4e60))
?
習
2)將字符轉(zhuǎn)換成Unicode編碼:ord(字符)
code1 = ord('星')
code2 = ord('辰')
print(hex(code1), hex(code2))
0x661f 0x8fb0
4.獲取字符
- 字符串實質(zhì)可以是一個不可變的序列,序列內(nèi)容是字符芍碧。
- 一旦字符串確定煌珊,那么里面的字符和字符的位置就不可變了,例如‘a(chǎn)bc’
A. 怎么獲取單個字符
python中的字符串泌豆,可以通過下標(索引)來獲取指定位置上的字符:字符串[索引]
說明:
a.字符串:可以是字符串值定庵,也可以是字符串變量
b. []:中括號是固定語法
c.索引:從0開始到字符串長度減1(0對應第一個字符);-1~-長度(-1對應最后一個字符)
注意:索引不能越界踪危,否則越界J哒恪(產(chǎn)生異常)
str1 = 'abc' #a->0 , b->1 , c->2
print(str1[2])
c
B.獲取部分字符串(獲取子串) -- 切片
注意:
步進如果是正數(shù),那么下標1對應的位置必須在下標2的前面贞远;如果步進為負數(shù)畴博,那么下標1對應的位置必須在下標2的后面
下標2對應的字符是取不到的
- 字符串[下標1:下標2] :
說明:從下標1開始,獲取到下標2前的所有字符
str2 = 'hello world'
print(str2[0:4])
print(str2[-4:-1])
hell
orl
- 字符串[下標1:下標2:步進]
說明:從下標1開始獲取蓝仲,每次下標值增加步進值俱病,每增加一次取一次,直到取到下標2為止袱结。
str2 = 'hello world'
print(str2[0:8:2])
hlow
[Finished in 0.3s]
-
切片的時候亮隙,下標1和下標2是可以省略
下標1省略:默認從開始的位置開始獲取(可能是第一個字符垢夹,也可能是最后一個開始溢吻,取決于步進)
下標2省略:從下標1開始獲取(同上)
效果如下:
str2 = 'hello world' print(str2[:8:1]) print(str2[:8:-1]) print(str2[1::1]) print(str2[1::-1]) hello wo dl ello world eh [Finished in 0.3s]
- 下標1和下標2都省略
str = 'hello world and python' print(str[::2]) #打印所有奇數(shù)位 hlowrdadpto [Finished in 0.3s]
5.字符串運算
1.加法運算
python支持兩個字符串相加果元,效果就是將兩個字符串拼接在一起產(chǎn)生一個新的字符串
print('abc'+'123')
abc123
[Finished in 0.3s]
注意:“+”號的兩邊必須是同一類型
2.乘法運算
格式:字符串*整數(shù)
print('abc' * 3)
abcabcabc
[Finished in 0.2s]
3.支持所有的比較運算符
str1 = 'abc'
print('abc' == str1)
print('abcd' > 'ac')
#每一位依次比較其 Unicode碼值大小
True
False
[Finished in 0.3s]
4.in 和 not in
'a' in 'abd' : 判斷 'a' 是否在 'abd' 中
判斷結(jié)果為布爾值
5.獲取字符串長度
字符串長度 = 字符串個數(shù)
使用 len() 內(nèi)置函數(shù)
str3 = 'project'
print(len(str3))
7
補充:空串
str = '' #長度是0
6.阻止轉(zhuǎn)義
在字符串的最前面添加 r/R 可以阻止轉(zhuǎn)義
print(r'a\nb')
a\nb
7.python為字符串提供了很多的內(nèi)建函數(shù)
格式: 字符串.函數(shù)()
這些所有函數(shù)的功能都不會影響原來的字符串煤裙,而是產(chǎn)生一個新的字符串
A.capitalize():將字符串第一個字符轉(zhuǎn)換成大寫
str1 = 'hello world'
print(str1.capitalize())
Hello world
[Finished in 0.2s]
B.center(width, fillchar) : 讓字符串居中(width 寬度 掩完, fillchar 填充的字符)
print('abc'.center(10,'*'))
***abc****
C.rjust(width , fillchar) : 讓字符串局右(width 寬度 , fillchar 填充的字符)
number = '1'
new_id = number.rjust(3,'0')
print(new_id)
001
[Finished in 0.2s]
同理 ljust(width硼砰,fillchar)左對齊
D. str.count(sub, start= 0,end=len(string))
統(tǒng)計次數(shù)(sub是搜索的子字符串,start和end分別是開始和結(jié)束位置)
print('adgfdsaaa' .count('a'))
4
E.str1.join(str2)
在str2中的每個字符串之間插入一個str1
print('+'.join('abc'))
a+b+c
F. str1.replace(old, new,num)
將str1中的old全部替換成new(num表示替換前幾個)
new_str = 'abcdfdwdadfswqaqd'.replace('a','+')
print(new_str)
+bcdfdwd+dfswq+qd
6.字符串的格式化
語法:'格式符' %(格式符對應的值)
-
常見格式化字符:
- 格式化字符串 ---> %s
- 格式化數(shù)字 ---> %d
- 格式化浮點數(shù) ---> %f
- 格式化字符 ---> %c (一般用于ascii碼或者Unicode碼)
first_name = '星'
last_name = '辰'
age = 18
newstr = 'hello,%s%s!今年%d歲' %(first_name,last_name,age)
print(newstr)
hello,星辰!今年18歲
[Finished in 0.5s]
%n.mf :m表示顯示的最小總寬度欣硼,n表示小數(shù)點位數(shù)
a = 3434.12345
print('%8.4f'%a)
3434.1235
[Finished in 0.6s]
附:
7.數(shù)據(jù)類型轉(zhuǎn)換
1.數(shù)據(jù)類型的自動轉(zhuǎn)換
a = 10 #整型
b = 12.5 #浮點型
result = a+ b #浮點型--會自動轉(zhuǎn)換整型為浮點型
2.強制轉(zhuǎn)換
基本語法:類型名(數(shù)據(jù))
其他類型 ---> 整型
int(12.5)---> 12
去掉字符串的引號后题翰,字符串的本身就是整數(shù),才能轉(zhuǎn)換成整型
int('123') ---> 123
int ( '123a')
int ('123.5')其他類型 ---> 浮點型
float(True) ---> 1.0
去掉字符串的引號后诈胜,字符串的本身就是浮點數(shù)豹障,才能轉(zhuǎn)換成浮點型
float('2e3') ---> 2000.0其他類型 ---> 布爾型
所有數(shù)據(jù)類型的數(shù)據(jù)都可以轉(zhuǎn)換成布爾
(1).數(shù)字中:除了0都是True
bool(100) ---> True
bool(-12.5) ---> True
bool (0) ---> False
(2).字符串中除了空串都是True
bool ('False') ---> True
bool ('') ---> False
bool (None) ---> False其他類型 ---> 字符串
所有數(shù)據(jù)都可以轉(zhuǎn)換成字符串
str(100) ---> '100'
str(True) ---> 'True'
8.字符串相關方法
python的字符串內(nèi)建函數(shù)
name.split(',')
按照逗號分割(不寫默認按照空格分割)
string.capitalize()
把字符串的第一個字符大寫
string.center(width)
返回一個原字符串居中,并使用空格填充至長度 width 的新字符串
string.count(str, beg=0, end=len(string))
返回 str 在 string 里面出現(xiàn)的次數(shù),如果 beg 或者 end 指定則返回指定范圍內(nèi) str 出現(xiàn)的次數(shù)
string.decode(encoding='UTF-8', errors='strict')
以 encoding 指定的編碼格式解碼 string焦匈,如果出錯默認報一個 ValueError 的 異 常 血公, 除 非 errors 指 定 的 是 'ignore' 或 者'replace'
string.encode(encoding='UTF-8', errors='strict')
以 encoding 指定的編碼格式編碼 string,如果出錯默認報一個ValueError 的異常缓熟,除非 errors 指定的是'ignore'或者'replace'
string.endswith(obj, beg=0, end=len(string))
檢查字符串是否以 obj 結(jié)束累魔,如果beg 或者 end 指定則檢查指定的范圍內(nèi)是否以 obj 結(jié)束,如果是够滑,返回 True,否則返回 False.
string.expandtabs(tabsize=8)
字符串 string 中的 tab 符號轉(zhuǎn)為空格垦写,tab 符號默認的空格數(shù)是 8。
string.find(str, beg=0, end=len(string))
檢測 str 是否包含在 string 中彰触,如果 beg 和 end 指定范圍梯投,則檢查是否包含在指定范圍內(nèi),如果是返回開始的索引值况毅,否則返回-1
string.format()
格式化字符串
string.index(str, beg=0, end=len(string))
跟find()方法一樣分蓖,只不過如果str不在 string中會報一個異常.
string.isalnum()
如果 string 至少有一個字符并且所有字符都是字母或數(shù)字則返
回 True,否則返回 False
string.isalpha()
如果 string 至少有一個字符并且所有字符都是字母則返回 True,
否則返回 False
string.isdecimal()
如果 string 只包含十進制數(shù)字則返回 True 否則返回 False.
string.isdigit()
如果 string 只包含數(shù)字則返回 True 否則返回 False.
string.islower()
如果 string 中包含至少一個區(qū)分大小寫的字符,并且所有這些(區(qū)分大小寫的)字符都是小寫尔许,則返回 True么鹤,否則返回 False
string.isnumeric()
如果 string 中只包含數(shù)字字符,則返回 True母债,否則返回 False
string.isspace()
如果 string 中只包含空格午磁,則返回 True,否則返回 False.
string.istitle()
如果 string 是標題化的(見 title())則返回 True毡们,否則返回 False
string.isupper()
如果 string 中包含至少一個區(qū)分大小寫的字符迅皇,并且所有這些(區(qū)分大小寫的)字符都是大寫,則返回 True衙熔,否則返回 False
string.join(seq)
以 string 作為分隔符登颓,將 seq 中所有的元素(的字符串表示)合并為一個新的字符串
string.ljust(width)
返回一個原字符串左對齊,并使用空格填充至長度 width 的新字符串
string.lower()
轉(zhuǎn)換 string 中所有大寫字符為小寫.
string.lstrip()
截掉 string 左邊的空格
string.maketrans(intab, outtab)
maketrans() 方法用于創(chuàng)建字符映射的轉(zhuǎn)換表,對于接受兩個參數(shù)的最簡單的調(diào)用方式红氯,第一個參數(shù)是字符串框咙,表示需要轉(zhuǎn)換的字符咕痛,第二個參數(shù)也是字符串表示轉(zhuǎn)換的目標。
max(str)
返回字符串 str 中最大的字母喇嘱。
min(str)
返回字符串 str 中最小的字母茉贡。
string.partition(str)
有點像 find()和 split()的結(jié)合體,從 str 出現(xiàn)的第一個位置起,把 字 符 串 string 分 成 一 個 3 元 素 的 元 組 (string_pre_str,str,string_post_str),如果 string 中不包含str 則 string_pre_str == string.
string.replace(str1, str2, num=string.count(str1))
把 string 中的 str1 替換成 str2,如果 num 指定,則替換不超過 num 次.
string.rfind(str, beg=0,end=len(string) )
類似于 find()函數(shù)者铜,不過是從右邊開始查找.
string.rindex( str, beg=0,end=len(string))
類似于 index()腔丧,不過是從右邊開始.
string.rjust(width)
返回一個原字符串右對齊,并使用空格填充至長度 width 的新字符串
string.rpartition(str)
類似于 partition()函數(shù),不過是從右邊開始查找.
string.rstrip()
刪除 string 字符串末尾的空格.
string.split(str="", num=string.count(str))
以 str 為分隔符切片 string,如果 num有指定值作烟,則僅分隔 num 個子字符串
string.splitlines([keepends])
按照行('\r', '\r\n', \n')分隔愉粤,返回一個包含各行作為元素的列表,如果參數(shù) keepends 為 False拿撩,不包含換行符衣厘,如果為 True,則保留換行符压恒。
string.startswith(obj, beg=0,end=len(string))
檢查字符串是否是以 obj 開頭影暴,是則返回 True,否則返回 False涎显。如果beg 和 end 指定值坤检,則在指定范圍內(nèi)檢查.
在 string 上執(zhí)行 lstrip()和 rstrip()
string.swapcase()
翻轉(zhuǎn) string 中的大小寫
string.title()
返回"標題化"的 string,就是說所有單詞都是以大寫開始,其余字母均為小寫(見 istitle())
string.translate(str, del="")
根據(jù) str 給出的表(包含 256 個字符)轉(zhuǎn)換 string 的字符,要過濾掉的字符放到 del 參數(shù)中
string.upper()
轉(zhuǎn)換 string 中的小寫字母為大寫
string.zfill(width)
返回長度為 width 的字符串期吓,原字符串 string 右對齊早歇,前面填充0
string.isdecimal()
isdecimal()方法檢查字符串是否只包含十進制字符。這種方法只存在于unicode對象讨勤。