Python - Day5

廖雪峰:Python教程

1.因?yàn)橛?jì)算機(jī)只能處理數(shù)字氛改,如果要處理文本些举,就必須先把文本轉(zhuǎn)換為數(shù)字才能處理馒吴。最早的計(jì)算機(jī)在設(shè)計(jì)時(shí)采用8個(gè)比特bit作為一個(gè)字節(jié)勇垛,所以脖母,一個(gè)字節(jié)能表示的最大整數(shù)就是255,如果要表示更大的整數(shù)闲孤,就需要更多的字節(jié)谆级。

2.處理中文時(shí)一個(gè)字節(jié)顯然是不夠的,至少需要兩個(gè)字節(jié)崭放,而且還不能和ASCII編碼沖突哨苛,所有,中國(guó)制定了GB3212(國(guó)標(biāo))編碼币砂,用來(lái)把中文編進(jìn)去建峭。

3.各國(guó)有各國(guó)的標(biāo)準(zhǔn),就會(huì)不可避免地出現(xiàn)沖突决摧,因此亿蒸,Unicode(萬(wàn)國(guó)碼)應(yīng)運(yùn)而生,Unicode把所有語(yǔ)言都統(tǒng)一到一套編碼里掌桩,這樣就不會(huì)再有亂碼問(wèn)題边锁。Unicode標(biāo)準(zhǔn)中,最常用的使用兩個(gè)字節(jié)表示一個(gè)字符(如果用到非常偏僻的字符波岛,則需要4個(gè)字節(jié))茅坛。

4.ASCII編碼和Unicode編碼的區(qū)別:
ASCII編碼是1個(gè)字節(jié)。
Unicode編碼通常是2個(gè)字節(jié)则拷。

5.UTF-8編碼誕生的原因贡蓖?
①字符AASCII編碼是十進(jìn)制的65曹鸠,二進(jìn)制的01000001。如果把ASCII編碼的AUnicode編碼斥铺,只需要在前面補(bǔ)8個(gè)0即可彻桃。

②如果統(tǒng)一換成Unicode編碼,亂碼的問(wèn)題就迎刃而解了晾蜘。但是邻眷,如果你寫(xiě)的文本基本上都是英文的話,用Unicode編碼會(huì)比用ASCII編碼多一倍的存儲(chǔ)空間剔交,在存儲(chǔ)和傳輸上就非常的不劃算肆饶。

UTF-8編碼把一個(gè)Unicode字符根據(jù)不同的數(shù)字大小編碼成1-6個(gè)字節(jié),常用的英文字母被編碼成1個(gè)字節(jié)省容,漢字通常是3個(gè)字節(jié)抖拴,只有很生僻的字符才會(huì)被編碼成4-6個(gè)字節(jié)。

ASCII和Unicode和UTF-8.png

6.小結(jié):現(xiàn)在計(jì)算機(jī)系統(tǒng)通用的字符編碼工作方式腥椒。
①在計(jì)算機(jī)內(nèi)存中阿宅,統(tǒng)一使用Unicode編碼,當(dāng)需要保存到硬盤(pán)或需要傳輸?shù)臅r(shí)候笼蛛,就轉(zhuǎn)換為UTF-8編碼洒放。

7.Python3版本中,字符串是以Unicode編碼的滨砍,也就是說(shuō)Python的字符串支持多語(yǔ)言往湿。

8.如何將十進(jìn)制數(shù)轉(zhuǎn)換為十六進(jìn)制:

十進(jìn)制轉(zhuǎn)換為十六進(jìn)制.png

9.ord()chr()函數(shù) - ordinal & character

ord&chr.png

10.bytes類(lèi)型
①存在的原因?

字節(jié)字符字符串.png
bytes類(lèi)型.png

11.encode()decode()

純英文encodeDecode.png
中文的編碼和解碼.png
  • 含有中文的str可以用UTF_8編碼為bytes惋戏。
  • 含有中文的str無(wú)法用ASCII編碼领追,因?yàn)橹形木幋a的范圍超過(guò)了ASCII編碼的范圍。

