Python基礎數據類型(4.29) bool str int 三者之間的轉換 str索引切片,常用操作方法 for迴圈(大量的練習題) 1.基礎數類型總覽 整數(int) ,字元串(str),布爾值(bool),列表(list),元組(tuple),字典(dict),集合(set). 10203 ...
Python基礎數據類型(4.29)
- bool str int 三者之間的轉換
- str索引切片,常用操作方法
- for迴圈(大量的練習題)
1.基礎數類型總覽
- 整數(int) ,字元串(str),布爾值(bool),列表(list),元組(tuple),字典(dict),集合(set).
- 10203 123 3340 int 主要用於計算+- * / 等等
- '今天吃了沒?' str 存儲少量的數據,併進行相應的操作。str1 + str2, str *int , 索引,切片, 其他操作方法
- True False bool 判斷真假
- [12, True, 'alex', [1,2,3 ]] list 存儲大量有序數據。列表內部數據可任意改動
- (12, True, 'alex', [1,2,3 ]) tuple 存儲大量的數據,元組不可改變裡面的元素。只讀,不能更改。
- {'name': '太白金星'} dict 字典存儲大量的關聯性比較強的數據,查詢速度非常快。
- set 集合
2.數字int
十進位二進位轉換 #二進位轉換成十進位 0001 1010 ------> 26 b = 1 * 2**4 + 1 * 2**3 + 0 * 2**2 + 1 * 2**1 + 0 * 2**0 print(b) # 26 #十進位整數轉換成二進位整數 42 -----> 0010 1010 除2取餘,逆序排列 #十進位小數轉換成二進位小數 乘2取整,順序排列:用2乘十進位小數,可以得到積,將積的整數部分取出,再用2乘餘下的小數部分,又得到一個積,再將積的整數部分取出,如此進行,直到積中的小數部分為零,此時0或1為二進位的最後一位。或者達到所要求的精度為止。 0.625 = (0.101)B 0.625 * 2 = 1.25 ---->1 0.25 * 2 =0.5 ---->0 0.50 * 2 =1.0 ---->1
bit_lenth 十進位轉化成二進位的有效長度【bit_length()計算整數在記憶體中占用的二進位碼的長度.】
# bit_lenth 有效的二進位的長度 i = 4 print(i.bit_length()) # 3 i = 5 print(i.bit_length()) # 3 i = 42 print(i.bit_length()) # 4
3.布爾值bool:True False
bool str int 三者之間的轉換
數據類型之間的轉換: ##### bool <---> int ####### #bool-->int :True 1 False 0 print(int(True)) # 1 print(int(False)) # 0 #int-->bool :非零即True ,0 為 False i = 0 print(bool(i)) 【重點】##### str <---> int ##### # str ---> int : 只能是純數字組成的字元串可以轉化成數字類型 s1 = '1088' print(int(s1)) # 字元串引號內必須是數字組成 # int ----> str 所有數字都能轉化成字元串 i = 100 print(str(i),type(str(i))) 【重點】###### str <---> bool ##### # str--->bool :非空即True s1 = ' ' #空格,不是空 print(bool(s1)) #True s1 = '' # 空字元串,為False print(bool(s1)) #False # bool ---> str 無意義 print(str(True), type(str(True))) # 運行結果:True <class 'str'>
- 應用:
s = input('輸入內容') #input輸入的為字元串類型 if s: #(字元串作為布爾值進行判斷) print('有內容') else: print('沒有輸入任何內容') #直接回車,顯示“沒有輸入任何內容” #先空格,再回車,顯示“有內容”
4.字元串str(重點)
Python中凡是用引號引起來的數據可以稱為字元串類型,組成字元串的每個元素稱之為字元,將這些字元一個一個連接起來,然後在用引號起來就是字元串。
索引:索引即下標,就是字元串組成的元素從第一個開始,初始索引為0以此類推
切片:切片就是通過索引(索引:索引:步長)截取字元串的一段,形成新的字元串
對字元串進行索引和切片,出來的數據都是字元串類型。
常用操作方法:字元串的常用操作方法,不會對原字元串進行任何操作,都是產生一個新的字元串
索引切片步長
#字元從左至右有順序,依次為0,1,2....。從右往左以次為-1,-2,-3,.... s1 = 'python全棧22期' # 按照索引取值,每次取一個字元。索引即下標index s2 = s1[0] print(s2) #p print(s2,type(s2)) #p <class 'str'> s3 = s1[2] print(s3) #t s4 = s1[-1] print(s4) #期 # 按照切片取值。按照切片取值,原則:顧頭不顧腚 s5 = s1[0:6] s5 = s1[:6] #從開頭開始取,0可以預設不寫 print(s5) #python s6 = s1[6:] print(s6) #全棧22期 print(s1[:-1] #python全棧22 #-1 是列表中最後一個元素的索引,但是要滿足顧頭不顧腚的原則,所以取不到'期'元素 # 切片步長 s7 = s1[:5:2] #加步長 print(s7) #pto print(s1[:]) ##開頭到最後,python全棧22期 # 倒序: s8 = s1[-1:-6:-1] ##反向加步長 print(s8) #期22棧全 # 倒序全部取出來 s9 = s1[-1::-1] print(s9) #期22棧全nohtyp s9 = s1[::-1] print(s9) #期22棧全nohtyp s9 = s1[-1:0:-1] #錯誤 print(s9) #期22棧全nohty 沒有字母p 按索引:s1[index] 註釋:index下標 按照切片取值: s1[start_index: end_index+1] 按照切片步長取值: s1[start_index: end_index+1: step] 反向按照切片步長取值: s1[start_index: end_index後延一位: step]
練習題
''' 有字元串s = "123a4b5c" 通過對s切片形成新的字元串s1,s1 = "123" 通過對s切片形成新的字元串s2,s2 = "a4b" 通過對s切片形成新的字元串s3,s3 = "1345" 通過對s切片形成字元串s4,s4 = "2ab" 通過對s切片形成字元串s5,s5 = "c" 通過對s切片形成字元串s6,s6 = "ba2" ''' s = "123a4b5c" s1 = s[0:3] s1 = s[:3] print(s1) s2 = s[3:6] s2 = s[-5:-2] print(s2) s3 = s[0:-1:2] print(s3) s4 = s[1:6:2] print(s4) s5 = s[-1] print(s5) s6 = s[-3:0:-2] print(s6)
常用操作方法【重點】
字元串的常用操作方法,不會對原字元串進行任何操作,都是產生一個新的字元串 upper lower #例 s = 'taiBAifdsa' s1 = s.upper() #字元串s中字元全部大寫(不會對原字元串進行任何操作,都是產生一個新的字元串 print(s1,type(s1)) #TAIBAICBR s2 = s.lower() #字元串s中字元全部小寫 print(s2,type(s2)) #taibaicbr # 應用: username = input('用戶名') password = input('密碼') code = 'QweA' print(code) your_code = input('請輸入驗證碼:不區分大小寫') if your_code.upper() == code.upper(): if username == '太白' and password == '123': print('登錄成功') else: print('用戶名密碼錯誤') else: print('驗證碼錯誤') startswith endswith #startswith 判斷是否以...開頭 s = 'taiBAifdsa' print(s.startswith('t')) #True ***【重點】 判斷是否以單個字元開頭 print(s.startswith('taiBAi')) #True ***【重點】 判斷是否以多個字元開頭 print(s.startswith(' ')) #False 判斷是否以空格開頭 #endswith 判斷是否以...結尾 s = 'taiBAIcBr' s1 = s.endswith('t') print(s1) #False,返回的是布爾值 s2 = s.endswith('Br') print(s2) #True # 瞭解 s = 'taiBAifdsa' print(s.startswith('B',3,6)) #True 括弧內的字元串必須加引號'B' #切片,顧頭不顧腚。判斷'BAi'是否以B開頭。下標3,6,不包括6對應的f。 s = 'taiBAifdsa' print(s.endswith('f',3,6)) #False replace(old,new,count) #講 msg = 'alex 很nb,alex是老男孩教育的創始人之一,alex長得很帥' msg1 = msg.replace('alex','太白') # 預設全部替換,用'太白'替換'alex' msg1 = msg.replace('alex','太白',2) #用'太白'替換'alex',2表示只替換前兩個字元串 print(msg) #alex 很nb,alex是老男孩教育的創始人之一,alex長得很帥 print(msg1) #太白 很nb,太白是老男孩教育的創始人之一,alex長得很帥 #自 msg = '小明生病了,小明沒去上學,小明在家休息' msg1 = msg.replace('小明','小紅') print(msg1) #小紅生病了,小紅沒去上學,小紅在家休息 msg2 = msg.replace('小明','小紅',2) print(msg2) #小紅生病了,小紅沒去上學,小明在家休息 #自:比如某個字母小寫變大寫,大寫邊小寫 s = ' qw sertyu eqtrti ' s1 = s.replace('t','T',2) print(s1)# qw serTyu eqTrti strip:去除空白,如空格,\t製表符, \n換行符。 # \n(換行符-將游標移動到下一行的開頭) # \t(水平製表符-將游標向右移動一個製表符位) #預設去除字元串兩邊的空格,換行符,製表符 s4 = ' \n太白\t' print(s4) s5 = s4.strip() print(s5) #修改測試 s4 = ' \n太 白 tai \tbai\t' print(s4) s5 = s4.strip() print(s5)#太 白 tai bai #只能去掉兩邊的空白,內部的去不掉 name='*barr*y**' print(name.strip('*')) # barry print(name.lstrip('*')) # barry** print(name.rstrip('*')) # *barry #修改測試 name='*barr*y**' print(name.strip('*')) # barr*y #只把兩邊的*去掉了,內部的*去不了。 print(name.lstrip('*')) # barr*y** print(name.rstrip('*')) # *barr*y # 瞭解:可以去除指定的字元 s4 = 'rre太r白qsd' s5 = s4.strip('qrsed') #括弧內字元串加引號,字元順序無所謂 print(s5) #太r白 #只能去兩頭的對應字元 split 【非常重要】以什麼分割,最終形成一個列表,此列表不含有這個分割的元素。 # str ---> list 字元串類型轉換為列表類型,- 預設按照空格分隔,可以指定分隔符。 # 預設按照空格分隔,返回一個列表 s6 = '太白 女神 吳超' l = s6.split() print(l) #['太白', '女神', '吳超'] # 指定分隔符 s6 = '太白:女神:吳超' l = s6.split(':') # :作為分隔符 print(l) #['太白', '女神', '吳超'] ret9 = 'title,Tilte,atre,'.split('t') # t作為分隔符 print(ret9) #['', 'i', 'le,Til', 'e,a', 're,'] ''空字元 # 瞭解: s6 = ':barry:nvshen:wu' print(s6.split(':')) #['', 'barry', 'nvshen', 'wu'] 註:''空字元串 print(s6.split(":",2)) #['', 'barry', 'nvshen:wu'] #2表示前兩個:有效 #自-實驗 s1 = ' .haha.heihei.hehe.123' s2 = s1.split('.') # .作為分隔符 s3 = s1.split('.',3) print(s2) #[' ', 'haha', 'heihei', 'hehe', '123'] 註:' ' 引號內為空格 print(s3) #[' ', 'haha', 'heihei', 'hehe.123'] join(iterable):聯合,連接,可以操作任何可迭代對象(可迭代:這個數據由多個元素組成,如字元串,列表), s1 = 'alex' s2 = '+'.join(s1) #'設置連接符'.join(iterable) iterable可迭代 用+作為連接符 print(s2) # a+l+e+x(字元串類型) print(s2,type(s2)) # a+l+e+x <class 'str'> #list ---> str 前提:列表裡面的元素必須都是str類型才行 l1 = ['太白', '女神', '吳超'] s3 = ':'.join(l1) #用:作為連接符 print(s3) # 太白:女神:吳超(字元串類型) print(s3,type(s3)) #太白:女神:吳超 <class 'str'> count #count數出字元串中的元素出現的個數。 s8 = 'sdfsdagsfdagfdhgfhgfhfghfdagsaa' print(s8.count('a')) #5,5是數字類型 s9 = s8.count("a",0,11) # 可切片,索引0,11不包含11 print(s9) #2 format: 格式化輸出 # 第一種用法: msg = '我叫{}今年{}性別{}'.format('大壯',25,'男') # 第二種用法: msg = '我叫{0}今年{1}性別{2}我依然叫{0}'.format('大壯', 25,'男') print(msg) # 第三種用法: a = 100 msg = '我叫{name}今年{age}性別{sex}'.format(age=a,sex='男',name='大壯') #此處format()內可以不按順序 print(msg) is 系列: 返回布爾值 name = 'taibai123' name = '100①' print(name.isalnum()) #字元串由字母或數字組成 print(name.isalpha()) #字元串只由字母組成 print(name.isdecimal()) #字元串只由十進位組成 #應用 s1 = input('請輸入您的金額:') if s1.isdecimal(): print(int(s1)) else: print('輸入有誤') 補充: #尋找字元串中的元素是否存在 a4 = "dkfjdkfasf54" ret1 = a4.find("fjdk",1,6) print(ret1) #2 返回的找到的元素的索引,如果找不到返回-1 ret2 = a4.index("fjdk",2,6) print(ret2) #2 返回的找到的元素的索引,找不到報錯。 ret2 = a4.index("fjdk",4,6) print(ret2)#報錯 #captalize,swapcase,title name='taiBAIhi123' print(name.capitalize()) #Taibaihi123 首字母大寫 print(name.swapcase()) #TAIbaiHI123 大小寫翻轉 msg='taibai say hi' print(msg.title()) #Taibai Say Hi 每個單詞的首字母大寫 # 內同居中,總長度,空白處填充 ret3 = a4.center(22,"*") print(ret3)#*****dkfjdkfasf54*****
5.for迴圈:有限迴圈
s1 = '老男孩edu'
print('老' in s1) #True 成員運算符
print('老男' in s1) #True
print('老ed' in s1) #False
print('老ed' not in s1) #True
s1 = '老男孩教育最好的講師:太白'
輸出:
'''
老 s1[0]
男 s1[1]
孩 s1[2]
教 s1[3]
育 ....
最
...
'''
s1 = '老男孩教育最好的講師:太白'
print(len(s1)) #13
#while迴圈代碼(利用while迴圈列印可迭代對象的每個元素)
s1 = '老男孩教育最好的講師:太白'
index = 0
while index < len(s1): # len() :獲取可迭代對象的元素總個數,是內置函數。不是字元串專用的
print(s1[index])
index += 1
# for 迴圈
'''
有限迴圈
for 變數 in iterable:
pass
'''
#for迴圈代碼
s1 = '老男孩教育最好的講師:太白'
for i in s1:
print(i)
#
for i in s1:
print(i)
if i == '好':
break
# break continue
# for else: while else:用法一樣。