數據類型內置方法理論以及相關操作

  • 2022 年 9 月 29 日
  • 筆記
  • 數據類型內置方法理論
  • 整型相關操作
  • 浮點型相關操作
  • 字元串相關操作
  • 列表相關操作

數據類型內置方法理論

我們之前學習的每一種數據類型本身都含有一系列的操作方法,內置方法是其中最多的(自帶的功能)

在python中數據類型調用內置方法的統一句式為>>>:句點符
   'jason'.字元串內置方法
   綁定字元串的變數名.字元串內置方法
    str.字元串內置方法
ps:數據類型的內置方法比較的多 想要掌握,不可以靠死記硬背 更多時候靠的是孰能生巧.

整形內置方法與操作 int

1.類型轉換(將其他類型數據轉換成整形)
   int(其他數據類型)
   ps:浮點型可以直接轉 字元串必須滿足內部是純數字才可以
2.進位數轉換
   十進位轉換其他進位
   0b二進位縮寫 	print(bin(100))  # 0b1100100  
   0x八進位縮寫   print(oct(100))  # 0o144
   0x十六進位縮寫		print(hex(100))  # 0x64
'''
數字的開頭如果是0b則為二進位 0o則為八進位 0x則為十六進位
'''
   其他進位轉十進位
    print(int(0b1100100))
    print(int(0o144))
    print(int(0x64))
    
    print(int("0b1100100", 2)) 
    print(int("0o144", 8))
    print(int("0x64", 16))
3.python自身對數字的敏感度較低(精確度低)
	python這門語言其實不厲害  主要是背後有大佬
        如果需要進準的計算需要藉助於模組numpy.....

Float浮點型內置方法與操作

1.類型轉換
  float(其他數據類型)
  字元串裡面可以允許出現一個小數點 其他必須是純數字
    
2.python自身對數字的敏感度較低(精確度低)
   python這門語言其實不厲害  主要是背後有大佬
   如果需要進準的計算需要藉助於模組numpy.....

str 字元串內置方法與操作

1.類型轉換
    str(其他類型數據)
    ps:可以轉換任意數據類型(只需要在後面加引號即可)
2.必須要掌握的方法
   2.1.索引取值(其實位置0開始 超出範圍直接報錯)
    s1 = ('hello world!')  # 定義變數名
    print(s1[0])  # 列印輸出 h
    print(s1[-1])  # 輸出結果 !支援負數  從末尾開始
 
   2.2.切片操作
    print(s1[1:5])  # 索引取值 從1取到4 顧頭不顧尾
    print(s1[-1:-5])  # 輸出結果空白  默認索引從左到右開始
    print(s1[-5:-1])  # 輸出結果orld 默認索引數據從左到右開始