12.要計(jì)算str包含多少個(gè)字符响逢,可以用len()函數(shù)绒窑。

①如果換成byteslen()函數(shù)就計(jì)算字節(jié)數(shù)

len字符數(shù)和字節(jié)數(shù).png
  • 可見(jiàn)一個(gè)中文字符經(jīng)過(guò)utf-8編碼后通常會(huì)占用3個(gè)字節(jié)舔亭,而一個(gè)英文字符只占用1個(gè)字節(jié)些膨。

13.小結(jié)

  • strbytes互相轉(zhuǎn)換時(shí),需要指定編碼钦铺。最常用的就是utf-8订雾。

14.list - 列表
listPython內(nèi)置的一種數(shù)據(jù)類(lèi)型,是一種有序的集合矛洞,可以隨時(shí)添加和刪除其中的元素洼哎。

②獲取列表最后一個(gè)元素的兩種方式:

獲取列表中最后一個(gè)元素的兩種方式.png

③不止-1喔,還可以-2,-3... a[-i] = a[len(a)+(-i)]

不止-1喔.png

④list是一個(gè)可變的有序表谱净,因此窑邦,可以往list中追加元素到末尾:

list的append().png

⑤那怎么刪除list末尾的元素呢擅威? - pop()

list的pop()方法.png

pop(i)還可以刪除指定位置的元素喔:

pop(i)刪除指定位置的元素.png

⑦要把某個(gè)元素?fù)Q成別的元素壕探,可以直接復(fù)制給對(duì)應(yīng)的索引位置:

asan換shoushan.png

15.tuple
①是什么?另一種有序列表郊丛,叫元組李请。

②和list的區(qū)別?

  • tuple一旦初始化就不能修改厉熟。也就不能用append(),insert()导盅,pop()這樣的方法。

tuple的存在的意義揍瑟?

  • 因?yàn)?code>tuple不可變白翻,所以代碼更安全。

tuple是如何表示的绢片?

tuple用圓括號(hào)()表示.png

⑤這樣表示存在一種歧義:如果tuple內(nèi)僅有1個(gè)數(shù)據(jù)滤馍,注意要加個(gè)逗號(hào),喔!5籽巢株!

當(dāng)tuple中只有一個(gè)數(shù)據(jù)時(shí)注意逗號(hào)喔.png
  • 因?yàn)閳A括號(hào)()既可以表示tuple,也可以表示數(shù)學(xué)公式中的小括號(hào)亚斋。因此唧喉,Python規(guī)定厢洞,在這種情況下,按小括號(hào)進(jìn)行計(jì)算那槽,計(jì)算結(jié)果為1。

tuple所謂的"不變"等舔,是指:指向永遠(yuǎn)不變骚灸。即指向'a',就不能改成'b'软瞎,指向一個(gè)list逢唤,就不能改成指向其他對(duì)象,但是指向的這個(gè)list本身是可變的涤浇!

tuple中的list本身是可變的.png

16.小結(jié)
listtuplePython內(nèi)置的有序集合鳖藕,一個(gè)可變,一個(gè)不可變只锭。

17.if語(yǔ)句執(zhí)行的特點(diǎn)著恩,從上到下,如果在某個(gè)判斷是True,則執(zhí)行該判斷對(duì)應(yīng)的語(yǔ)句喉誊,就忽略掉剩下的elifelse邀摆。

if x:   //x為0,空字符串伍茄,空l(shuí)ist時(shí)栋盹,判斷為False

18.input()返回的數(shù)據(jù)類(lèi)型是str

input輸出的是str.png

解決:用int()str轉(zhuǎn)換為整數(shù)

int()將str轉(zhuǎn)換為整數(shù).png

19.計(jì)算1+2+...+100

1+2+3+到100.png
while.png

20.我想打印1-10中的所有奇數(shù)敷矫?

①方法1

