1. 程式人生 > >Python十講 - 第二講:變量和基礎數據類型

Python十講 - 第二講:變量和基礎數據類型

常用操作 舉例 字符串長度 2.x 分隔 pla ble 大小寫轉換 2個

本講主要內容

變量

字符串

數字和運算符

數據類型轉換

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(rD:\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十講 - 第二講:變量和基礎數據類型