Python程序設計課件第2章 數(shù)據(jù)類型、運算符及表達式_第1頁
Python程序設計課件第2章 數(shù)據(jù)類型、運算符及表達式_第2頁
Python程序設計課件第2章 數(shù)據(jù)類型、運算符及表達式_第3頁
Python程序設計課件第2章 數(shù)據(jù)類型、運算符及表達式_第4頁
Python程序設計課件第2章 數(shù)據(jù)類型、運算符及表達式_第5頁
已閱讀5頁,還剩76頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

2.1數(shù)據(jù)類型第二章數(shù)據(jù)類型、運算符及表達式of311在程序中使用的變量名、函數(shù)名,常量名等統(tǒng)稱為標識符,在Python里,標識符由字母、數(shù)字、下劃線組成。但不能以數(shù)字開頭。另外Python中的標識符是區(qū)分大小寫的。關于Python標識符有如下幾點說明:(1)以下劃線開頭的標識符是有特殊意義的。(2)以單下劃線開頭的標識符(_xxx)代表不能直接訪問的類屬性,需通過類提供的接口進行訪問,不能用“fromxxximport*”而導入。(3)以雙下劃線開頭的標識符(__xxx)代表類的私有成員。(4)以雙下劃線開頭和結(jié)尾的標識符(__xxx__)代表Python里特殊方法專用的標識,如__init__()代表類的構(gòu)造函數(shù)。2.1.1標識符2.1數(shù)據(jù)類型of312(5)在對變量進行命名時應盡量避免使用上述樣式。除此之外,還有一些字符串是Python規(guī)定的具有特殊意義的,稱為保留字或關鍵字,用戶定義的標識符不能與之相同。常見的保留字如下所示:False class finallyisreturnNonecontinuelambdaTrue def fromnonlocalwhileanddelglobalnot with…aselifif oryieldtryassertElseimportpassbreak exceptinraisefor下面是一部分保留字的含義。if:條件判斷語句。for:用于遍歷迭代器每個元素。try:與except,finally配合使用處理在程序運行中出現(xiàn)的異常情況。2.1.1標識符第二章數(shù)據(jù)類型、運算符及表達式2.1數(shù)據(jù)類型of313一、遵守國家法律制度二、遵守校規(guī)校紀三、遵守實驗室管理規(guī)定、課堂紀律1、不準破壞性操作,不準亂設口令和修改機內(nèi)配置參數(shù),不準刪除系統(tǒng)文件,不準修改機房操作系統(tǒng)、惡意傳播計算機病毒、安裝游戲軟件等與教學無關的行為;2、保持機房安靜,不準大聲喧嘩和打鬧。3、嚴禁在機房內(nèi)抽煙、吃喝及亂扔廢棄雜物。4、嚴禁瀏覽不健康及非法網(wǎng)站,嚴禁玩電子游戲。5、嚴禁傳播、下載不健康或非法內(nèi)容。6、嚴禁從事干擾、破壞他人上機的行為。7、使用完畢后關機、放好凳子、收好鍵盤抽,帶走自己產(chǎn)生的垃圾從標志符命名規(guī)則到規(guī)則意識,無規(guī)矩不成方圓,工作、生活和學習,要按規(guī)矩辦事,在團隊中各盡其責,才會高效地完成任務第二章數(shù)據(jù)類型、運算符及表達式2.1數(shù)據(jù)類型of314cass:用于定義類型。def:用于定義函數(shù)和類型的方法。pass:表示此行為空,不運行任何操作。assert:用于程序調(diào)試階段時測試運行條件是否滿足。yield:在迭代器函數(shù)內(nèi)使用,用于返回一個元素。自從Python2.5版本以后。這個語句變成一個運算符。raise:制造一個錯誤。import:導入一個模塊或包。from:從包導入模塊或從模塊導入某個對象,與import配合使用。as:將導入的對象賦值給一個變量。in:判斷一個對象是否在一個字符串/列表/元組里。這些保留字中,除了False、None和True外,其余保留字都不能作為一個值賦給變量,在Python3.X中,所有的保留字都不能被賦值。2.1.1標識符第二章數(shù)據(jù)類型、運算符及表達式2.1數(shù)據(jù)類型of315需要注意的是,保留字并不是一成不變的,隨著Python版本的變遷,有些字符串會加入到保留字中。除了關鍵字外,還有轉(zhuǎn)義字符串,轉(zhuǎn)義字符串就是在一些字符或字符串前加“\”,用來表示一些無法顯示的字符,比如換行符。表2.1是一些轉(zhuǎn)義字符串。2.1.1標識符表2.1常用的轉(zhuǎn)義字符及其含義第二章數(shù)據(jù)類型、運算符及表達式2.1數(shù)據(jù)類型of3162.1.1標識符表2.1常用的轉(zhuǎn)義字符及其含義(接上表)第二章數(shù)據(jù)類型、運算符及表達式2.1數(shù)據(jù)類型of317在程序執(zhí)行過程中,其值不發(fā)生改變的量稱為常量。常量分為直接常量和符號常量。直接常量(字面常量)包括以下幾種:(1)整型常量:12、0、-3;(2)實型常量:4.6、-1.23;(3)字符常量:‘a(chǎn)’、‘b’。符號常量是指用標識符代表一個常量。需要注意的是,Python沒有真正意義上的符號常量。但是有時候會需要用到符號常量。一般是在import語句下面用大寫字母作為常量名,如:NUMBER=100。但這并不意味著這個值不可以被改變。2.1.2變量和常量第二章數(shù)據(jù)類型、運算符及表達式2.1數(shù)據(jù)類型of318習慣上符號常量的標識符用大寫字母,變量標識符用小寫字母,以示區(qū)別。使用符號常量的好處是能做到“一改全改”。即如果該常量被使用了很多次也只需在最開始的地方改變其初值即可。值可以改變的量稱為變量。一個變量應該有一個名字,在內(nèi)存中占據(jù)一定的存儲單元。在Python中,對一個變量賦值之前并不需要對其定義或聲明,它會在第一次賦值時自動生成。在使用一個變量之前需要先對其進行賦值。變量命名規(guī)則如下:(1)變量名必須以字母或下劃線開頭,后面可以跟任意數(shù)量的字母、下劃線和數(shù)字。變量名中只能有字母、下劃線和數(shù)字;(2)區(qū)分大小寫,如Python和python是不同的;(3)變量名不能使用保留字。2.1.2變量和常量第二章數(shù)據(jù)類型、運算符及表達式2.1數(shù)據(jù)類型of319下面的例子是將“helloworld”這個字符串賦給了變量a,然后再將a打印出來。>>>a='helloworld'>>>print(a)helloworld >>>當一個變量不再使用的時候,可以使用del命令將其刪除。刪除之后要想使用該變量名需要重新賦值,如下:>>>a='abc'>>>print(a)abc>>>dela2.1.2變量和常量第二章數(shù)據(jù)類型、運算符及表達式2.1數(shù)據(jù)類型of3110變量只是對象的引用值。在Python中對象有類型但變量沒有類型,也就是說,不需要為一個變量聲明類型而可以直接賦值創(chuàng)建各種類型的對象變量,也可以將不同的對象賦給同一個變量。>>>a='thisisastring'>>>print(a)thisisastring>>>a=123456>>>print(a)123456>>>a=['a','b','c','d']>>>print(a)['a','b','c','d']>>>2.1.2變量和常量第二章數(shù)據(jù)類型、運算符及表達式2.1數(shù)據(jù)類型of3111對象是Python最基本的概念之一,Python中的一切都是對象。Python也提供了一些內(nèi)置對象,常見的Python內(nèi)置對象如表2.2所示。除此之外,還有大量的標準庫和擴展庫對象,標準庫是Python默認安裝的,但需要導入之后才能使用其中的對象(如何導入庫會在后面詳細講到),擴展庫則不是默認安裝的,需要先安裝在導入才能使用其中的對象,當然也可以選擇自定義對象,這會在后面的章節(jié)講到。Python具有自動內(nèi)存管理功能,對于沒有任何變量指向的值,Python會自動將其刪除。Python會跟蹤所有的值,對沒有變量的值進行刪除。2.1.2變量和常量第二章數(shù)據(jù)類型、運算符及表達式2.1數(shù)據(jù)類型of31122.1.2變量和常量表2.2Python內(nèi)置對象對象類型示例簡要說明數(shù)字1,1.2,1.1e4數(shù)字的長度無限制字符串“abc”,’a’,’123’一般使用單引號和雙引號作為界定符,三引號一般做多行注釋使用列表[1,2,3],[‘1’,’2’,’3’]元素存放在一組方括號中,用逗號隔開字典{name:Jack,age:20}元素存放在一組大括號中,元素為“鍵:值”形式元組(2,1,3)元素放在小括號中,且元組中的元素值不可更改文件f=open(‘file_name.txt’,’r’)open是Python內(nèi)置函數(shù),用來以指定模式打開文件集合{1,2,3}元素放在大括號中,且元素不可重復布爾型True,False