獲取1-10中的所有奇數(shù)方法1.png

continue的一大坑

continue一大坑.png

③正確使用continue獲取1-10中的奇數(shù)

continue就是跳過(guò)本次循環(huán).png

21.小結(jié)
break語(yǔ)句可以在循環(huán)過(guò)程中直接退出循環(huán)例获。

continue語(yǔ)句可以提前結(jié)束本輪循環(huán)(本輪循環(huán)continue之后的語(yǔ)句將不再執(zhí)行),直接開(kāi)始下一輪循環(huán)曹仗。

③命令行模式下榨汤,如果死循環(huán)了,Ctrl+C或直接關(guān)閉窗口怎茫。

22.dict
Python內(nèi)置了字典:dict的支持dictionary收壕,其他語(yǔ)言中也稱(chēng)為map,使用鍵-值key-value存儲(chǔ)轨蛤,具有極快的查找速度蜜宪。

dictlist的區(qū)別?

  • 假設(shè)我們需要在一本字典中找到一個(gè)字俱萍,dict的做法是在字典的索引列表中找到這個(gè)字對(duì)應(yīng)的頁(yè)碼端壳,然后直接翻到該頁(yè);而list是從第一頁(yè)開(kāi)始枪蘑,一頁(yè)一頁(yè)往后翻损谦。

③由于一個(gè)key只能對(duì)于一個(gè)value,所以岳颇,"長(zhǎng)江后浪推前浪"

dict中長(zhǎng)江后浪推前浪.png

④如果key不存在照捡,dict就會(huì)報(bào)錯(cuò) - KeyError

如果dict中沒(méi)有該Key就會(huì)報(bào)錯(cuò).png

⑤為了避免這種情況话侧,就需要提前判斷該key是否存在栗精?

  • 方法一:in操作符
in操作符判斷key是否存在.png
  • 方法二:dict提供的get()方法
dict自帶的get方法判斷.png

- 注意:返回None時(shí),Python交互式命令行不顯示結(jié)果瞻鹏。

⑥如何刪除一個(gè)key悲立?

  • pop(key),對(duì)于的value也會(huì)從dict中刪除新博。
pop(key)刪除dict中的key和對(duì)應(yīng)的value.png

⑦注意:dict內(nèi)部存放的順序和key放入的順序是沒(méi)有關(guān)系的薪夕。

⑧和list相比,dict有的特點(diǎn):速度 & 內(nèi)存

  • 查找和插入的速度極快赫悄,不會(huì)隨著key的增加而變慢原献。
  • 但是需要占用大量的內(nèi)存馏慨,內(nèi)存浪費(fèi)多。

list的特點(diǎn):

  • 查找和插入的時(shí)間隨著元素的增加而增加姑隅。
  • 占用空間小写隶,消耗的內(nèi)存很少。

dictkey必須是不可變的對(duì)象讲仰。

  • 因?yàn)?code>dict是根據(jù)key來(lái)計(jì)算value的存儲(chǔ)位置慕趴。在Python中,字符串叮盘、整數(shù)都是不可變的秩贰,而list是可變的,因此它不能作為key柔吼。

23.set
①是什么?

  • setdict類(lèi)似丙唧,也是一組key的集合愈魏。由于key不能重復(fù),所以想际,在set中培漏,沒(méi)有重復(fù)的key

②如何創(chuàng)建一個(gè)set胡本?

  • 需要提供一個(gè)list作為輸入集合牌柄。
創(chuàng)建一個(gè)set.png

③如何往set中添加元素?

  • add(key)侧甫,可以重復(fù)添加珊佣,但無(wú)效果。
使用add()往set中添加元素.png

④如何刪除set中的元素披粟?

  • remove(key)
使用remove方法刪除set中的元素.png

set可以看成數(shù)學(xué)意義上的無(wú)需和無(wú)重復(fù)元素的集合咒锻,因此,兩個(gè)set可以做數(shù)學(xué)意義上的交集守屉、并集等操作惑艇。

