2.1 基本資料型別
阿新 • • 發佈:2019-01-07
1. 數值型別
1.1 數值型別包括:整數、浮點數和複數
- 整數型別:無取值範圍、二進位制/八進位制/十進位制/十六進位制
- 浮點數型別:有取值範圍、不確定尾數問題、科學計數法、大精確浮點運算
- 複數型別:與數學中複數概念一致、獲取實部和虛部
1.2 整數型別
4種進製表示形式
- 十進位制:123
- 二進位制:以0b或0B開頭:-0B110
- 八進位制:以0o或0O開頭:0o456、-0O789
- 十六進位制:以0x或0X開頭:0x1A、-0X2B
print(pow(2,pow(2,10)))
輸出結果
179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216
1.3 浮點數型別
- 有取值範圍和精度約定
- 不確定尾數問題(浮點數在計算機中無法精確表達)
- 使用
round()
輔助浮點數運算,消除不確定尾數 - 不確定尾數一般發生在10-16左右,
round()
十分有效
- 使用
import sys
print(sys.float_info)
輸出結果
sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1)
print(0.1 + 0.2)
輸出結果
0.30000000000000004
round(0.1 + 0.2, 1) # 第二個引數表示小數點後保留位數
輸出結果
0.3
2. 數值運算函式與方法
2.1 數值運算
- 操作符:+ - * / //等
- 函式:Python直譯器提供的內建函式
- 方法:數值型別在Python直譯器內部都是類,類的方法
賦值增強操作符
x op y
,其中op為二元操作符,如 x += y, x -= y, x *= y, x /= y,等- Python沒有x++操作
2.2 數值型別的運算關係
型別間可進行混合運算,生成結果為"最寬"型別
- 三種類型存在一種逐漸”擴充套件“或”變寬“的關係
- 整數->浮點數->複數
- 例如:123 + 4.0 = 127.0
2.3 數值運算函式
函式及使用 | 描述 |
---|---|
abs(x) |
絕對值,x的絕對值 |
divmod(x,y) |
商餘,(x//y, x%y),同時輸出商和餘數 |
pow(x,y[,z] |
冪餘,(x**y)%z,[]表示引數z可忽略 |
round(x[,d]) |
四捨五入,d是保留小數位數,預設值為0 |
max(x1,x2,...,xn) |
最大值,返回x1,x2,…,xn中的最大值,n不限 |
min(x1,x2,...,xn) |
最小值,返回x1,x2,…,xn中的最小值,n不限 |
型別轉換函式
函式及使用 | 描述 |
---|---|
int(x) |
將x變成整數,捨棄小數部分 |
float(x) |
將x變成浮點數,增加小數部分 |
complex(x) |
將x變成複數,增加虛數部分 |
3. 整數的位運算
整數之間可以進行位運算
- 位運算按照二進位制方式逐位進行
- 位運算只針對整數有作用
位運算子 | 描述 |
---|---|
x&y |
與,x與y的與操作 |
x\|y |
或,x與y的或操作 |
~x |
非,x按位取反 |
x^y |
異或,x與y的異或操作 |
x<<n |
左移,將x按位左移n位 |
x>>n |
右移,將x按位右移n位 |
101&99
輸出結果
97
bin(101)
輸出結果
‘0b1100101’
bin(99)
輸出結果
‘0b1100011’
0b1100001
輸出結果
97
~101
# 101取反,111...1110011010,首位是1,負數的補碼->原始碼:取反+1
# 101取反二進位制 '-0b1100110'
輸出結果
-102
bin(-102)
輸出結果
‘-0b1100110’
bin(101>>4)
輸出結果
‘0b110’
bin(101<<4)
輸出結果
‘0b11001010000’
4. 字串型別
4.1 字串:由0個或多個字元組成的有序字元序列
- 單行字串由一對單引號或雙引號表示
- 多行字串由三個單引號或三個雙引號表示
4.2 字串的序號
- 正向遞增序號
- 反向遞減序號
4.3 字串的索引和切片
使用[]獲取字串中一個或多個字元
- 索引:返回字串中單個字元 <字串>[M]
- 切片:返回字串中一段字元子串 <字串>[M:N],不含N
使用[M:N:K]根據步長對字串切片
- <字串>[M:N],M缺失表示至開頭,N缺失表示至結尾
- <字串>[M:N:K],根據步長K對字串切片
"〇一二三四五六七八九十"[::-1]
輸出結果
‘十九八七六五四三二一〇’
4.4 字串的特殊字元:轉義符\
轉義符是表達特殊字串或功能的方式
- 轉義符表達特定字元的本意
- 轉義符形成一些組合,表達一些不可列印的含義
4.5 字串操作符
操作符及使用 | 描述 |
---|---|
x + y | 連線兩個字串 |
n * x 或 x * n | 複製n次字串 |
x in s | 如果x是s的子串,返回True,否則返回False |
weekStr = "星期一星期二星期三星期四星期五星期六星期日"
weekId = eval(input("請輸入星期數字(1-7): "))
pos = (weekId - 1) * 3
print(weekStr[pos:pos+3])
請輸入星期數字(1-7): 4
星期四
weekStr = "一二三四五六日"
weekId = eval(input("請輸入星期數字(1-7): "))
print("星期" + weekStr[weekId - 1])
請輸入星期數字(1-7): 2
星期二
4.6 字串操作函式與方法
字串操作函式
函式及使用 | 描述 |
---|---|
len(x) |
長度,返回字串x的長度 |
str(x) |
任意型別x所對應的字串形式 |
hex(x) 或oct(x) |
整數x的十六進位制或八進位制小寫形式字串 |
chr(u) |
x為Unicode編碼,返回其對應的字元 |
ord(x) |
x為字元,返回其對應的Unicode編碼 |
Unicode編碼
- 統一字元編碼,即覆蓋幾乎所有字元的編碼方式
- 從0到1114111(0x10FFFF),每個編碼對應一個字元
- Python中每個字元都是Unicode編碼字元
字串處理方法
- “方法”是一個面向物件中的專有名詞
- 方法特指類中的函式,呼叫時表現為
<a>.<b>()
方式 - 方法本身也是函式,即
<b>()
,但與<a>
有關 - Python所有型別本質上都是類,即
<a>
,存在處理方法
- 方法特指類中的函式,呼叫時表現為
方法及使用 | 描述 |
---|---|
str.lower() 或str.upper() |
返回字串的副本,全部字元小寫/大寫 |
str.split(sep=None) |
返回一個列表,由str根據sep被分隔的部分組成 |
str.count(sub) |
返回子串sub在str中出現的次數 |
str.replace(old,new) |
返回字串str副本,所有old子串被替換為new |
str.center(width[,fillchar]) |
字串str根據寬度width居中,fillchar可選 |
str.strip(chars) |
從str中去掉在其左側和右側chars中列出的字元 |
str.join(iter) |
在iter變數除最後元素外每個元素後增加一個str |
"AbCdEfGh".lower()
輸出結果
‘abcdefgh’
"a,b,c,d".split(",")
輸出結果
[‘a’, ‘b’, ‘c’, ‘d’]
"a apple a day".count("a")
輸出結果
4
"python".replace("n","n.org")
輸出結果
‘python.org’
"python".center(20,"=")
輸出結果
‘=python=’
"= python=".strip(" =np")
輸出結果
‘ytho’
",".join("12345") # 主要用於字串分隔等
輸出結果
‘1,2,3,4,5’
字串格式化方法
- 格式化是字串處理方法中的一種,進行字串格式表達
<模板字串>.format(<逗號分隔的引數>)
- format()槽格式控制
: | <填充> | <對齊> | <寬度> | <,> | <.精度> | <型別> |
---|---|---|---|---|---|---|
引號符號 | 用於填充的 單個字元 |
< 左對齊 > 右對齊 ^居中對齊 |
槽設定的 輸出寬度 |
數字的千位 分隔符 |
浮點數小數 精度 或字串最大 輸出長度 |
整數型別 b,c,d,o,x,X 浮點數型別 e,E,f,% |
"{}:計算機{}的CPU佔用率為{}%".format("2018-10-10","C",10)
輸出結果
‘2018-10-10:計算機C的CPU佔用率為10%’
"{1}:計算機{0}的CPU佔用率為{2}%".format("2018-10-10","C",10)
輸出結果
‘C:計算機2018-10-10的CPU佔用率為10%’
"{0:20}".format("PYTHON")
輸出結果
'PYTHON ’
"{0:=^20}".format("PYTHON")
輸出結果
‘=PYTHON=’
"{0:*>20}".format("PYTHON")
輸出結果
‘**************PYTHON’
"{0:,.2f}".format(12345.6789)
輸出結果
‘12,345.68’
"{0:b},{0:c},{0:d},{0:o},{0:x},{0:X}".format(425)
輸出結果
‘110101001,Ʃ,425,651,1a9,1A9’
"{0:e},{0:E},{0:f},{0:%}".format(3.14)
輸出結果
‘3.140000e+00,3.140000E+00,3.140000,314.000000%’
5. 位元組串型別
5.1 位元組串:由0個或多個位元組組成的有序位元組序列
- 單行位元組串由一對單引號或雙引號表示
b'abcdef123455
- 多行位元組串由三個單引號或三個雙引號表示
- 位元組串中只允許存在ASCII字元
5.2 位元組串的序號
- 正向遞增序號
- 反向遞減序號
5.3 位元組串的索引和切片
使用[]獲取位元組串中一個或多個字元
- 索引:返回位元組串中單個字元 <位元組串>[M]
- 切片:返回位元組串中一段位元組子串 <位元組串>[M:N],不含N
使用[M:N:K]根據步長對位元組串切片
- <位元組串>[M:N],M缺失表示至開頭,N缺失表示至結尾
- <位元組串>[M:N:K],根據步長K對位元組串切片
b'abcde1234'[1]
b'abcde1234'[1:5]
輸出結果
b’bcde’
5.4 位元組串操作函式與方法
位元組串操作函式
函式及使用 | 描述 |
---|---|
len(x) |
長度,返回位元組串x的長度 |
位元組串處理方法
方法及使用 | 描述 |
---|---|
bytes.lower() 或bytes.upper() |
返回位元組串的副本,全部位元組小寫/大寫 |
bytes.split(sep=None) |
返回一個列表,由str根據sep被分隔的部分組成 |
bytes.count(sub) |
返回子串sub在str中出現的次數 |
bytes.center(width[,fillbyte]) |
位元組串bytes根據寬度width居中,fillbyte可選 |
bytes.strip(bytes) |
去掉在其左側和右側bytes中列出的字元 |
bytes.replace(old,new) |
返回位元組串str副本,所有old子串被替換為new |
b"A,B,C".split(b",")
輸出結果
[b’A’, b’B’, b’C’]
b"an apple a day".count(b"a")
輸出結果
4