1. 程式人生 > 實用技巧 >資料型別-數值&字串

資料型別-數值&字串

一、數值

1.1整型int

作用:年紀、等級、手機號、身份證號等整型數字相關

定義:age=10 # 本質age=int(10)

1.2浮點型float
作用:身高、薪資、體重等浮點數字相關

定義:salary=3000.3 #本質salary=float(3000.3)

二、字串 

2.1簡介

作用:名字、性別、地址等描述性資訊

定義:在單引號\雙引號\三引號內,由一串字元組成,name = 'sean' age = '18'

可以把任意型別資訊轉為字串:

name = str(int(1))
print(type(name))

2.2需掌握的操作

2.2.1按索引取值(正向取+反向取) :只能取

msg = 'hello world'
print(msg[0]) #輸出h
print(msg[-1]) #輸出d
print(msg[5]) #空格也佔位置即字元數


2.2.2切片(顧頭不顧尾,步長)

msg = 'hello world'
res = msg[0:5:2] # 1 2 3 4 起始位置為0,截止位置為5,步長值為2,共計3個元素。
print(res)
print(msg)

msg = 'hello world'
res=msg[1:5] #預設步長值為1
print(res)
res=msg[1:] #可以省略截至位置及步長值,預設截至位置為終點,步長值為1
print(res)
res=msg[:5] #可以省略開始位置及步長值,預設開始位置為開頭,步長值為1
print(res)
res=msg[::1] #可以省略開始及截止位置,預設開始位置為開頭,截至為止為終點,步長值為1
print(res)

msg = 'hello world'
print(id(msg))
res=msg[:]
print(id(res))
print(res)
print(res is msg) #複製功能,msg與res值相等,且id相等

msg = 'hello world'
print(msg[-1:-3:-1]) # 負數表示從右往左倒著取值,步長值也必須是負數。其他功能與正著取值一樣。
print(msg[-1::-1]) # -1 -2
print(msg[::-1]) # -1 -2

2.2.3長度len

msg = 'hello '
print(len(msg)) #空格也站字元數量

2.2.4成員運算in和not in

msg='sean is elegant'
print('sean' in msg)
print('sean' not in msg) # not 推薦使用此種類型寫法
print(not 'XX' in msg)

2.2.5移除空白strip:原理:對左側和右側任何符號依次移除。

name = '   sean****'
print(name.strip(' '))
print(name.lstrip('*'))
print(name.rstrip('*'))

msg = "#%*hello##**!"
res = msg.strip("#!*%") # strip一個一個的移除
print(res)

msg = "#%*hello##**!"
res=msg.replace('#!*%','') #將被替換的視為整體,進行替換,
print(res)


2.2.6切分split

name = 's e a n' #預設分隔符為空格
print(name.split())

name='root:x:0:0::/root/bin/bash'
print(name.split(':',1)) #只想拿到頂級目錄

name ='s*e*a*n'
print(name.split('*',2)) #從左往右依次累計切分


2.2.7迴圈

for x in "hello":
print(x)

for i in range(10,20,2): #數值為顧頭不顧尾 ,3個元素,開始,終止,及步長值,預設為1.
print(i)

2.2.8 大小寫切換

name = 'Sean'
print(name.upper())
print(name.lower())

captalize(句子起頭單子首字母大寫),swapcase(大寫變小寫,小寫變大寫),title(單詞首字母大寫)
msg="hello world sean"
print(msg.capitalize()) #無元素 句子首個單詞的首字母大寫

x="AbCdE"
print(x.swapcase()) #無元素

msg="hello world egon" #無元素 每個單詞首字母大寫
print(msg.title())

2.2.9 startswith與endswith判斷以什麼開始或結尾,真返回True,假返回False

name='sean'
print(name.endswith('a'))
print(name.startswith('s'))

2.2.10 replace替換(舊字元,新字元,需要被替換第幾個字元(不寫則全部替換))可替換空格、大寫小字母、字母、數字等

name = 's e an'
print(name.replace(' ',''))

msg = "#%*hello##**!"
res = msg.strip("#!*%") # strip一個一個的移除
print(res)

msg = "#%*hello##**!"
res=msg.replace('#!*%','') #將被替換的視為整體,進行替換,
print(res)

2.2.11 join 迭代的物件必須都是字串,把所有字串連線起來

tag='*' #連結符號可以自定義:空格、*、#等
print(tag.join('sean'))
print(tag.join(['sean','age','is','18'])) #可迭代物件必須都是字串

2.2.12 format格式化輸出用法三則:

res='{} {} {}'.format('egon',18,'male') #無索引順序,則預設按照由左至右依次輸出
print(res)
res1='{1} {0} {1}'.format('egon',18,'male') #順序為:sean為0,18為1,male為2,此時按照索引順序輸出
print(res1)
res2='{name} {age} {sex}'.format(sex='male',name='egon',age=18) #有key,則按照key的順序輸出,推薦使用此種方式
print(res2)

2.2.13 center,ljust,rjust,zfill

name="sean"
print(name.center(10,'*')) # 單詞位於中心,左右各填充(10-單詞)/2個*
print(name.ljust(10,'*')) # 字元左側各填充(10-單詞)個*
print(name.rjust(10,'*')) # 字元右側各填充(10-單詞)個*
print(name.zfill(10)) # 字元左側各填充(10-單詞)個0,用0填充

2.2.14 find,rfind,index,rindex,count

name='egon say hello'
print(name.find('e',0,2)) #顧頭不顧尾,找不到則返回-1不會報錯,找到了則顯示索引位置,從0開始計數
# print(name.index('e',2,4)) #同上,但是找不到會報錯
print(name.count('e',1,3)) #顧頭不顧尾,如果不指定範圍則查詢所有,找到返回查詢物件的個數
print(name.count('o')) #顧頭不顧尾,如果不指定範圍則查詢所有,找到返回查詢物件的個數

2.2.15 isdigit:判斷字串是否是由純數字(整數)組成的

print('18'.isdigit())
print('18.3'.isdigit())


age = input('your age: ').strip() # age="19",strip用於刪除使用者輸入的空格,確保數值為純數字。
if age.isdigit():
age = int(age)
if age > 18:
print('too big')
elif age < 18:
print('too small')
else:
print('right')
else:
print("必須輸入數字,小垃圾")

2.2.16 is其他用法

1)is數字系列
#在python3中
num1=b'4' #bytes
num2=u'4' #unicode,python3中無需加u就是unicode
num3='四' #中文數字
num4='Ⅳ' #羅馬數字

#isdigt:bytes,unicode
print(num1.isdigit()) #True
print(num2.isdigit()) #True
print(num3.isdigit()) #False
print(num4.isdigit()) #False

#isdecimal:uncicode
#bytes型別無isdecimal方法
print(num2.isdecimal()) #True
print(num3.isdecimal()) #False
print(num4.isdecimal()) #False

#isnumberic:unicode,中文數字,羅馬數字
#bytes型別無isnumberic方法
print(num2.isnumeric()) #True
print(num3.isnumeric()) #True
print(num4.isnumeric()) #True

#三者不能判斷浮點數
num5='4.3'
print(num5.isdigit())
print(num5.isdecimal())
print(num5.isnumeric())

總結:
最常用的是isdigit,可以判斷bytes和unicode型別,這也是最常見的數字應用場景
如果要判斷中文數字或羅馬數字,則需要用到isnumeric


2)is其他
print('===>')
name='egon123'
print(name.isalnum()) #字串由字母或數字組成
print(name.isalpha()) #字串只由字母組成

print(name.isidentifier())
print(name.islower())
print(name.isupper())
print(name.isspace())
print(name.istitle())