兩個(gè)set之前的交集并集.png

24.不可變對(duì)象
①是什么?

  • 調(diào)用對(duì)象自身的任何方法拇泛,都不會(huì)改變對(duì)象自身的內(nèi)容滨巴。
list是可變對(duì)象因?yàn)樵搶?duì)象調(diào)用自己的方法改變了對(duì)象本身.png
  • 注:列表list是可變對(duì)象,因?yàn)榘嘲龋?dāng)它調(diào)用自身的sort()方法時(shí)改變了其本身恭取。
字符串是不可變對(duì)象.png
  • 注:字符串s1本身不變,永遠(yuǎn)是"Hello"绪颖。s1本身只是一個(gè)變量秽荤,它指向的對(duì)象的內(nèi)容才是"Hello"甜奄。當(dāng)我們調(diào)用s1.replace('H','h')時(shí),實(shí)際上調(diào)用方法replace()是作用在字符串對(duì)象"Hello"上的窃款,它并沒(méi)有改變字符串"Hello"的內(nèi)容课兄,而是創(chuàng)建了一個(gè)新的字符串"hello"并返回。此時(shí)晨继,變量s2指向該新的字符串對(duì)象"hello"烟阐。

25.借助抽象,我們不用關(guān)系底層的具體計(jì)算過(guò)程紊扬,而直接在更高層次上思考問(wèn)題(高級(jí)程序語(yǔ)言)蜒茄。

  • 函數(shù),就是一種基本的代碼抽象方式餐屎。

26.導(dǎo)致TypeError錯(cuò)誤的原因檀葛?
①調(diào)用函數(shù)時(shí),傳入的參數(shù)數(shù)量不對(duì)腹缩。

abs()只接收一個(gè)參數(shù).png

27.max()函數(shù)可以接收任意多個(gè)參數(shù)屿聋,并返回最大的那個(gè)。

max()函數(shù).png

28.數(shù)據(jù)類(lèi)型轉(zhuǎn)換
int() | float() | str() | bool()

int&float&bool&str.png

②函數(shù)名實(shí)際上就是指向函數(shù)對(duì)象的一個(gè)引用藏鹊,完全可以把函數(shù)名賦給一個(gè)變量润讥,相當(dāng)于給這個(gè)函數(shù)起了個(gè)"別名"

函數(shù)名其實(shí)就是指向函數(shù)對(duì)象的一個(gè)引用.png

29.小結(jié)
①調(diào)用Python的函數(shù)盘寡,需要根據(jù)函數(shù)定義楚殿,傳入正確的參數(shù)。

30.定義函數(shù)
①如果定義的函數(shù)中沒(méi)有return語(yǔ)句竿痰,函數(shù)執(zhí)行完畢后也會(huì)返回結(jié)果脆粥,只是結(jié)果是None

return None可以簡(jiǎn)寫(xiě)為return

from exercise1 import my_abs
//1.注意文件exercise1不加后綴py
//2.從exercise1文件中引入my_abs這個(gè)函數(shù)
從哪個(gè)文件中導(dǎo)入哪個(gè)函數(shù).png

④如果你想定義一個(gè)什么事也不做的空函數(shù)菇曲,可以用pass語(yǔ)句冠绢。

def nop():
    pass

⑤空函數(shù)有什么用?

  • pass可以用來(lái)當(dāng)做占位符常潮,比如現(xiàn)在還沒(méi)想好怎么寫(xiě)函數(shù)的代碼弟胀,就可先放個(gè)pass占個(gè)坑。

31.參數(shù)檢查
①自己定義的my_abs和內(nèi)置的abs函數(shù)的區(qū)別喊式?

  • 缺少參數(shù)檢查孵户。
內(nèi)置abs函數(shù)和自定義的my_abs函數(shù)的區(qū)別.png

②完善以下my_abs函數(shù)

為自定義的函數(shù)添加參數(shù)檢查.png

isinstance()怎么用的?

