1. 程式人生 > >2.1 基本資料型別

2.1 基本資料型別

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