# Number 強制類型轉換
(1) int 強制類型轉換整型
將浮點型數據強制轉換成整型,它會默認將小數點后的數值舍去,不存在四舍五入
將布爾值強制轉換成整型,它會默認將True和False的值轉變為1和0
復數不能強制轉化成整型,它會報錯
字符串能夠強制轉化為整型,但首先字符串必須是全數字,否則不行,會報錯
int只能對 int float bool str(必須是全數字) 進行轉換
# (1) float 強制轉換為浮點型
將整型強制轉化為浮點型,它會默認在整型之后面加上小數點.0
將布爾值強制轉化為浮點型,它會默認將Ture和False的值轉化為1.0和0.0
復數不能轉化為浮點型,它會報錯
字符串能夠強制轉化為浮點型,但首先字符串必須是全數字,否則不行,會報錯
# (3) complex 強制轉化為復數
將整型強制轉化為復數,它會默認在整型后面加上 0j
將浮點型強制轉換為復數,同上
將布爾值強制轉化為復數,它會將True轉化為 1+0j,False轉化為 0j
將字符串強制轉化為復數,但首先字符串必須是全數字,否則不行,會報錯
# (4) bool 強制轉化為布爾類型 結果只有兩種 要么True 要么False
# bool 可以轉換所有的數據類型均為True
# 唯獨有以下十種情況 會為False 0 0.0 0j False ''空 ()空元祖 []空列表 set()空集合 None
# None 系統關鍵字 無特殊意義 代表啥也沒有一般用於初始化變量的時候用
# 容器類型強制轉換 (str list tuple set dict) 只能相互轉換,不能轉換Number數據類型
(1) str 所有數據類型都可以強制轉化成字符串str
規律: 在原有類型基礎上,在外套一層引號即可
repr 打印出字符串類型的那個引號(原型化輸出)
(2) list 所有數據類型都可以強制轉化為列表list
規律:強制轉換:如果是字符串,把字符串當中的每一個字符當成列表
中的新元素,其它都是在原有數據類型上,在外面套一個[]即可
將字符串強制轉化為列表時,它會在外套一層 [] 同時里面的字符也會一一顯示出字符串的引號
將字典強制轉化為列表型時,它會在外套一層 [] 同時只保留字典里的鍵,而忽略字典里的值
(3) tuple 所有數據類型都可以強制轉化為元組tuple
規律:強制轉換:如果是字符串,把字符串當中的每一個字符當成列表
中的新元素,其它都是在原有數據類型上,在外面套一個 () 即可
將字典強制轉化為元組時,它會在外套一層 () 同時只保留字典里的鍵,而忽略字典里的值
(4) set 所有數據類型都可以強制轉化為集合set
規律:強制轉換:如果是字符串,把字符串當中的每一個字符當成列表
中的新元素,(列表中的字符串會無序排列,因為集合本是無序排列)
其它都是在原有數據類型上,在外面套一個 {} 即可
# 將字典強制轉化為集合時,它會在外套一層{}同時只保留字典里的鍵,而忽略字典里的值
(5) dict 強制轉化為字典類型
# 多級容器數據: 該類型是容器數據,並且里面的元素還是容器類型數據
# ## 二級容器
# 二級列表
listvar = [1,2,3,4,5[6,7,8,9]]
# 二級元組
tuplevar = (1,2,3,4,5(6,7,8,9))
# 二級集合 (只能在里面放元組作為集合里面的容器數據,只能放可哈希不可變的數據)
setvar = {1,2,3,(4,5,6)}
# 二級字典
dictvar = {'a':{'c':3},'b':2}
# 四級容器
content = [1,2,3,4,(4,6,{'a':{4,5,6,7,8},'b':2},7),5]
# 等長的二級容器
'''
首先容器是兩個,代表二級容器
每一個容器元素個數都是一樣的叫做等長
'''
listvar = [(1,2,3,4),(5,6,7,8)]
tupvar = ([1,2],[3,4],[5,6])
# ## dict 強制轉換成字典: (里面的元素只能是兩個)
# (1) 外面是列表,里面是 列表、元組、字符串(元素個數只能是兩個,否則會報錯)
listvar = [['a',1],('b',2)]
# (2) 外面是元組,里面是列表、元組、字符串
tupvar = (['c',3],('d',33))
# (3) 外面是集合,里面是元組、字符串
setvar ={('a',1),('b',2)}
# 總結:
'''
容器類型數據強轉:
str() tuple() list() set() dict() 都能轉換成對應的數據類型
Number數據類型強轉:
int() float() bool() complex() 都能轉換成對應的數據類型
可以強轉函數值進行初始化
'''
# 變量存儲的緩存機制 (為了節省空間)
# (1)Number (int float bool complex)
# int (整型類取值在-5~正無窮范圍內,取兩個相同的值,
# 這兩個值得地址就相同,若超過這個取值范圍,地址就不同)
# float (浮點型取值只要是非負數,值得地址就相同)
# bool (在布爾值相同的情況下,值得地址相同)
# complex (在實數加虛數的情況下,永遠不一樣,只有虛數的情況下,就會一樣)
# (2)容器類型數據 (str list tuple set dict)
# str (字符串值相同情況下,值得地址是一樣的)
# list tuple set dict (無論啥情況,值得地址都不一樣)
# 例外: (空元祖的值得地址是一樣的)
# # python 運算符
# (1) 算數運算符: + - * / //地板除 %取余 **冪運算
# / (除法,結果一定是小數)
# // 地板除(整除) (如果相除的兩個含有小數,那么就在結果上加上.0)
var1 = -7
var2 = 4
res = var1 % var2
print(res) => 1
# 把-7的負號拿走,然后7 - 4 = 3
# 算出結果,再把負號拿回來變成-3
# 這時在與4相加,-3 + 4 = 1
# 就可求得整除的結果
var1 = 7
varl = -4
res = var1 % var2
print(res) => -1
# 跟上述同理,先7 - 4 = 3
# 然后再用3 + (-4)
# 就可求得整除的結果
# ## 比較運算符 > < >= <= ==等於 !=不等於
# 比較運算符就只有兩種結果,要么是True 要么是False
'''
是兩個等號,不是一個等號,1個等號是在做變量的賦值,兩個是比較是否相同
'''
# ### 身份運算符 is 和 is not (檢測兩個數據在內存中是否是同一個值)
var1 = 5
varl = 6
print(id(var1),id(var2))
# is 用來判斷兩個變量的地址是否一致
res = var1 is var2
print(res) => True
res = var1 is not var2
print(res) => False
# var1 == var2 與 var1 is var2 的區別
'''
一個是比較兩個值是否相同
一個是比較兩個值的地址是否相同
'''
# ### 邏輯運算符 and or not
# and 與
'''全真則真,一假則假'''
res = True and True => True
res = True and False => False
res = False and True => False
res = False and False => False
print(res)
# or 或
'''全真則真,全假則假,(一假一真,一真一假 => 都為真)'''
res = True or True => True
res = True or False => True
res = False or True => True
res = False or False => False
print(res)
# not 非
'''真變假,假變真'''
res = not False => True
res = not True => False
# (1)邏輯短路 (后面代碼不走了)
'''
# 兩種情況
res = False and 布爾值 => False
res = True or 布爾值 => False
'''
# print 默認返回一個 None 而None的布爾值是假
res = False and print(1) => False
print(res)
res = True and print(1) => 1 None
res = True or print(3) => True
res = False or print(4) => 4 None
# 邏輯運算符優先級
'''() > not > and > or'''
res = 5 or 6 and 7
# 5 or 7 => 5
print(res)
res = (5 or 6) and 7
# 5 and 7 => 7
res = not (5 or 6) and 7
# (5 or 6) => 5
# not 5 => False
# False and 7 => False
res = 5>6 or 7<8 and 9>10 or 11<12
print(res) => True
'''
有一種情況不用考慮and和or優先級問題,
就是or短路 比如 True or ...... => 結果一定為 True
'''
# ## 數據類型的判斷 isinstance
'''
isinstance(要判斷的數據,判斷的類型) 要么返回真,要么返回假
ininstance(要判斷的數據,(元組,放上各種數據類型,滿足一個條件即為真))
'''
# 5 是 int 類型的嗎?
res = isinstance(5,int) => True
res = isinstance('123',list) => False
print(res)
# 有一個類型滿足 反為真,一個都不滿足,反為假
res = isinstance(5,(list,tuple,str,int))
print(res) => True
res = isinstance(5,(list,tuple,str,))
print(res) => False