image

   2.3. 修改切片方向
    print(s1[1:5:1])  # 輸出 ello  默認從1開始 差值為1
    print(s1[1:5:2])  # 輸出 el   默認從1開始 差值為2
    print(s1[-1:-5:-1])  # 反方向的種 從後面開始 差值1 索引到4
	
	print(s1[:])  # 不寫數字就默認都要
	print(s1[2:])  # 從索引2開始往後都要
	print(s1[:5])  # 從索引0開始往後要到4
	print(s1[::2])  # 索引所有值 差值2
	
   2.4.統計字元串中字元的個數
    print(len(s1))  # 12 總共有12個數
	
   2.5.移除字元串首尾指定的字元
   username = input('username>>>:').strip()
   # username = input('username>>>:')
   # username = username.strip()    兩行程式碼和上面一樣程式碼運行結果一樣 單程式碼更方便!
   if username == 'wei':          # 如果後面沒有strip(),'wei ' 如果有空字元串,輸出有誤!
    print('登陸成功')
	
	res = ' jason '
	print(len(res))  # 空字元串也佔位1 長度9個字元
	print(len(res.strip())) # strip()括弧內不寫 默認移除首尾的空格  結果:5
	
	res1 = '$$wei$$'
	print(res1.strip('$'))  # wei
	print(res1.lstrip('$'))  # wei$$
	print(res1.rstrip('$'))  # $$wei
	
    2.6.切割字元串中指定的字元
	res = 'jason|123|read'
	print(res.split('|'))  # ['jason', '123', 'read']  該方法的處理結果是一個列表
	# split翻譯: 
	# V:使....分裂/n:分裂; 分離; 分歧; 劃分; 分別; 份額; 裂縫; 裂口; 劈叉
	 
	name, password, hobby = res.split('|')  # 使用變數名代替對應的字元
	print(res.split('|', maxsplit=1))  # maxsplit:最大切割值 後面數字多少 切割多少
	# ['jason', '123|read']  默認從左往右切指定個數
	print(res.rsplit('|',maxsplit=1)) 
	# ['jason|123', 'read']  從右往左切指定個數
	resplit:從右到左
	
    2.7.字元串格式化輸出

   format玩法1:等價於佔位符
	res = 'my name is {} my age is {}'.format('wei', 123)  # {}等價於佔位符
	print(res)   # my name is wei my age is 123
   format玩法2:索引取值並支援反覆使用
   	res = 'my name is {0} my age is {1} {0} {0} {1}'.format('jason', 123)
	print(res)  #  my name is jason my age is 123 jason jason 123
   format玩法3:佔位符見名知意
   	res = 'my name is {name1} my age is {age1}'.format(name1='jason', age1=123)
	print(res)    # my name is jason my age is 123 jason 123 jason  
   format玩法4:推薦使用(******* 給雞哥拉滿!!!!!!)
	name = input('username>>>:')
	age = input('age>>>:')
	res = f'my name is {name} my age is {age}'  # f代表了 .format
	print(res)


   3.字元串
    1.大小寫相關
    res = 'hElLO WorlD 666'
    print(res.upper())  # HELLO WORLD 666  全部大寫
    print(res.lower())  # hello world 666  字母全部小寫
'''
圖片驗證碼:生成沒有大小寫統一的驗證碼 展示給用戶看
獲取用戶輸入的驗證碼 將用戶輸入的驗證碼和當初產生的驗證碼統一轉大寫或者小寫再比對
'''
   code = 'zBcqD1'
   print('請輸入圖中的驗證碼的內容',code)
   cs_code = input('請輸入驗證碼>>>:').strip()
   if cs_code.upper() == code.upper():  # upper:全部大寫  lower:英文小寫
   print('驗證碼正確')

image

  3.1  判斷字元串中的大小寫
   res = 'hello world'
   print(res.isupper()) # 判斷字元串是否是純大寫  False
   print(res.islower()) # 判斷字元串是否是純小寫  True
  
  3.2  判斷字元串是否是純數字
res = ''
print(res.isdigit())  # sdigit是python的一個函數,主要用於檢查是否為數字 False
guess_age = input('guess_age>>>:').strip()  # 獲取用戶輸入值
if guess_age.isdigit():  # 判斷用戶輸入值是否是數字
    guess_age = int(guess_age)  # 如果是
    print('年齡', guess_age)  # 列印年齡