空類型None

編程單元函數(shù)和類在Python中,函數(shù)和類都屬于可調(diào)用對象第二章數(shù)據(jù)類型、運算符及表達式2.1數(shù)據(jù)類型of3113整型就是整常數(shù)。在Python3.X版本中,一般整數(shù)和長整數(shù)類型已經(jīng)合二為一了。所以,現(xiàn)在Python里的整型精度是無限的,如下:>>>2**1001267650600228229401496703205376>>>Python不僅支持十進制整型,也支持十六進制、八進制以及二進制的整型。十六進制的數(shù)以0x或者0X開頭,后面跟一個16進制的數(shù),由0~9以及a~f組成。分別代表0~15。其中,a~f不區(qū)分大小寫。八進制的數(shù)以0o或者0O(數(shù)字0加字母o或O)開頭,后面跟一個八進制的數(shù),由0~7組成。二進制的數(shù)以0b或者0B開頭,后面跟一個二進制的數(shù),由0、1組成。2.1.3整型第二章數(shù)據(jù)類型、運算符及表達式2.1數(shù)據(jù)類型of3114春秋戰(zhàn)國時期,我國古人就已經(jīng)熟練地使用十進位制的算籌記數(shù)法,比世界上第二個發(fā)明十進制的國家古代印度起碼早約1000年,提高學生的民族自豪感和自信心,同學們要進一步思考在新時代如何延續(xù)古圣先賢的智慧再創(chuàng)輝煌,實現(xiàn)偉大復興的中國夢。1996年“阿麗亞納-5”運載火箭將64位格式轉(zhuǎn)化為16位格式導致內(nèi)存溢出而引起火箭發(fā)射后爆炸的重大事故;被除數(shù)為0的千年蟲問題等。同學們在依賴科學技術(shù)的同時,更應該保持一絲不茍、嚴謹認真的學習和工作態(tài)度。2.1.3整型第二章數(shù)據(jù)類型、運算符及表達式2.1數(shù)據(jù)類型of3115二進位制思想起源。源于《周易》中的八卦法,早于第二發(fā)明者德國數(shù)學家萊布尼茲(公元1646—1716)2000多年。負數(shù)的發(fā)現(xiàn)。這個發(fā)現(xiàn)最早見于《九章算術(shù)》,這一發(fā)現(xiàn)早于印度600多年,早于西方1600多年。早在兩千多年前,我國就有了正負數(shù)的概念,掌握了正負數(shù)的運算法則。2.1.3整型第二章數(shù)據(jù)類型、運算符及表達式2.1數(shù)據(jù)類型of3116Python提供了內(nèi)置函數(shù)hex(a)、oct(a)、bin(a),可以將一個十進制數(shù)a分別轉(zhuǎn)換成十六進制、八進制及二進制的字符串,如下:>>>a=100>>>hex(a)'0x64'>>>oct(a)'0o144'>>>bin(a)'0b1100100'>>>2.1.3整型第二章數(shù)據(jù)類型、運算符及表達式2.1數(shù)據(jù)類型of3117此外int(string,b)函數(shù)可以將一個字符串按照給定的進制轉(zhuǎn)換成數(shù)字,如下:>>>string='100'>>>print(int(string,2))4>>>print(int(string,8))64>>>print(int(string,10))100>>>print(int(string,16))2562.1.3整型第二章數(shù)據(jù)類型、運算符及表達式2.1數(shù)據(jù)類型of3118浮點數(shù)即帶有小數(shù)部分的數(shù)字。在Python里,浮點數(shù)分為兩類,一種是普通的由數(shù)字和小數(shù)點組成的,如1.0、2.3等。還有這是由科學計數(shù)法表示的浮點數(shù)。由數(shù)字,小數(shù)點以及科學計數(shù)標志e或E組成,如:2.1e10這表示2.1ⅹ1010。需要注意的是,雖然2.1e10的結(jié)果是一個整數(shù),但2.1e10屬于浮點數(shù),2e10也同樣屬于浮點數(shù),如下:>>>type(2e5)<class'float'>>>>注:type函數(shù)可以顯示當前對象的數(shù)據(jù)類型。2.1.4浮點型第二章數(shù)據(jù)類型、運算符及表達式2.1數(shù)據(jù)類型of3119有一種特殊的浮點數(shù)是小數(shù)對象,與普通浮點數(shù)相比,小數(shù)對象有固定的位數(shù)和小數(shù)點,也就是說,小數(shù)是有固定精度的浮點數(shù)。小數(shù)對象與其他數(shù)據(jù)類型不同,小數(shù)對象需要導入一個decimal模塊后調(diào)用函數(shù)才能創(chuàng)建。#創(chuàng)建小數(shù)對象>>>fromdecimalimportDecimal>>>a=Decimal('0.1')>>>print(a)0.1>>>type(a)<class'decimal.Decimal'>需要注意的是,小數(shù)對象只能與小數(shù)對象和整數(shù)進行運算,如果和普通浮點數(shù)進行運算的話會出現(xiàn)語法報錯。2.1.4浮點型第二章數(shù)據(jù)類型、運算符及表達式2.1數(shù)據(jù)類型of3120>>>fromdecimalimportDecimal>>>a=Decimal('0.10')>>>b=Decimal('0.20')>>>print(a/b)0.5>>>c=0.2>>>print(a/c)Traceback(mostrecentcalllast):File"<pyshell#154>",line1,in<module>print(a/c)TypeError:unsupportedoperandtype(s)for/:'decimal.Decimal'and'float'2.1.4浮點型第二章數(shù)據(jù)類型、運算符及表達式2.1數(shù)據(jù)類型of3121還可以通過這個模塊來設置全局精度,如下:>>>fromdecimalimportDecimal>>>fromdecimalimportgetcontext>>>getcontext().prec=4#設置精度>>>print(1/3)0.3333333333333333>>>a=Decimal('0.1')>>>b=Decimal('0.3')>>>print(a/b)0.3333>>>但該方法只對小數(shù)對象有用,而且如果小數(shù)部分的精度不夠,也不會補0。2.1.4浮點型第二章數(shù)據(jù)類型、運算符及表達式2.1數(shù)據(jù)類型of3122下面的例子只是設置精度:>>>fromdecimalimportDecimal>>>fromdecimalimportgetcontext>>>getcontext().prec=4#設置全局精度>>>a=decimal.Decimal('0.1')>>>b=decimal.Decimal('0.3')>>>print(a/b)0.3333>>>withdecimal.localcontext()aslocal:#設置局部精度

