Python 數(shù)據(jù)類型
一贺归、整數(shù)
Python可以處理任意大小的整數(shù),當(dāng)然包括負(fù)整數(shù)僧鲁,在Python程序中虐呻,整數(shù)的表示方法和數(shù)學(xué)上的寫法一模一樣,例如:1寞秃,100斟叼,-8080,0春寿,等等朗涩。
計(jì)算機(jī)由于使用二進(jìn)制,所以绑改,有時(shí)候用十六進(jìn)制表示整數(shù)比較方便谢床,十六進(jìn)制用0x前綴和0-9,a-f表示厘线,例如:0xff00识腿,0xa5b4c3d2,等等造壮。
二渡讼、浮點(diǎn)數(shù)
浮點(diǎn)數(shù)也就是小數(shù),之所以稱為浮點(diǎn)數(shù)耳璧,是因?yàn)榘凑湛茖W(xué)記數(shù)法表示時(shí)成箫,一個(gè)浮點(diǎn)數(shù)的小數(shù)點(diǎn)位置是可變的,比如旨枯,1.23x109和12.3x108是相等的蹬昌。浮點(diǎn)數(shù)可以用數(shù)學(xué)寫法,如1.23攀隔,3.14皂贩,-9.01,等等昆汹。但是對于很大或很小的浮點(diǎn)數(shù)先紫,就必須用科學(xué)計(jì)數(shù)法表示,把10用e替代筹煮,1.23x10^9就是1.23e9,或者12.3e8居夹,0.000012可以寫成1.2e-5败潦,等等本冲。
整數(shù)和浮點(diǎn)數(shù)在計(jì)算機(jī)內(nèi)部存儲的方式是不同的,整數(shù)運(yùn)算永遠(yuǎn)是精確的(除法難道也是精確的劫扒?是的C识础),而浮點(diǎn)數(shù)運(yùn)算則可能會有四舍五入的誤差沟饥。
三添怔、字符串
字符串是以''或""括起來的任意文本,比如'abc'贤旷,"xyz"等等广料。請注意,''或""本身只是一種表示方式幼驶,不是字符串的一部分艾杏,因此,字符串'abc'只有a盅藻,b购桑,c這3個(gè)字符。
四氏淑、布爾值
布爾值和布爾代數(shù)的表示完全一致勃蜘,一個(gè)布爾值只有True、False兩種值假残,要么是True缭贡,要么是False,在Python中守问,可以直接用True匀归、False表示布爾值(請注意大小寫),也可以通過布爾運(yùn)算計(jì)算出來耗帕。
布爾值可以用and穆端、or和not運(yùn)算。
and運(yùn)算是與運(yùn)算仿便,只有所有都為 True体啰,and運(yùn)算結(jié)果才是 True。
or運(yùn)算是或運(yùn)算嗽仪,只要其中有一個(gè)為 True荒勇,or 運(yùn)算結(jié)果就是 True。
not運(yùn)算是非運(yùn)算闻坚,它是一個(gè)單目運(yùn)算符沽翔,把 True 變成 False,F(xiàn)alse 變成 True。
五仅偎、空值
空值是Python里一個(gè)特殊的值跨蟹,用None表示。None不能理解為0橘沥,因?yàn)?是有意義的窗轩,而None是一個(gè)特殊的空值。
(或者# -*- coding:utf-8 -*- )
#coding:utf-8 // 如下字符串包含中文座咆,如果不加這一行痢艺,報(bào)錯(cuò):SyntaxError: Non-ASCII character
print('hello worlds打發(fā)')
print 'hello,python.'
print 'hello,','python.' //遇到逗號“,”會輸出一個(gè)空格
print ('hello,python.')
print ('hello,'+'python.')
結(jié)果
注釋
Python的注釋以 # 開頭。
變量
在Python程序中介陶,變量是用一個(gè)變量名表示堤舒,變量名必須是大小寫英文、數(shù)字和下劃線(_)的組合斤蔓,且不能用數(shù)字開頭植酥。
在Python中,等號=是賦值語句弦牡,可以把任意數(shù)據(jù)類型賦值給變量友驮,同一個(gè)變量可以反復(fù)賦值,而且可以是不同類型的變量驾锰。
a = 123 # a是整數(shù)
print a
a = 'imooc' # a變?yōu)樽址?print a
這種變量本身類型不固定的語言稱之為動(dòng)態(tài)語言卸留,與之對應(yīng)的是靜態(tài)語言。
靜態(tài)語言在定義變量時(shí)必須指定變量類型椭豫,如果賦值的時(shí)候類型不匹配耻瑟,就會報(bào)錯(cuò)。例如Java是靜態(tài)語言赏酥,賦值語句如下(// 表示注釋):
int a = 123; // a是整數(shù)類型變量
a = "mooc"; // 錯(cuò)誤:不能把字符串賦給整型變量
理解變量在計(jì)算機(jī)內(nèi)存中的表示也非常重要喳整。當(dāng)我們寫:a = 'ABC'時(shí),Python解釋器干了兩件事情:
在內(nèi)存中創(chuàng)建了一個(gè)'ABC'的字符串裸扶;
在內(nèi)存中創(chuàng)建了一個(gè)名為a的變量框都,并把它指向'ABC'。
也可以把一個(gè)變量a賦值給另一個(gè)變量b呵晨,這個(gè)操作實(shí)際上是把變量b指向變量a所指向的數(shù)據(jù)魏保,例如下面的代碼:
a = 'ABC'
b = a
a = 'XYZ'
print b # b的值是'ABC',還是'XYZ'呢摸屠?
執(zhí)行a = 'ABC'谓罗,解釋器創(chuàng)建了字符串 'ABC'和變量 a,并把a(bǔ)指向 'ABC':
執(zhí)行b = a季二,解釋器創(chuàng)建了變量 b檩咱,并把b指向 a 指向的字符串'ABC':
執(zhí)行a = 'XYZ',解釋器創(chuàng)建了字符串'XYZ',并把a(bǔ)的指向改為'XYZ'税手,但b并沒有更改:
所以蜂筹,最后打印變量b的結(jié)果自然是'ABC'了。
字符串
字符串可以用''或者""括起來表示芦倒。字符串本身包含',用""不翩,如果字符串包含"兵扬,我們就可以用' '。
如果字符串既包含'又包含"怎么辦口蝠?這個(gè)時(shí)候器钟,就需要對字符串的某些特殊字符進(jìn)行“轉(zhuǎn)義”,Python字符串用 \ 進(jìn)行轉(zhuǎn)義妙蔗。
比如要表示字符串 Bob said "I'm OK".
可以寫為:'Bob said \"I\'m OK\".'
注意:轉(zhuǎn)義字符 \ 不計(jì)入字符串的內(nèi)容中傲霸。
常用的轉(zhuǎn)義字符還有:
\n 表示換行
\t 表示一個(gè)制表符
\\ 表示 \ 字符本身
如果要表示多行字符串,可以用'''...'''表示:
'''Line 1
Line 2
Line 3'''
Python中整數(shù)和浮點(diǎn)數(shù)
Python的整數(shù)運(yùn)算結(jié)果仍然是整數(shù)眉反,浮點(diǎn)數(shù)運(yùn)算結(jié)果仍然是浮點(diǎn)數(shù)昙啄。整數(shù)和浮點(diǎn)數(shù)混合運(yùn)算的結(jié)果是浮點(diǎn)數(shù)。
為什么要區(qū)分整數(shù)運(yùn)算和浮點(diǎn)數(shù)運(yùn)算呢寸五?這是因?yàn)檎麛?shù)運(yùn)算的結(jié)果永遠(yuǎn)是精確的梳凛,而浮點(diǎn)數(shù)運(yùn)算的結(jié)果不一定精確,因?yàn)橛?jì)算機(jī)內(nèi)存再大梳杏,也無法精確表示出無限循環(huán)小數(shù)韧拒,比如 0.1 換成二進(jìn)制表示就是無限循環(huán)小數(shù)。
print 11/4 # 2
print 11%4 # 3
print 11.0/4 #2.75
Python中布爾類型
布爾運(yùn)算在計(jì)算機(jī)中用來做條件判斷十性,根據(jù)計(jì)算結(jié)果為True或者False叛溢,計(jì)算機(jī)可以自動(dòng)執(zhí)行不同的后續(xù)代碼。
在Python中劲适,布爾類型還可以與其他數(shù)據(jù)類型做 and楷掉、or和not運(yùn)算,請看下面的代碼:
a = True
print a and 'a=T' or 'a=F' # 輸出a=T
Python把0减响、空字符串''和None看成 False靖诗,其他數(shù)值和非空字符串都看成 True。
要解釋上述結(jié)果支示,又涉及到** and 和 or 運(yùn)算的一條重要法則:短路計(jì)算**刊橘。
1. 在計(jì)算 a and b 時(shí),如果 a 是 False颂鸿,則根據(jù)與運(yùn)算法則促绵,整個(gè)結(jié)果必定為 False,因此返回 a;如果 a 是 True败晴,則整個(gè)計(jì)算結(jié)果必定取決與 b浓冒,因此返回 b。
2. 在計(jì)算 a or b 時(shí)尖坤,如果 a 是 True稳懒,則根據(jù)或運(yùn)算法則,整個(gè)計(jì)算結(jié)果必定為 True慢味,因此返回 a场梆;如果 a 是 False,則整個(gè)計(jì)算結(jié)果必定取決于 b纯路,因此返回 b或油。
list
Python內(nèi)置的一種數(shù)據(jù)類型是列表:list。list是一種有序的集合驰唬,可以隨時(shí)添加和刪除其中的元素顶岸。
構(gòu)造list非常簡單,按照上面的代碼叫编,直接用 [ ] 把list的所有元素都括起來辖佣,就是一個(gè)list對象。通常宵溅,我們會把list賦值給一個(gè)變量凌简,這樣,就可以通過變量來引用list:
classmates = ['Michael', 'Bob', 'Tracy']
由于Python是動(dòng)態(tài)語言恃逻,所以list中包含的元素并不要求都必須是同一種數(shù)據(jù)類型雏搂,我們完全可以在list中包含各種數(shù)據(jù):
L = ['Michael', 100, True]
一個(gè)元素也沒有的list,就是空list:
empty_list = []
此外寇损,list中又可以包含list
fan = [["liz",12],
["tom",23],
["Lisa",24]]
print type(fan) # 輸出fan的數(shù)據(jù)類型
Python 索引訪問list
L = ['hello', 'hi', 'bye']
print L[0] #輸出hello
倒序訪問list
我們可以用 -1 這個(gè)索引來表示最后一個(gè)元素
L = ['hello', 'hi', 'bye']
print L[-1] #輸出bye
print L[-2] # 輸出hi
print L[-3] # 輸出hello
注意訪問list凸郑,不要越界!
添加新元素
- 向list的尾部添加元素 append
L = ['Adam', 'Lisa', 'Bart']
L.append('Paul')
print L #輸出 ['Adam', 'Lisa', 'Bart', 'Paul']
或者
L = L + ['hello']
print L # 輸出 ['Adam', 'Lisa', 'Bart','hello']
- 向list指定的位置插入新元素用insert( )方法矛市,接受兩個(gè)參數(shù)芙沥,第一個(gè)是索引號,第二個(gè)是新元素浊吏。
L = ['Adam','Lisa','Bart']
想把一個(gè)新元素Paul插入到Adam的前面而昨,也就是說Paul將要放在第一位
L.insert(0,'Paul') # 或者L.insert(-3,'Paul')
print L # 輸出['Paul', 'Adam', 'Lisa', 'Bart']
從list刪除元素
pop()方法總是刪掉list的最后一個(gè)元素,并且它還返回這個(gè)元素找田。
L = ['Adam','Lisa','Bart','Paul']
L.pop() #輸出Paul
print L #['Adam','Lisa','Bart']
如果想要?jiǎng)h除的元素不是最后一個(gè)歌憨,則需要指定它的索引
# 比如想要?jiǎng)h除Bart
L = ['Adam','Lisa','Bart','Paul']
L.pop(2) #輸出Bart
print L #['Adam','Lisa','Paul']
還有del()方法
fan = [["liz",12],
["tom",23],
["Lisa",24]]
del(fan[1])
print fan
替換元素
對list的某一個(gè)索引賦值,就可以直接用新的元素替換掉原來的元素墩衙,list包含的元素個(gè)數(shù)保持不變务嫡。
L = ['Adam', 'Lisa', 'Bart']
#想要將Adam和Bart的位置變換一下
L[0] = 'Bart'
print L # 輸出['Bart', 'Lisa', 'Bart']
L[-1] = 'Adam'
print L # 輸出 ['Bart', 'Lisa', 'Adam']
tuple
tuple和list非常類似甲抖,但是tuple一旦初始化就不能修改。訪問也是通過下標(biāo)心铃,用小括號() 表示准谚。
t = ('Adam','Lisa','Bart')
print t # 輸出('Adam','Lisa','Bart')
這個(gè) t 就不能改變了,tuple沒有 append()方法去扣,也沒有insert()和pop()方法柱衔。
獲取 tuple 元素的方式和 list 是一模一樣的,我們可以正常使用 t[0]厅篓,t[-1]等索引方式訪問元素秀存,但是不能賦值成別的元素。
創(chuàng)建單元素tuple
包含0個(gè)元素的tuple羽氮,也就是空tuple,直接用()表示惫恼。
t = ()
print t #輸出()
為避免歧義档押,單元素tuple要多加一個(gè)逗號“, ”
t = (1,)
print t # 輸出 (1,)
多元素 tuple 加不加這個(gè)額外的“,”效果是一樣的:
t = (1, 2, 3,)
print t # 輸出 (1, 2, 3)
“可變”的tuple
t有3個(gè)元素,'a'祈纯,'b'和一個(gè)list:['A', 'B']令宿。list作為一個(gè)整體是tuple的第三個(gè)元素。
t = ('a','b',['A','B'])
print t[2] # 輸出 ['A','B']
將list的兩個(gè)元素改一改
不是說tuple一旦定義后就不可變了嗎腕窥?怎么現(xiàn)在又變了粒没?
tuple一開始指向的list并沒有改成別的list,所以簇爆,tuple所謂的“不變”是說癞松,tuple的每一個(gè)元素,指向永遠(yuǎn)不變入蛆。即指向'a'响蓉,就不能改成指向'b',指向一個(gè)list哨毁,就不能改成指向其他對象枫甲,但指向的這個(gè)list本身是可變的!
if語句
直接上例子:
age = 20
if age >= 18:
print 'Your age is',age
print 'adult'
print 'END'
注意:Python的縮進(jìn)規(guī)則扼褪,具有相同縮進(jìn)的代碼被視為代碼塊想幻,進(jìn)行縮進(jìn)的時(shí)候,記住千萬不要混用tab和空格话浇,只許堅(jiān)持用一種脏毯。
if語句后接表達(dá)式,然后用: 表示代碼塊開始
如果你在Python交互環(huán)境下敲代碼凳枝,還要特別留意縮進(jìn)抄沮,并且退出縮進(jìn)需要多敲一行回車:
>>> age = 20
>>> if age >= 18:
... print 'your age is', age
... print 'adult'
...
your age is 20
adult
if-else
score = 55
if score >= 60:
print 'passed'
else:
print 'failed'
if-elif-else
score = 85
if score >= 90:
print 'excellent'
elif score >= 80:
print 'good'
elif score >= 60:
print 'passed'
else:
print 'failed'
for循環(huán)
L = ['Adam', 'Lisa', 'Bart']
for name in L:
print name
while
計(jì)算100以內(nèi)奇數(shù)的和
sum = 0
x = 1
while x < 100:
sum = sum + x
x += 2
print sum
break退出循環(huán)
用for循環(huán)或者while循環(huán)跋核,如果要在循環(huán)體內(nèi)直接退出循環(huán),可以使用break語句叛买。
# 計(jì)算1至100的整數(shù)和
sum = 0
x = 1
while True:
sum = sum + x
x = x + 1
if x > 100:
break
print sum
continue繼續(xù)循環(huán)
在循環(huán)過程中砂代,可以用break退出當(dāng)前循環(huán),還可以用continue跳過后續(xù)循環(huán)代碼率挣,繼續(xù)下一次循環(huán)刻伊。
# 計(jì)算0-100中的奇數(shù)的和
sum = 0
x = 0
while True:
x = x + 1
if x > 100:
break
if x % 2 == 0:
continue
sum = sum + x
print sum
多重循環(huán)
對100以內(nèi)的兩位數(shù),請使用一個(gè)兩重循環(huán)打印出所有十位數(shù)數(shù)字比個(gè)位數(shù)數(shù)字小的數(shù)椒功,例如捶箱,23(2 < 3)。
for x in [1,2,3,4,5,6,7,8,9]:
for y in [1,2,3,4,5,6,7,8,9]:
if x < y:
print x * 10 +y
dict
d = {
'Adam':95,
'Lisa':85,
'Bart': 59,
'Paul':75
}
訪問dict
使用d[key]的形式來查找對應(yīng)的value动漾。
d = {
'Adam': 95,
'Lisa': 85,
'Bart': 59
}
print 'Adam:',d['Adam']
print 'Lisa:',d['Lisa']
print 'Bart:',d['Bart']
# 使用dict本身提供的一個(gè)get方法丁屎,在Key不存在的時(shí)候,返回None
print d.get('Bart') #輸出59
print d.get('Paul') #輸出None
# 判斷key是否存在旱眯,用 in 操作符
if 'Lisa' in d:
print d['Lisa']
list的切片
# 索引 0 1 2 3 4 5 6 7
fam = ['ware', 12, 'Tom', 122, 'DS', 13, 'Lisa', 121]
# [起點(diǎn):終點(diǎn)] 起點(diǎn)對應(yīng)的包含晨川,終點(diǎn)對應(yīng)的不包含
print fam[3:5] # 輸出[122,'DS']
print fam[1:4] # 輸出[12, 'Tom', 122]
# 沒有指定起點(diǎn)
print fam[:4] # 輸出 ['ware', 12, 'Tom', 122]
# 沒有指定終點(diǎn)
print fam[5:] #輸出 [13, 'Lisa', 121]
關(guān)于list
將x賦給y,拷貝的并不是list 即x的內(nèi)容删豺,而是x的引用共虑,即地址,x和y在內(nèi)存中指向的是同一個(gè)地址呀页。不管改變x的值妈拌,還是y的值,打印出倆者的值都是一樣的蓬蝶,因?yàn)樗鼈兪峭粋€(gè)list尘分。
要想完全創(chuàng)建一個(gè)新的list,和x一樣的list疾党,可以通過list(x) 或者list的切片方式x[:]
函數(shù)
list中的方法
# 獲取某個(gè)元素的索引
L = ['Lisa','Paul','Bart','Paul']
L.index('Bart') # 輸出2
# 某個(gè)元素在list中出現(xiàn)的次數(shù)
L.count('Paul') # 2
str的方法
將字符串的首字母大寫
sister = 'lis'
print sister.capitalize() #輸出Lis
# 替換某些字符
sister = sister.replace('s','sa')
print sister #輸出lisa
# 獲取某個(gè)字母在字符串中的索引
print sister.index('i') # 1