else:
    print('代筆!年齡都不知道怎麼輸入啊??'))
	
  3.3替換字元串中指定的內容
  res = 'my name is jason jason jason jason jason'
  print(res.replace('jason', '你想要輸入的'))  # 前面不變 後面更改
  # my name is handsome handsome handsome handsome handsome(輸出結果)
  print(res.replace('jason', 'tonySB', 1))
  # my name is tonySB jason jason jason jason    從左到右替換指定內容
  
  3.4.字元串的拼接
    ss1 = 'hello'
    ss2 = 'world'
    print(ss1 + '$$$' + ss2) # hello$$$world  
    print(ss1 * 10)  # 10遍hello
	
    print('|'.join(['jason', '123', 'read', 'JDB']))  # jason|123|read|JDB  加入到每個字元串
	print('|'.join(['jason', 123])) #運行失敗  參與拼接的數據值必須都是字元串
	
  3.5 統計指定字元出現的次數
	res = 'hello world'
	print(res.count('l')) # 3 count:計數
	
  3.6 判斷字元串的開頭或者結尾
    res = 'jason say hello'
	res = 'jason say hello'
    print(res.startswith('jason')) # True  startswith  開頭
    print(res.startswith('j'))   # True
    print(res.startswith('jas')) # True
    print(res.startswith('a')) # False
    print(res.startswith('son')) # False
    print(res.startswith('say'))  # False
    print(res.endswith('o')) # True  endswith 結尾
    print(res.endswith('llo')) # True
    print(res.endswith('hello')) # True
  3.7.其他方法補充
    res = 'helLO wORld hELlo worLD'
	print(res.title())  # Hello World Hello World   每個英文首字母大寫
	print(res.capitalize())  # Hello world hello world   第一個英文大寫
	print(res.swapcase())  # HELlo WorLD HelLO WORld  相反 大寫的小寫 小寫的大寫
	print(res.index('O'))  # 找索引值
	print(res.find('O')  # 實現檢索字元串並且輸出運算值的意思
	print(res.index('c'))  # 找不到直接報錯
	print(res.find('c'))  # 找不到默認返回 找不到默認返回-1
	print(res.find('LO'))  # 也是類似索引值 找到下劃線地址

列表內置方法及操作

  1. 類型轉換
  list(其他數據類型)
  ps:能夠被for循環的數據類型都可以轉成列表
  print(list('hello world')) 
  # ['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
  print(list({'name': 'jason', 'pwd': 123}))
  # name pwd 字典也是取k值
  print(list((1, 2, 3, 4))) # 1 2 3 4  元組
  print(list({1, 2, 3, 4, 5})) # 1 2 3 4 5  字典
  
  2.需要掌握的方法
  l1 = [111, 222, 333, 444, 555, 666, 777, 888]
  1.索引取值(正負數)
    print(l1[0])  # 111 
    print(l1[-1]) # 888
  2.切片操作    與字元串講解操作一致
    print(l1[0:5]) # 111 222 333 444 取範圍值1-4
    print(l1[:])  # 111, 222, 333, 444, 555, 666, 777, 888  
  3.間隔數 方向  與字元串講解操作一致
    print(l1[::-1]) # 從尾往首 888 777 666 555 444 333 222 111
  4.統計列表中數據值的個數
    print(len(l1))  # 8
  5.數據值修改
    l1[0] = 123  # 123 222 333 ... 定義一個新的列表值
    print(l1)
  6.列表添加數據值
    方式1:尾部追加數據值
    	l1.append('乾飯')  # apeend :在對象後面增加
    	print(l1)  # [111, 222, 333, 444, 555, 666, 777, 888, '乾飯']
    	l1.append(['jason', 'kevin', 'jerry'])
    	print(l1)  # [111, 222, 333, 444, 555, 666, 777, 888, ['jason', 'kevin', 'jerry']]
    方式2:任意位置插入數據值
    	l1.insert(0, 'jason')  # ['jason', 111, 222, 333, 444, 555, 666, 777, 888] 
    	print(l1)  # 加在哪裡看索引值的位置
    	l1.insert(1, [11, 22, 33, 44])  在1位牽引值添加列表
    	print(l1)  # [111, [11, 22, 33, 44], 222, 333, 444, 555, 666, 777, 888]
    方式3:擴展列表 合併列表
    	ll1 = [11, 22, 33]
    	ll2 = [44, 55, 66]
    	print(ll1 + ll2)  # [11, 22, 33, 44, 55, 66]
    	ll1.extend(ll2)  # for循環+append 
	# xtend()函數主要是用於在列表末尾一次性追加另一個序列中的多個值(即用新列表擴展原來的列表
    	print(ll1)  # [11, 22, 33, 44, 55, 66]
    	for i in ll2:                        #   [11, 22, 33, 44]
    		ll1.append(i)                    # [11, 22, 33, 44, 55]
    		 print(ll1)                      # [11, 22, 33, 44, 55, 66]
			 
  7.刪除列表數據
    方式1:通用的刪除關鍵字del
    	del l1[0]
    	print(l1)
    方式2:remove
    	l1.remove(444)  # 括弧內填寫數據值 然後刪除444
    	print(l1) # [111, 222, 333, 555, 666]
    方式3:pop
	ll1 = [111, 222, 333, 444, 555, 666]
    	ll1.pop(3)  # 括弧內填寫索引值
    	print(ll1) # [111, 222, 333, 555, 666]
    	ll1.pop()  # 默認尾部彈出數據值
    	print(ll1)  # [111, 222, 333, 555]
    	res = ll1.pop(3)
    	print(res)  # 444 pop 可以取出 等新的變數命名
	res = ll1.remove(444) 
    	print(res1)  # None
 8.排序
    	ss = [54, 99, 55, 76, 12, 43, 76, 88, 99, 100, 33]
    	ss.sort()  # 默認是升序: python中sort() 函數用於對原列表進行排序
    	print(ss)  # [12, 33, 43, 54, 55, 76, 76, 88, 99, 99, 100]
    	ss.sort(reverse=True)
	# 「reverse是python一個列表的內置函數,是列表獨有的,用於列表中數據的反轉,顛倒
    	print(ss)  # 改為降序 
	# [100, 99, 99, 88, 76, 76, 55, 54, 43, 33, 12]
 9.統計列表中某個數據值出現的次數
    	print(l1.count(111))
 10.顛倒列表順序
    	ss.reverse()
    	print(ss) # [33, 100, 99, 88, 76, 43, 12, 76, 55, 99, 54]

可變類型與不可變類型

s1 = '$$jason$$'
l1 = [11, 22, 33	]
res = s1.strip('$')   # jason
print(s1)  # $$jason$$
'''字元串在調用內置方法之後並不會修改自己 而是產生了一個新的結果
如何查看調用方法之後有沒有新的結果 可以在調用該方法的程式碼左側添加變數名和賦值符號
    res = s1.strip('$')
'''
print(s1.strip('$')) # jason

ret = l1.append(44) # 在數據最後添加一個數據值
print(l1)  # [11, 22, 33, 44]
print(ret)  # None
'''列表在調用內置方法之後修改的就是自身 並沒有產生一個新的結果'''

可變類型:值改變 記憶體地址不變
l1 = [11, 22, 33]
print(l1) # [11, 22, 33]
print(id(l1))  # 2750734773384 記憶體地址
l1.append(44)
print(l1) # [11, 22, 33, 44]
print(id(l1)) # 2750734773384 記憶體地址不變

不可變類型:值改變 記憶體地址肯定變
res = '$$hello world$$'
print(res)  # $$hello world$$
print(id(res)) # 1624393531568
res1 = res.strip('$') 
print(res1) # hello world
print(id(res1))  # 1624393493360

今日作業

1.基於字元串充當資料庫完成用戶登錄(基礎練習)
ata_source = 'jason|123' 
name, pwd = data_source.split('|')  # 分割字元串,再解壓賦值
name1 = input('輸入你的名字>>>:').strip() # 獲取用戶輸入.strip
pwd1 = input('請輸入你的密碼>>>:')   # 獲取用戶輸入
if pwd1.isdigit():  #  假如用戶輸入的密碼 不是整數
    if name == name1 and pwd1 == pwd:   # 嵌套  兩個數值都滿足
        print('登錄成功')
    else:
        print('登陸失敗')
else:   #  重新輸入
    print('請輸入數字!')
2.基於列表充當資料庫完成用戶登錄(拔高練習)  # 多個用戶數據
   data_source = ['jason|123', 'kevin|321','oscar|222']
3.利用列表編寫一個員工姓名管理系統
輸入1執行添加用戶名功能
輸入2執行查看所有用戶名功能
輸入3執行刪除指定用戶名功能
'''分析 用戶輸入的不同 可以執行不同的程式碼'''
 ps: 思考如何讓程式循環起來並且可以根據不同指令執行不同操作
提示: 循環結構 + 分支結構
#
admin = []  # 定義一個空列表
while True:
    print('''添加用戶請扣1
查看用戶請扣2
刪除用戶請扣3
退出請按4
''')  # 做一個用戶介面
    add = input('請輸入>>>:')
    if add == '1':
        admin1 = input('輸入你要添加的用戶>>>:')
        admin.append(admin1)
        print('添加成功')
    elif add == '2':
        for i in admin:
            print(i)
    elif add == '3':
        admin2 = input('你要刪除誰>>>:')
        if admin2 in admin:
            admin.remove(admin2)
            print('刪除成功')
        else:
            print('沒有此用戶')
    elif add == '4':
        print('886')
        break
    else:
        print('輸入錯誤,請重新輸入')