isinstance(object,classinfo) //用來(lái)判斷一個(gè)對(duì)象是否是一個(gè)已知的類(lèi)型
//object - 實(shí)例對(duì)象
//classinfo - 可以是直接或間接類(lèi)名岔留、基本類(lèi)型或者它們組成的元組夏哭。
isinstance.png

注:type()isinstance()的區(qū)別?
type()不考慮繼承献联。
isinstance()考慮繼承竖配。

isinstance繼承而type不考慮繼承.png

raise怎么用的何址?

  • 當(dāng)程序出現(xiàn)錯(cuò)誤,Python會(huì)自動(dòng)引發(fā)異常进胯,也可以通過(guò)raise顯式地引發(fā)異常用爪。一旦執(zhí)行了raise語(yǔ)句,raise后面的語(yǔ)句將不能執(zhí)行(同continue)胁镐。

32.小結(jié)
①定義函數(shù)時(shí)偎血,需要確定函數(shù)名和參數(shù)個(gè)數(shù)。
②最好先對(duì)參數(shù)的數(shù)據(jù)類(lèi)型做檢查盯漂。
③函數(shù)體內(nèi)部可以用return隨時(shí)返回函數(shù)結(jié)果颇玷。
④函數(shù)執(zhí)行完畢也沒(méi)有return語(yǔ)句時(shí),自動(dòng)return None就缆。
⑤函數(shù)可以同時(shí)返回多個(gè)值帖渠,其實(shí)就是一個(gè)tuple

33.設(shè)置一個(gè)函數(shù)违崇,求ax^2+bx+c = 0的解阿弃。
import math - math.sqrt

mathSqrt.png

②只有當(dāng)a,b,c全部滿(mǎn)足intfloat時(shí),才進(jìn)行下一步羞延,否則異常。

if not isinstance(a,(int,float)) and isinstance(b,(int,float)) and 
   isinstance(c,(int,float)) //從右往左
//若滿(mǎn)足以上條件
    raise TypeError("Bad operand Type!")

③當(dāng)b*b-4*a*c >= 0時(shí)

x1 = (-b + math.sqrt(b*b-4*a*c))/(2*a)
x2 = (-b - math.sqrt(b*b-4*a*c))/(2*a)
return x1,x2
//否則無(wú)解
else:
    print("無(wú)解")
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末脾还,一起剝皮案震驚了整個(gè)濱河市伴箩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鄙漏,老刑警劉巖嗤谚,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異怔蚌,居然都是意外死亡巩步,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)桦踊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)椅野,“玉大人,你說(shuō)我怎么就攤上這事籍胯【股粒” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵杖狼,是天一觀的道長(zhǎng)炼蛤。 經(jīng)常有香客問(wèn)我,道長(zhǎng)蝶涩,這世上最難降的妖魔是什么理朋? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任絮识,我火速辦了婚禮,結(jié)果婚禮上嗽上,老公的妹妹穿的比我還像新娘次舌。我一直安慰自己,他們只是感情好炸裆,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布垃它。 她就那樣靜靜地躺著,像睡著了一般烹看。 火紅的嫁衣襯著肌膚如雪国拇。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,950評(píng)論 1 291
  • 那天惯殊,我揣著相機(jī)與錄音酱吝,去河邊找鬼。 笑死土思,一個(gè)胖子當(dāng)著我的面吹牛务热,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播己儒,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼崎岂,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了闪湾?” 一聲冷哼從身側(cè)響起冲甘,我...
    開(kāi)封第一講書(shū)人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎途样,沒(méi)想到半個(gè)月后江醇,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡何暇,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年陶夜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片裆站。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡条辟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出遏插,到底是詐尸還是另有隱情捂贿,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布胳嘲,位于F島的核電站厂僧,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏了牛。R本人自食惡果不足惜颜屠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一辰妙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧甫窟,春花似錦密浑、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至浇衬,卻和暖如春懒构,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背耘擂。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工胆剧, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人醉冤。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓秩霍,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親蚁阳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子铃绒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容