local.prec=1 print(a/b)0.3關于with…as…語句,后面會做介紹。2.1.4浮點型第二章數(shù)據(jù)類型、運算符及表達式2.1數(shù)據(jù)類型of3123下面的例子只是設置精度:>>>fromdecimalimportDecimal>>>fromdecimalimportgetcontext>>>getcontext().prec=4#設置全局精度>>>a=decimal.Decimal('0.1')>>>b=decimal.Decimal('0.3')>>>print(a/b)0.3333>>>withdecimal.localcontext()aslocal:#設置局部精度

local.prec=1 print(a/b)0.3關于with…as…語句,后面會做介紹。2.1.4浮點型第二章數(shù)據(jù)類型、運算符及表達式2.1數(shù)據(jù)類型of3124由于用來存儲數(shù)值的空間有限,浮點數(shù)缺乏精確性。例如,以下語句的計算結(jié)果應該得到0,但結(jié)果卻不是0。雖然很接近0,但沒有足夠的位數(shù)去實現(xiàn)這樣的精度。>>>print(0.1+0.1+0.1+0.1-0.3-0.1)2.7755575615628914e-17>>>不過使用小數(shù)對象就可以改正了。用戶可以通過decimal模塊中的Decimal構(gòu)造函數(shù)創(chuàng)建一個小數(shù)對象,傳人的字符串就是小數(shù)。當不同精度的小數(shù)對象在表達式中混用時,Python會自動升級成位數(shù)最多的小數(shù)。2.1.4浮點型第二章數(shù)據(jù)類型、運算符及表達式2.1數(shù)據(jù)類型of3125如果想將一個浮點數(shù)按照四舍五入的方法保留位數(shù)的話,還可以使用round()函數(shù)。round()函數(shù)很簡單,就是對浮點數(shù)進行近似取值,保留一定位數(shù)的小數(shù)。>>>a=0.334>>>b=0.335>>>print(round(a,2))0.33>>>print(round(b,2))0.34但因為在機器中浮點數(shù)不一定能精確表達,所以round函數(shù)可能會出錯,如下:>>>print(round(2.675,2))2.67>>>2.1.4浮點型第二章數(shù)據(jù)類型、運算符及表達式2.1數(shù)據(jù)類型of3126可以看到,結(jié)果應該為2.68但實際是2.67,這并不是一個bug。在機器中浮點數(shù)不一定能精確表達,因為換算成一串1和0后可能是無限位的,機器已經(jīng)做出了截斷處理。那么在機器中保存的2.675這個數(shù)字就比實際數(shù)字要小那么一點點。這一點點就導致了它離2.67要更近一點點,所以保留兩位小數(shù)時就近似到了2.67。所以如果對精確度要求很高的話,應該盡量避開使用round()函數(shù),而使用decimal模塊。2.1.4浮點型第二章數(shù)據(jù)類型、運算符及表達式2.1數(shù)據(jù)類型of3127浮點運算速度是指計算機系統(tǒng)每秒可以處理的浮點操作,通常用FLOPS來表示。世界排名前四的中國神威.太湖之光安裝了40960個中國自主研發(fā)的“申威26010”眾核處理器,它采用64位自主申威指令系統(tǒng)和大規(guī)模并行處理體系結(jié)構(gòu),峰值性能為12.5億億次/秒,持續(xù)性能為9.3億億次/秒;世界排名前四的中國的“天河二號”峰值性能為5.49億億次/秒,持續(xù)性能為3.39億億次/秒,采用了自創(chuàng)的新型異構(gòu)多態(tài)體系結(jié)構(gòu)。我國運用小數(shù)的時間,早于西方1100多年。超級計算機被稱為‘國家重器’,屬于國家戰(zhàn)略高技術(shù)領域,是世界各國競相角逐的科技最高點。2.1.4浮點型第二章數(shù)據(jù)類型、運算符及表達式2.1數(shù)據(jù)類型of3128Python3.0引入了分數(shù)這一數(shù)據(jù)類型。和小數(shù)對象相同,要創(chuàng)建分數(shù)對象,需要引入一個模塊Fraction,如下所示:>>>fromfractionsimportFraction>>>x=Fraction(1,3)>>>y=Fraction(1,2)>>>print(x)1/3>>>print(y)1/2>>>type(x)<class'fractions.Fraction'>>>>2.1.5分數(shù)第二章數(shù)據(jù)類型、運算符及表達式中國完整的分數(shù)運算法則出現(xiàn)在《九章算術(shù)》中,我國早于印度500多年。2.1數(shù)據(jù)類型of3129可以傳入兩個參數(shù)即分子和分母來創(chuàng)建分數(shù),也可以使用下面的方法:>>>fromfractionsimportFraction>>>print(Fraction(0.5))1/2>>>可以通過from_float函數(shù)和float函數(shù)實現(xiàn)分數(shù)和浮點數(shù)的轉(zhuǎn)換。>>>fromfractionsimportFraction>>>a=2.5>>>b=Fraction.from_float(2.5)>>>print(b)5/2>>>print(float(b))2.52.1.5分數(shù)第二章數(shù)據(jù)類型、運算符及表達式2.1數(shù)據(jù)類型of3130盡管可以將浮點數(shù)轉(zhuǎn)換成為分數(shù),但在某些情況下會造成精度損失。出現(xiàn)這種情況時,可以通過限制最大分母值來得到結(jié)果。如下:>>>fromfractionsimportFraction>>>b=Fraction.from_float(0.3)>>>a=b.limit_denominator(10)>>>print(a)3/10>>>print(b)5404319552844595/18014398509481984>>>可以看到,實際上b的值并沒有改變。2.1.5分數(shù)第二章數(shù)據(jù)類型、運算符及表達式2.1數(shù)據(jù)類型of3131值得注意的是,Python會自動進行約分,分子或分母中有負號時,自動約分會最終將負號歸于分子。>>>fromfractionsimportFraction>>>print(Fraction(0.5))1/2>>>print(Fraction(5/10))1/2>>>print(Fraction(5/-10))-1/2>>>2.1.5分數(shù)第二章數(shù)據(jù)類型、運算符及表達式2.1數(shù)據(jù)類型of3132分數(shù)可以和整數(shù)、浮點數(shù)、當然還有分數(shù)本身進行二元運算,兩個分數(shù)相加得到分數(shù),相關規(guī)則如下:(1)一個分數(shù)加一個整數(shù)得到一個分數(shù);(2)一個分數(shù)加一個浮點數(shù)得到一個浮點數(shù)。其他二元運算和加法相同。2.1.5分數(shù)第二章數(shù)據(jù)類型、運算符及表達式2.1數(shù)據(jù)類型of3133此外,F(xiàn)raction對象有兩個屬性numerator和denominator,分別代表了分子和分母,如下:>>>fromfractionsimportFraction>>>a=Fraction(5/10)>>>print(a)1/2>>>print(a.numerator)1>>>print(a.denominator)2>>>2.1.5分數(shù)第二章數(shù)據(jù)類型、運算符及表達式2.1數(shù)據(jù)類型of3134除了上面這些以外,fraction模塊提供了一個gcd函數(shù),可以迅速找到兩個數(shù)的最大公約數(shù)。>>>fromfractionsimportgcd>>>print(gcd(256,16))16>>>2.1.5分數(shù)第二章數(shù)據(jù)類型、運算符及表達式2.1數(shù)據(jù)類型of3135在Python里,有一種特殊的數(shù)據(jù)類型叫布爾型(bool),該類型只有兩種取值:True和False,分別代表真和假。實際上,可以把True和False看成是Python內(nèi)置的變量名,值分別為1和0。因為實際上True的值就是1,而False則為0,如圖2.1所示。2.1.6布爾型圖2.1布爾型的值在有了bool數(shù)據(jù)類型之后,可以用True或False更清楚、準確地設置標志位,例如flag=False,使標志位的含義更加清晰;也可以用于條件語句,如無限循環(huán)語句whileTrue:。第二章數(shù)據(jù)類型、運算符及表達式2.1數(shù)據(jù)類型of3136Python除了與大多數(shù)程序設計語言一樣,把整數(shù)0當成False,整數(shù)1代表True,也把任意的非空數(shù)據(jù)結(jié)構(gòu)看作True,把任意的空數(shù)據(jù)結(jié)構(gòu)看作False。也就是說Python的每個對象都有一個屬性代表該對象是True還是False。每個對象不是True就是False。數(shù)字非0即為True,其他對象非空即為True,如下:>>>bool(0)False>>>bool(10)True>>>list_a=[]>>>print(bool(list_a))False2.1.6布爾型第二章數(shù)據(jù)類型、運算符及表達式2.1數(shù)據(jù)類型of3137>>>str1=''>>>print(bool(str1))False>>>str1='123'>>>print(bool(str1))True>>>print(bool(None))False>>>這也表示了每個對象都可以作為循環(huán)結(jié)構(gòu)或選擇結(jié)構(gòu)的條件表達式,如if1:或while0:是合法的,這一部分會在后面談到。2.1.6布爾型第二章數(shù)據(jù)類型、運算符及表達式2.1數(shù)據(jù)類型of3138Python里還有一個特殊的對象,即空值,該對象只有一個值用None表示,None并不等于0或其他一些空的數(shù)據(jù)類型。而是一個特殊的值。代表什么也沒有。另外None的布爾值為False。2.1.6空值第二章數(shù)據(jù)類型、運算符及表達式2.2輸入與輸出2.1數(shù)據(jù)類型2.3運算符與表達式of5639第二章數(shù)據(jù)類型、運算符及表達式2.2輸入與輸出of3140print函數(shù)的作用就是將對象打印到屏幕上,有人也許會疑惑,在之前的例子中并沒有使用print,卻依然將對象的值打印到了屏幕上,這是因為之前都是在Python的交互式解釋器中進行的。它會自動打印表達式的值。在Python里,print可以打印任意類型的值,哪怕輸一個列表之類的復雜數(shù)據(jù)類型,也可以打印出來,關于復雜數(shù)據(jù)類型會在后面講到。當需要打印多個對象時,對象之間用逗號隔開。可以傳給print函數(shù)確定的字符串等數(shù)據(jù),如果傳入一個表達式,它會打印出表達式的值,可能是布爾值也可能是運算結(jié)果。2.2.1print函數(shù)第二章數(shù)據(jù)類型、運算符及表達式2.2輸入與輸出of3141在Python解釋器中輸入help(print)來獲取print函數(shù)有哪些參數(shù),如圖2.2所示。2.2.1print函數(shù)圖2.2print函數(shù)第二章數(shù)據(jù)類型、運算符及表達式2.2輸入與輸出of3142可以看到,print函數(shù)一共有4個參數(shù),分別是sep、end、file和flush。由于flush參數(shù)在客戶端腳本上基本用不上,這里就不介紹了,其他參數(shù)的含義如下:(1)sep是當需要打印多個對象時,對象之間的分隔符,默認是一個空格。(2)end是加在打印文本末尾的字符串,默認是換行符,所以當使用print函數(shù)時,它是會默認換行的。(3)file指定了文本需要發(fā)送到的文件、標準流或者類似文件的對象。默認是sys.stdout,即它會將文本輸出到控制臺上,如果想將文本保存到文件,就可以通過修改file的值來達到目的,但需要注意的是,不能直接把文件名傳給file參數(shù),而應該通過open()函數(shù)將文件傳給file如:file=open(“result.txt”),關于open函數(shù)會在以后的章節(jié)講到。2.2.1print函數(shù)第二章數(shù)據(jù)類型、運算符及表達式2.2輸入與輸出of3143在使用print函數(shù)的時候,一般不需要把所有參數(shù)都寫出來,除非想更改參數(shù)的值,例如print(1,end=’’)就是將1打印出來,但結(jié)尾不換行,而是加一個空格。下面看一個例子。>>>a=12>>>b='hello'>>>print(a,b)12hello用‘,’代替print打印的對象中間的空格。如下:>>>print(a,b,sep=',')12,hello用空格代替打印語句結(jié)尾的換行符。如下:>>>print(a,end='');122.2.1print函數(shù)第二章數(shù)據(jù)類型、運算符及表達式2.2輸入與輸出of3144最后一條語句的打印結(jié)果雖然看上去和直接打印a沒有什么不同,但實際上結(jié)尾是一個空格而不是換行符。另外,參數(shù)的順序并不固定。也就是說,print(a,b,sep=’,’,end=’’)語句和print(a,b,end=’’,sep=’,’)語句的作用是完全相同的。如果想將一個對象的值在一句話中的特定位置打印顯示出來,可以使用下列語句。打印整數(shù)的語句如下:>>>b=123>>>print('%disanumber'%b)123isanumber>>>2.2.1print函數(shù)第二章數(shù)據(jù)類型、運算符及表達式2.2輸入與輸出of3145打印浮點數(shù)的語句如下:>>>b=123.56>>>print('Hisweightis%f'%b)Hisweightis123.560000>>>如果打印浮點數(shù)對小數(shù)位有要求,可以使用下列語句保留兩位小數(shù):>>>b=3.14159>>>print('%.2fisanumber'%b)3.14isanumber打印字符串的語句如下:>>>name='Jack'>>>print('Hisnameis%s'%name)HisnameisJack2.2.1print函數(shù)第二章數(shù)據(jù)類型、運算符及表達式2.2輸入與輸出of3146此外print函數(shù)可以做一些很有趣的事,例如打印不同形狀的符號。打印由*組成的正三角形的代碼如下:print('*')print('***')print('*****')print('*******')****************2.2.1print函數(shù)第二章數(shù)據(jù)類型、運算符及表達式2.2輸入與輸出of3147在使用變量時,要先對變量進行賦值,但如果需要賦給的變量事先不知道,需要用戶提供該怎么辦?這時候就需要用到輸入函數(shù)input函數(shù)了。在Python3.X中,input函數(shù)接收任意輸入,并將輸入當成字符串類型返回(字符串類型會在后面講到),即使輸入的是數(shù)字。如果需要輸入的是數(shù)字的話,可以使用int()函數(shù)和float()函數(shù)把輸入得到的字符串轉(zhuǎn)成數(shù)字再進行操作。2.2.2input函數(shù)第二章數(shù)據(jù)類型、運算符及表達式2.2輸入與輸出of3148例:>>>x=input("Inputanumber:")Inputanumber:1234>>>type(x)<class'str'>>>>int(x)1234>>>float(x)1234.0>>>如上所示,把輸入的值1234賦給了變量x。除此之外,可以在input函數(shù)里加入一些語句,作為對輸入信息的要求或提示。2.2.2input函數(shù)第二章數(shù)據(jù)類型、運算符及表達式2.2輸入與輸出of3149如果有時僅僅知道需要輸入一個數(shù),卻不知道輸入的數(shù)的類型,如果這時貿(mào)然使用int()的函數(shù)的話,可能會導致程序出錯,如下:>>>a=input('輸入一個數(shù)\n')輸入一個數(shù)2.13>>>a=int(a)Traceback(mostrecentcalllast):File"<pyshell#13>",line1,in<module>a=int(a)ValueError:invalidliteralforint()withbase10:'2.13'>>>這時候可以用eval()函數(shù),這個函數(shù)將字符串str當成有效的表達式來求值并返回計算結(jié)果。這里只用它來將輸入的字符串轉(zhuǎn)換成適當?shù)臄?shù)。2.2.2input函數(shù)第二章數(shù)據(jù)類型、運算符及表達式2.2輸入與輸出of3150>>>a=eval(input("輸入一個數(shù)\n"))輸入一個數(shù)2.13>>>print(type(a))<class'float'>>>>print(a*2)4.26>>>b=eval(input("輸入一個數(shù)\n"))輸入一個數(shù)4>>>print(type(b))<class'int'>2.2.2input函數(shù)第二章數(shù)據(jù)類型、運算符及表達式2.2輸入與輸出of3151除了input函數(shù)之外,Python標準庫sys還提供了read()和readline()兩個函數(shù)用來從鍵盤接收字符。read()函數(shù)用來接收指定數(shù)目的字符。例如:>>>importsys>>>x=sys.stdin.read(4)#讀取4個字符,如果輸入字符不足則等待,超出只取前4個abds>>>print(x)abd>>>2.2.3其他輸入輸出函數(shù)第二章數(shù)據(jù)類型、運算符及表達式2.2輸入與輸出of3152需要注意的是,當為讀取緩沖區(qū)的字符時,緩沖區(qū)的字符并不會消失,當再次讀取時就能繼續(xù)讀取,如下所示。但這一特性有時候也會導致讀取數(shù)據(jù)錯誤。>>>importsys>>>x=sys.stdin.read(5)abcdefghij>>>print(x)abcde>>>y=sys.stdin.read(5)>>>print(y)fghij>>>當緩沖區(qū)的字符數(shù)小于要讀取的字符數(shù)時,會繼續(xù)等待輸入。2.2.3其他輸入輸出函數(shù)第二章數(shù)據(jù)類型、運算符及表達式2.2輸入與輸出of3153readline()則是從緩沖區(qū)讀取字符,遇到換行符結(jié)束。例如:>>>importsys>>>x=sys.stdin.readline()abcdefg>>>print(x)abcdefg>>>readline()函數(shù)會將輸入結(jié)尾的換行符也讀取,readline()函數(shù)也可以帶參數(shù)。如下:importsys>>>x=sys.stdin.readline(5)abcdefghi>>>print(x)abcde2.2.3其他輸入輸出函數(shù)第二章數(shù)據(jù)類型、運算符及表達式2.2輸入與輸出of3154當輸入超過所需時,會截斷,否則就會遇到換行符結(jié)束。如下:importsys>>>x=sys.stdin.readline(5)abc>>>print(x)abc>>>Python標準庫pprint提供了另一個輸出函數(shù)pprint()。可以更好的控制輸出格式。如果要輸出的內(nèi)容多于一行則會自動添加換行和縮進來更好地展示輸出內(nèi)容。在這個函數(shù)中,參數(shù)indent代表縮進,width代表一行最大寬度,depth則是打印的深度,這個主要是針對一些可遞歸的對象(關于遞歸,在函數(shù)章節(jié)中會講到),如果超出指定depth,其余的用"..."代替。如[1,2,[3]]的深度為2。2.2.3其他輸入輸出函數(shù)第二章數(shù)據(jù)類型、運算符及表達式2.2輸入與輸出of31552.2.3其他輸入輸出函數(shù)>>>importpprint>>>data=("thisisalist",[1,2,3,4,5],"thisisyetanotherlist:",[1.0,2.0])>>>pprint.pprint(data,width=30)('thisisalist',[1,2,3,4,5],'thisisyetanotherlist:',[1.0,2.0])>>>print(data)('thisisalist',[1,2,3,4,5],'thisisyetanotherlist:',[1.0,2.0])>>>余下的一些參數(shù)就不細細描述了。第二章數(shù)據(jù)類型、運算符及表達式2.3運算符及表達式2.1數(shù)據(jù)類型2.2輸入與輸出of5656第二章數(shù)據(jù)類型、運算符及表達式2.3運算符及表達式of3157Python運算符包括賦值運算符、算術(shù)運算符、關系運算符、邏輯運算符、位運算符、成員運算符和身份運算符等,分別簡要介紹如下:(1)算術(shù)運算符:用于各類數(shù)值運算。包括加(+)、減(-)、乘(*)、除(/)、求余(或稱模運算,%)、冪運算(**)和整除運算(//)。(2)關系運算符:用于比較運算。包括大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)和不等于(!=)。(3)邏輯運算符:用于邏輯運算。包括邏輯與(and)、邏輯或(or)、邏輯非(not)。(4)位操作運算符:參與運算的量,按二進制位進行運算。包括按位與(&)、按位或(|)、按位非(~)、按位異或(^)、左移(<<)、右移(>>)

