Python十講 - 第二講:變量和基礎數據類型
本講主要內容
變量
字符串
數字和運算符
數據類型轉換
2.1 變量
1. 變量是什麽?
變量,是指把程序運行的中間結果臨時的存在內存裏,以便後續的代碼調用,其值可以修改。
在python中,當變量被使用時,在內存裏將產生兩個動作,一是開辟指定地址的空間,二是賦予指定的變量值。
在python語言中,變量在指定的同時,必須強制賦初值,否則解釋器報錯。
name # name變量未賦值,解釋器認為非法,報未定義錯誤 name = ‘kidd‘ # name變量賦予初值‘kidd‘,解釋器執行通過
這裏的name為變量名,其值為‘kidd‘。Python變量賦值通過等號(=)來實現。
變量建立的結果,往往被其他代碼所使用。例如:
x = 1+2+3+4 print(x) # print函數打印變量x的結果,輸出10
2. 多個變量賦值
Python允許同時為多個變量賦值。
one = two = three = 1 print(one, two, three) # print函數允許多值打印輸出,用逗號分隔變量
註:one, two, three三個變量在內存中指向同一個地址。也可以按照下面的格式,給不同的變量名賦值:
one, two, three = 1, 1, 1 print(one, two, three) #print輸出值也為三個連續的1
3. 變量值類型
所有編程語言的變量值都是分類型的,Python語言變量值的類型在賦值後才被隱性確定。
例如x = 0,那麽0就是整數類型的值;x = ‘ok‘,那麽ok就是字符串類型的值;x = True,那麽True就是布爾類型的值。
Python語言的基本變量類型包括字符串、數字、列表、元組、字典五大類。
註:變量命名規則 (1)變量只能由字母、數字、下劃線組成。 (2)不能以數字開頭。 (3)不能是python中的關鍵字 (4)大小寫區分,a = 1和A = 1是兩個變量。 以上要求是必須滿足的,下面的要求要盡量做到 (5)變量名要有描述性,要簡潔、易讀,不宜過長。 (6)變量名不能使用中文以及拼音。 (7)官方推薦使用的變量名: 下劃線:my_name = ‘kidd‘ 駝峰體:MyName = ‘kidd‘
註:關於常量
常量,即不能變的數據對象。
在python中,常量名全部為大寫,且放在文件的最上面。
NAME = ‘kidd’
2.2 字符串
字符串,由任意字節的字符組成,用單引號(‘)、雙引號( “)或三引號(‘‘‘)成對表示。
簡單的說,凡是用引號括起來的就是字符串。
name = ‘kidd‘ name1 = "kidd"
單雙引號配合使用:
s = "I‘m kidd"
當一個字符串有多行時,一般考慮使用三引號:
msg = ‘‘‘床前明月光, 疑是地上霜, 舉頭望明月, 低頭思故鄉。‘‘‘
註:只有引號,沒有字節內容的字符串也是合法的。例如name = ‘‘
2.2.1 字符串的基本操作
字符串值基本操作包括讀取、合並、修改、刪除、查找
1. 字符串值的讀取
s = ‘Tom is a cat‘
代碼中的字符串在內存中的存放順序如下表所示:
s字符串: | T | o | m | i | s | a | c | a | t | |||
對應下標地址: | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
從上表可以看出,字符串中的每個字符都對應一個下標。字符串的下標都是從0開始。
註:下面對字符串進行的操作,形成的都是一個新的字符串,與原來的字符串沒有關系
(1)按照索引取值:[下標]。
s1 = s[2] # 讀取下標為2的字符 print(s1) 結果:m
(2)按照切片取值:[左下標: 右下標],顧頭不顧尾。
s2 = s[4:6] # 讀取下標為4,5的字符 print(s2) 結果:is
(3)帶冒號省略下標方式切片:[左下標: ]、[: 右下標]、[ : ]。
s3 = s[: 3] # 讀取下標為前三個的字符 print(s3) 結果:Tom [: 3] 指的是從字符串的開始,讀到下標為2的字符 s4 = s[9: ] # 讀取下標從第9到最後的字符 print(s4) 結果:cat s5 = s[:] # 讀取整個字符串 print(s5) 結果:Tom is a cat
(4)負數下標讀取:用負數下標從右到左讀取對應的字符串值。
s6 = s[-1] # 從右往左,讀取右邊第一個字符 print(s6) 結果:t s7 = s[-3: -1] # 從右往左,讀取倒數第三個、倒數第二個字符 print(s7) 結果:ca
(5)帶步長的切片讀取:[左下標: 右下標: 步長]。
s8 = s[: : 2] # 從頭到尾,步長為2,讀取對應字符 print(s8) 結果:Tmi a # 如果想倒序取值,加一個反向步長(步長前加負號) s9 = s[-1:-6: -2] print(s9) 結果:tca
註1:Python在采用下標讀取其他對象值時,也統一采用類似風格的下標使用方法,如後面要講到的列表、元組等。
註2:使用下標時,超出字符串範圍讀取值,解釋器將報錯。
2. 字符串值合並
對於不同的字符串,可以通過加號(+)進行合並操作
name = ‘kidd‘ job = ‘student‘ res = name + ‘, ‘ + job # 用加號合並三個字符串 print(res) 結果:kidd, student
註:字符串值也可以與數字相乘 s = ‘錦鯉‘ s1 = s * 6 # 重復顯示6個錦鯉 print(s1) 結果:錦鯉錦鯉錦鯉錦鯉錦鯉錦鯉
3. 字符串值修改
replace:替換 s = ‘Tom is a cat, Tom...‘ s1 = s.replace(‘Tom‘, ‘Jack‘) # 前面為要替換的內容,後面為替換的內容 print(s1) 結果:Jack is a cat, Jack... # 可以設置替換次數,但是只能從前往後開始替換 s2 = s.replace(‘Tom‘, ‘Jack‘, 1) print(s2) 結果:Jack is a cat, Tom...
name = ‘I am a student‘ new_name = name[: 7] + ‘teacher‘ print(new_name) 結果:I am a teacher 上述字符串值的修改,是通過讀取子字符串並合並的方法實現的。 不能直接對字符串做如下修改操作: name[3] = ‘i‘ # 解釋器將報錯
4. 字符串值刪除
strip:默認去除字符串前後的空格、換行符(\n)、制表符(\t) name = ‘\tblame kidd ‘ print(name.strip()) 結果:‘blame kidd‘ # 加引號是為了區分空格 # 也可以指定去除的字符 name = ‘**blame kidd*‘ print(name.strip(‘*‘)) # 去除字符串首尾的* 結果:blame kidd name = ‘iwakiddwa‘ print(name.strip(‘wai‘)) 結果:kidd 去除字符串前面的空格:lstrip 去除字符串後面的空格:rstrip # 應用舉例:登錄賬戶時 username = input(‘請輸入用戶名:‘).strip() if username == ‘kidd‘: print(‘登錄成功!‘)
del:刪除整個字符串值 del(name) # 清楚內存中的name,再次調用name將報錯
說明:del(x)函數函數內存中一個指定的對象x,x可以是字符串、數字、列表、元組、字典、類等。
5. 字符串值查找
判斷以什麽為開頭:startswith print(name.startswith(‘bl‘)) # 判斷是否以bl開頭 結果:True print(name.startswith(‘e‘, 4)) # 判斷第5個位置之後的字符串以什麽開頭 結果:True print(name.startswith(‘la‘, 1, 5)) # 判斷第2個位置到第5個位置的字符串以什麽為開頭 結果:True
判斷以什麽為結尾:endswith
與startswith用法一致
通過元素找索引,找到第一個元素就返回索引值,沒有此元素則返回-1:find print(name.find(‘a‘)) 結果:2 print(name.find(‘d‘)) 結果:7 print(name.find(‘w‘)) 結果:-1 print(name.find(‘m‘, 1, -1)) # find可以設置查找的字符串的開始位置和結束位置 結果:3
通過元素找索引,找到第一個元素就返回其索引值,沒有此元素則報錯:index print(name.index(‘a‘)) 結果:2 print(name.index(‘w‘)) # 沒有w,報錯
2.2.2 其它常用操作
1. 獲取字符串長度
用len函數可以獲取字符串長度
name = ‘blame kidd‘ print(len(name)) 結果:10
說明:len(x)函數返回一個對象的長度,x可以是字符串、列表、元組、字典。
註:
在python3.6版本中,把一個漢字看作一個字符串長度
在python2.x版本中,把一個漢字看作兩個字符串長度
2. r/R原始字符串控制符號
print(‘D:\back\name‘) # 字符串裏含特殊轉移符號,\b, \n 結果:D:ack # 沒有使用r情況下,\b轉為了退格符,實現了退一格的效果 ame # \n轉為了換行符,實現了其後字母的換行顯示 print(r‘D:\back\name‘) 結果:D:\back\name # 在使用r情況下,字符串原樣輸出,轉義字符不起作用
3. split:將字符串分割成列表(str -- > list), 默認按照空格分割
s = ‘apple huawei xiaomi‘ l1 = s.split() # 默認按照空格分割 print(l1) 結果:[‘apple‘, ‘huawei‘, ‘xiaomi‘] s = ‘apple, huawei xiaomi‘ l2 = s.split(‘,‘) print(l2) 結果:[‘apple‘, ‘huawei xiaomi‘]
註意這三個的區別: s1 = ‘ apple huawei xiaomi‘ print(s1.split()) 結果:[‘apple‘, ‘huawei‘, ‘xiaomi‘] s2 = ‘ apple huawei xiaomi‘ print(s2.split(‘ ‘)) 結果:[‘‘, ‘apple‘, ‘huawei‘, ‘xiaomi‘] s3 = ‘,apple,huawei,xiaomi‘ print(s3.split(‘,‘)) 結果:[‘‘, ‘apple‘, ‘huawei‘, ‘xiaomi‘]
# 可以設置split的分割次數 s = ‘blameliop‘ print(s.split(‘l‘, 1)) 結果:[‘b‘, ‘lameliop]
4. join:自定制連接符,將可叠代對象中的元素連接起來
s = ‘kidd‘ s1 = ‘*‘.join(s) print(s1) 結果:k*i*d*d
5. capitalize:首字母大寫
name = ‘blame kidd‘ print(name.capitalize()) 結果:Blame kidd
6. title:非字母隔開的每個部分的首字母大寫
name = ‘blame kidd‘ print(name.title()) 結果:Blame Kidd
7. center:字符串居中,前後填充自定義的字符
name = ‘blame kidd‘ print(name.center(20, ‘*‘)) 結果:*****blame kidd*****
8. upper:字符串全部大寫;;lower:字符串全部小寫
name = ‘Blame Kidd‘ print(name.upper()) 結果:BLAME KIDD print(name.lower()) 結果:blame kidd
應用場景:驗證碼不區分大小寫 code = ‘AjkG‘.lower() your_code = input(‘請輸入驗證碼:‘).lower() if code == your_code: print(‘驗證成功!‘)
9. swapcase:大小寫轉換
name = ‘BlaMe kiDd‘ print(name.swapcase()) 結果:bLAmE KIdD
10. 格式化輸出:%、format
# %s為格式化字符串;%d為格式化整數 name = ‘blame kidd‘ age = 18 print(‘My name is %s, My age is %d‘%(name, age)) 結果:My name is blame kidd, My age is 18
format有三種方式 第一種: s1 = ‘我叫{}, 今年{}‘.format(‘kidd‘, ‘18‘) print(s1) 結果:我叫kidd, 今年18 第二種: s2 = ‘我叫{0}, 今年{1}, 我還是叫{0}‘.format(‘kidd‘, ‘18‘) print(s2) 結果:我叫kidd, 今年18, 我還是叫kidd 第三種: s3 = ‘我叫{name}, 今年{age}, 我還是叫{name}‘.format(age = ‘18‘, name = ‘kidd‘) print(s3) 結果:我叫kidd, 今年18, 我還是叫kidd
11. is系列
name = ‘kidd123‘ print(name.isalpha()) # 判斷name是否全部以字母組成 結果:False print(name.isdigit()) # 判斷name是否全部以數字組成 結果:False print(name.isalnum()) # 判斷name是否以字母或者數字組成 結果:True
12. count:計數
name = ‘blame kidd‘ print(name.count(‘d‘)) # 計算給定字符出現幾次,可以進行切片 結果:2
Python十講 - 第二講:變量和基礎數據類型