2.3.1Python語言運算符簡介第二章數(shù)據(jù)類型、運算符及表達式2.3運算符及表達式of3158(5)賦值運算符:用于賦值運算,分為簡單賦值(=)、復合算術(shù)賦值(+=,-=,*=,/=,%=,**=,//=)。(6)身份運算符:包括is和isnot。(7)成員運算符:包括in和notin。表達式就是數(shù)據(jù)通過運算符以一定規(guī)則連接起來的式子。下面會分別介紹各種類型的運算符及使用方法。

2.3.1Python語言運算符簡介第二章數(shù)據(jù)類型、運算符及表達式2.3運算符及表達式of3159表2.3是各個算術(shù)運算符的使用方式及作用。

2.3.2算術(shù)運算符和算術(shù)表達式表2.3算術(shù)運算符表算術(shù)運算符表達式含義+a+b對a和b進行加法運算-a-b對a和b進行減法運算*a*b對a和b進行乘法運算/a/b對a和b進行除法運算(保留小數(shù)部分)**a**ba的b次冪//a//b對a和b進行整法運算(不保留小數(shù)部分)%a%ba對b取余第二章數(shù)據(jù)類型、運算符及表達式2.3運算符及表達式of3160在Python3.X中即使兩個整型的數(shù)進行除法運算也能保留小數(shù)部位,而不會將結(jié)果變成整型,如果兩個浮點數(shù)進行整除運算,得到的結(jié)果也會舍去小數(shù)部分,如下所示:>>>5/22.5>>>5.2/22.6>>>需要注意的是,在a+b這個表達式中,當a和b都是數(shù)字時,執(zhí)行的是加法運算,當a和b都是字符串時,執(zhí)行的就是合并運算了,如‘a(chǎn)bc’+‘def’=‘a(chǎn)bcdef’。這叫運算符的重載,關于重載以后會講解,除了‘+’之外,‘*’也有重載,下面用代碼來直觀地看一下。2.3.2算術(shù)運算符和算術(shù)表達式第二章數(shù)據(jù)類型、運算符及表達式2.3運算符及表達式of3161>>>a=1>>>b=2>>>print(a+b)3>>>print(a*b)2>>>string='hello'>>>string1='world'>>>print(string+string1)helloworld>>>print(string*3)hellohellohello>>>可以看出,當執(zhí)行運算的對象數(shù)據(jù)類型不同時,運算符的作用也不盡相同。2.3.2算術(shù)運算符和算術(shù)表達式第二章數(shù)據(jù)類型、運算符及表達式2.3運算符及表達式of3162邏輯運算符及表達式如表2.4所示。2.3.3邏輯運算符和邏輯表達式表2.4邏輯運算符邏輯運算符表達式含義andaandb邏輯與oraorb邏輯或notnota邏輯非在表達式aandb中,只有a的值為真才會計算b的值。在表達式aorb中,只有a的值為假才會計算b的值。邏輯運算符可以連用,如:aandborc,按照從左到右的順序進行判斷,當然括號可以改變運算順序。第二章數(shù)據(jù)類型、運算符及表達式2.3運算符及表達式of3163關系運算符是用來對兩個對象進行比較的。這兩個對象可以是任意的,不僅僅是復雜的數(shù)據(jù)類型,甚至自己定義的類也可以用關系運算符進行比較,關系運算符及表達式如表2.5所示。2.3.4關系運算符和關系表達式關系表達式的值是布爾型的,即只有True和False兩種情況。關系運算符可以連用,如a>b>c,該表達式等價于a>bandb>c。但需要注意的是,用來比較的兩個對象一定要是同一數(shù)據(jù)類型的,否則會出現(xiàn)語法報錯。表2.5關系運算符關系運算符表達式含義==a==b等于,比較對象是否相等!=a!=b不等于,判斷對象是否不相等>

a>b大于<

a<b小于>=a>=b大于等于<=a<=b小于等于第二章數(shù)據(jù)類型、運算符及表達式2.3運算符及表達式of3164位運算符就是把數(shù)字轉(zhuǎn)換成二進制的數(shù)字后再進行計算,表2.6是一些位運算符。2.3.5位運算符接下來用一些例子說明上述位運算符的功能。表2.6位運算符位運算符表達式含義&a&b按位與運算符|a|b按位或運算符^a^b按位異或運算符,~~a按位取反,如:~0b1001=0b0110<<

a<<n(n為正整數(shù))a左移n位,高位丟棄,低位補0>>

a>>n(n為正整數(shù))a右移n位,低位丟棄,高位補0第二章數(shù)據(jù)類型、運算符及表達式2.3運算符及表達式of3165表格中前三個位運算符都是將進行計算的兩個數(shù)字轉(zhuǎn)換成二進制數(shù)。這里假設a=0b10001,b=0b1001,結(jié)果如表2.7所示。2.3.5位運算符這里可以看到a和b的位數(shù)不同,在運算中,Python會將位數(shù)少的b補位成0b01001。這里兩個數(shù)的相應部位進行邏輯與,邏輯或或者邏輯異或運算得到的值就是結(jié)果的相應部位。>>>bin(0b100010>>2)'0b1000'>>>bin(0b100010<<2)'0b10001000'表2.7表達式運算表達式結(jié)果a&b0b1a|b0b11001a^b0b11000第二章數(shù)據(jù)類型、運算符及表達式2.3運算符及表達式of3166賦值運算符,顧名思義就是賦給對象值的運算符。表2.8是賦值運算符的種類及含義。2.3.6賦值運算符此外,a,b=c,d這樣表達式也是允許的,即將c賦給a,d賦給b。進一步也可以使用a,b=b,a,這樣就是交換a,b的值。表2.8賦值運算符賦值運算符表達式含義=a=c將c賦給a+=a+=ca=a+c-=a-=ca=a-c*=a*=ca=a*c/=a/=ca=a/c%=a%=ca=a%c**=a**=ca=a**c//=a//=ca=a//c第二章數(shù)據(jù)類型、運算符及表達式2.3運算符及表達式of3167賦值時生成引用而不是復制拷貝,如下例所示。這是需要注意的。如果想要復制copy生成兩個值一樣的對象而互不干擾。可以使用copy包中的deepcopy函數(shù)。這里不再贅述。>>>L1=[1,2,3]>>>L2=L1>>>L1[0]=2>>>print(L1)[2,2,3]>>>print(L2)[2,2,3]>>>L1=[1,2]>>>print(L2)[2,2,3]>>>print(L1)[1,2]>>>在上面可以看到,當把L1的值賦給L2后,修改L1的同時,L2也會跟著改變。同樣地,修改L2,L1也會改變。但如果是對L1重新賦值,指向了另一個對象的話,L2則不會改變的。同樣地,對L2重新賦值指向了另一個對象,L1也不會改變。2.3.6賦值運算符第二章數(shù)據(jù)類型、運算符及表達式2.3運算符及表達式of3168當然,賦值運算符有很多的用法,下面用一個例子來說明。>>>a='hello'>>>print(a)hello>>>a,b='hello',234>>>print(a)hello>>>print(b)234特殊的賦值語句,可以看情況選擇使用。此外所有的賦值運算符除了‘=’外,其余的賦值運算符都只能對數(shù)值型對象使用,當然一些特殊情況下‘+=’也可以對字符串使用。此外,Python不像C語言那樣支持‘++’,‘--’運算符。2.3.6賦值運算符第二章數(shù)據(jù)類型、運算符及表達式2.3運算符及表達式of3169在Python里還有兩種運算符:成員運算符和身份運算符。成員運算符使用來判斷某個對象在不在某序列中,如表2.9所示。2.3.7其他運算符表2.9成員運算符成員運算符表達式含義inainlist_a若a在序列l(wèi)ist_a中,該表達式為真,反之為假notinanotinlist_a若a不在序列l(wèi)ist_a中,該表達式為真,反之為假第二章數(shù)據(jù)類型、運算符及表達式2.3運算符及表達式of3170下面看個例子:>>>list_a=['a','b','c','d']>>>a='a'>>>print(ainlist_a)True>>>print(anotinlist_a)False>>>相信通過這個例子,大家可以明白如何去使用成員運算符。2.3.7其他運算符第二章數(shù)據(jù)類型、運算符及表達式2.3運算符及表達式of3171身份運算符是用來判斷兩個變量所指向的對象是否為同一個對象,這一點與之前關系運算符中的“==”不同,因為“==”是判斷兩個對象的值是否相等。Python里的變量有3個屬性,名字,值和id。身份運算符就是判斷id是否相同的,其含義如表2.10所示。2.3.7其他運算符表2.10身份運算符身份運算符表達式含義isaisb若a和b指向的對象為同一個對象,該表達式為真,反之為假isnotaisnotb若a和b指向的對象不是同一個對象,該表達式為真,反之為假在Python中,可以使用一個內(nèi)置函數(shù)id()來查看變量的id。>>>list1=['a','b','c','d']>>>print(id(list1))1232162124424第二章數(shù)據(jù)類型、運算符及表達式2.3運算符及表達式of3172除了指向同一個內(nèi)存的會共享一個id外,其余的哪怕兩個對象的值相同,id也不會相同。下面再看一個例子:>>>ch1='helloworld'>>>ch2='helloworld'>>>print(ch1isch2)False>>>ch1='abcde'>>>ch2='abcde'>>>print(ch1isch2)True2.3.7其他運算符第二章數(shù)據(jù)類型、運算符及表達式2.3運算符及表達式of3173一般情況下,Python會為每個對象分配內(nèi)存,但為了提高內(nèi)存效率,Python3.X里把相等的且只含字母和數(shù)字的字符串指向了同一個內(nèi)存。是不是只有一些字符串是這樣的呢?>>>num1=257>>>num2=257>>>print(num1isnum2)False>>>num1=256>>>num2=256>>>print(num1isnum2)TruePython3.X中還把-5到256的相等整數(shù)都在內(nèi)存中指向同一個內(nèi)存,這是需要注意的。2.3.7其他運算符第二章數(shù)據(jù)類型、運算符及表達式2.3運算符及表達式of3174Python的算術(shù)表達式具有優(yōu)先性和結(jié)合性,可以將多個算術(shù)表達式通過算術(shù)運算符連接起來。在進行運算是,Python會根據(jù)優(yōu)先性依次計算。下面是各運算符的優(yōu)先級。如果優(yōu)先性相同,則按從左到右的順序依次執(zhí)行(冪運算除外,冪運算從右到左)。括號可以改變優(yōu)先級。雖然運算符有明確的優(yōu)先級,其優(yōu)先級如表2.11所示,但對于復雜的表達式還是建議在適當?shù)奈恢锰砑永ㄌ?,讓計算順序更明確。2.3.8運算符的優(yōu)先級表2.11Python運算符優(yōu)先級表運算符描述**指數(shù)(最高優(yōu)先級)~+-按位翻轉(zhuǎn),一元加號和減號(最后兩個的方法

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論