2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩482頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、程序設(shè)計思想與方法,翁惠玉Email: hyweng@sjtu.edu.cn weng-hy@cs.sjtu.edu.cn,教材參考教材,教材很遺憾,暫無合適的中文版教材目前使用: Python Programming: An Introduction to Computer Science. (電子版)How to Think Like a Computer Scientist—Learnin

2、g with Python.(電子版),什么是計算機科學(xué)?,計算機科學(xué)并非研究計算機!正如天文學(xué)不是研究天文望遠鏡CS要回答的基本問題:什么是可計算的?對此問題的回答有三種方式:實際設(shè)計一個解決問題的算法理論分析問題的可解性:無解的,不是能行可解的通過實驗來研究問題.,3,課程主要內(nèi)容,解決可計算問題需要教會計算機如何解決問題如何教計算機解決問題了解計算機有哪些基本功能因材施教,設(shè)計教學(xué)的過程一門與計算機進行交流的語

3、言,對本課程的定位,學(xué)習(xí)計算機科學(xué)解決問題的思想方法, 應(yīng)用于其他專業(yè)領(lǐng)域不是程序設(shè)計語言課程!本課程需要編程,以加深對計算思維的理解壞消息:學(xué)習(xí)編程語言需要掌握非常繁瑣的細節(jié)好消息:Python語言非常簡單,易學(xué)易用也不是算法和數(shù)據(jù)結(jié)構(gòu)課程!當(dāng)然會學(xué)習(xí)這方面的一些基本技術(shù),5,計算機與程序,計算機組成程序設(shè)計語言初識Python,,,,計算機的組成,硬件:計算機的軀殼軟件:計算機的靈魂,計算機,也被稱之為“電腦”,是

4、一種能夠按照事先存儲的程序自動、高效地對數(shù)據(jù)進行輸入、處理、存儲和輸出的系統(tǒng),,,計算機硬件,存儲器,保存正在運行的程序代碼和數(shù)據(jù)內(nèi)存的最小單元是bit,一個bit存儲一個二進制位。一般8個bit組成一個byte,若干個byte組成一個word在一般的機器中,內(nèi)存按字節(jié)編址,內(nèi)存大小也是按字節(jié)計量關(guān)機后,內(nèi)存的數(shù)據(jù)全部丟失,CPU,CPU (Central Processing Unit) 有兩個部件組成:ALU – Arith

5、metic-Logic Unit(運算器)Control unit (控制器),控制器,控制器控制計算機的其余部分如何完成程序的指令指揮內(nèi)存和其它部件之間的信息的傳送(包括信息和指令)指揮CPU和輸入輸出設(shè)備之間的控制信息的傳送,控制器中的信息存儲,控制器中有兩個寄存器:指令寄存器( IR ):保存當(dāng)前正在執(zhí)行的指令程序計數(shù)器 ( PC ):保存下一條要執(zhí)行的指令地址,控制器的工作,取下一條指令:按PC指定的地址到內(nèi)存中取出下

6、一條指令,存入IR。解碼指令:將指令解碼成一系列的控制信號執(zhí)行指令:將控制信號發(fā)送給相關(guān)部件,執(zhí)行相應(yīng)的運算,運算器的組成,邏輯電路:執(zhí)行控制器發(fā)出的控制信號一組存放正在運算的數(shù)據(jù)的寄存器,輸入輸出設(shè)備,輸入設(shè)備將人能理解的符號轉(zhuǎn)換成計算機能處理的符號。常用的輸入設(shè)備有:鍵盤、鼠標(biāo)、光筆等輸出設(shè)備將計算機的輸出轉(zhuǎn)換成人能理解的輸出。常用的輸出設(shè)備有:顯示器、打印機、音響設(shè)備等,計算機的組成,硬件:計算機的軀殼軟件:計算機的靈魂

7、,計算機,也被稱之為“電腦”,是一種能夠按照事先存儲的程序自動、高效地對數(shù)據(jù)進行輸入、處理、存儲和輸出的系統(tǒng),,,計算機軟件,軟件決定了計算機能做什么.沒有軟件,計算機只是一堆廢鐵.軟件可以分為系統(tǒng)軟件和應(yīng)用軟件。系統(tǒng)軟件居于計算機系統(tǒng)中最靠硬件的部分,它將計算機的用戶與硬件隔離。系統(tǒng)軟件與具體的應(yīng)用無關(guān),但其他的軟件要通過系統(tǒng)軟件才能發(fā)揮作用。常用的系統(tǒng)軟件有操作系統(tǒng)、編譯器、網(wǎng)絡(luò)軟件等。應(yīng)用軟件是為了支持某一應(yīng)用而開發(fā)的軟件。

8、如字處理軟件、財務(wù)軟件等。,計算機與程序,計算機組成程序設(shè)計語言初識Python,,,,程序設(shè)計語言,人與計算機進行交流的一種語言為什么不用自然語言與計算機交互?精確的語法和語義無二義性有不同層次的程序設(shè)計語言,Lu Chaojun, SJTU,19,不同層次的程序設(shè)計語言,機器語言匯編語言高級語言,機器語言,是機器的母語。每種計算機都有自己的機器語言。與計算機硬件設(shè)計有關(guān)。每個語句用一組二進制數(shù)表示用機器語言寫程序

9、是非常困難的,讀機器語言寫的程序也是非常困難的機器語言提供的功能非常簡單,匯編語言,用縮寫和助記符代替機器語言的0和1的比特串和機器語言一樣,不同類的機器有不同的匯編語言匯編程序:將匯編語言寫的程序翻譯成機器語言的程序解決了機器語言的可讀性問題,但沒有解決功能簡單的問題以及可移植型問題,高級語言,類似于英語的語言,適合于人理解功能比機器語言強,解決問題更加容易編譯器:將過程化語言寫的程序(源代碼)翻譯成機器語言的程序(目標(biāo)代

10、碼)解釋器:逐句解釋源程序并執(zhí)行,不保存目標(biāo)代碼。,編譯執(zhí)行,將程序全部翻譯成機器語言的程序,然后再執(zhí)行。,解釋執(zhí)行,高級語言的特點,具備了一定的機器獨立性,使用戶可以專注于解決問題的方法。但某些方面還是受到機器的限制為了解決移植性問題,ANSI制訂了一系列的標(biāo)準(zhǔn),高級語言,本課程采用Python語言高級程序設(shè)計語言有很多種,據(jù)說2008年網(wǎng)上被引用最多的10個語言是(按字母順序): C,C++,C#,Java,JavaScrip

11、t,Perl, PHP,Python,Ruby,SQL,27,計算機與程序,計算機組成程序設(shè)計語言初識Python,,,,Python,Python采用編譯/解釋混合方式:先編譯成字節(jié)碼,再解釋執(zhí)行Python 軟件: ftp://public.sjtu.edu.cn 用戶碼/密碼:hyweng/public啟動Python,29,初識Python,>>>:提示符,提示你可以輸入命令語句:一條命令,如pri

12、nt “hello”串:“hello world”數(shù):3、10表達式:3 + 5賦值:x = 5,30,函數(shù),函數(shù):將完成某一功能的語句組合起來函數(shù)定義函數(shù)調(diào)用:,>>> def area( ):… x = 5… y = 6… print x * y…>>>,>>> area( )30>

13、>>,帶參數(shù)的函數(shù),函數(shù)定義 函數(shù)的調(diào)用,>>> def area(x, y):… print x * y…>>>,>>> area(3, 4)12>>>area(2, 4)8,模塊,如果一段程序需要反復(fù)執(zhí)行,可以把它以文件形式保存在外存儲器中。保存在外存儲器中的程序稱為一個模塊,也稱為腳本文件或源文件。P

14、YTHON的源文件的后綴名為py程序模擬物理現(xiàn)象:chaos程序,# File: chaos.py# A simple program illustrating chaotic behavior.def main(): print "This program illustrates a chaotic function" x = input("Enter a number betwee

15、n 0 and 1: ") for i in range(10): x = 3.9 * x * (1 - x) print x input('Enter 0 to quit ')main(),main函數(shù):標(biāo)志程序的開始,也可以省略注釋變量與賦值程序的執(zhí)行:一個個語句順序執(zhí)行,但也可以重復(fù)執(zhí)行某個語句,for循環(huán),將一段語句重復(fù)執(zhí)行多次語法for

16、in : 是一個值的序列,如[1,3,5,7,9]或range(10)(即[0,1,…,9]).可以是任何語句序列,用左縮進標(biāo)識.,36,程序的控制流,程序的諸語句通常是順序執(zhí)行的,但循環(huán)語句改變了控制流,表示一種控制結(jié)構(gòu).控制流可以用流程圖直觀表達,37,保存文件,用任何一個文本編輯器,保存成純文本格式在IDLE中的file菜單中選擇new window,輸入程序的內(nèi)容。輸入結(jié)束后再在file菜單中選擇save或sa

17、ve as保存到文件中,模塊的執(zhí)行,在IDLE中執(zhí)行程序打開文件:在file菜單下選open或直接用右鍵點擊文件,并選擇用IDLE打開,或先打開IDLE,再在file菜單下選擇open執(zhí)行:在run菜單下選run module或直接按f5Cmd界面中執(zhí)行程序import文件,添加python的路徑,Import時,系統(tǒng)必須知道到哪里去找那個文件這是通過PYTHONPATH指定的安裝PYTHON時,系統(tǒng)會指定缺省path。缺省

18、的路徑是:\Python26\Lib\site-packages添加搜索路徑右鍵單擊我的電腦,然后單擊屬性。 單擊高級選項卡。 單擊環(huán)境變量。 單擊新建添加一個新變量名和值。,END,寫一個簡單的程序,,,軟件開發(fā)過程程序?qū)嵗簻囟绒D(zhuǎn)換程序的構(gòu)件程序?qū)嵗豪⒂嬎?,,程序設(shè)計需要系統(tǒng)化的方法,程序設(shè)計是用精確的語言告訴計算機該做什么,要精確到最細節(jié)處.計算機只會做很簡單的事情,只能刻板地執(zhí)行程序.一方面要寫大型程序

19、,一方面要精確到細枝末節(jié),這極具挑戰(zhàn)性.細節(jié)上的微小差錯可帶來巨大災(zāi)難.例如1996年阿麗亞娜5火箭首次鑒定發(fā)射失敗的原因是將一個浮點數(shù)轉(zhuǎn)換為整數(shù)的代碼有問題.,43,軟件開發(fā)過程,需求分析:問題是什么?制定程序規(guī)格:程序要做什么?對簡單程序描述輸入輸出即可.設(shè)計:程序怎么做?主要任務(wù)是設(shè)計出滿足規(guī)格的算法一般用偽代碼給出總體結(jié)構(gòu),不糾纏細節(jié).實現(xiàn):用某種程序設(shè)計語言翻譯設(shè)計.測試與排錯:測試程序是否如預(yù)期,排除bug

20、.維護:運行中還會不斷有問題.,44,寫一個簡單的程序,,,軟件開發(fā)過程程序?qū)嵗簻囟绒D(zhuǎn)換程序的構(gòu)件程序?qū)嵗豪⒂嬎?,,溫度轉(zhuǎn)換,需求:預(yù)報攝氏度,想知道對應(yīng)華氏度.規(guī)格:輸入攝氏度,顯示輸出華氏度.兩者對應(yīng)關(guān)系是F = ( 9 / 5 ) C + 32.設(shè)計算法:簡單的IPO實現(xiàn):翻譯成Python程序測試:常用邊界數(shù)據(jù).如輸入0, 100,46,算法設(shè)計,將完成任務(wù)的步驟分解成計算機能完成的動作偽代碼寫的算法:

21、輸入攝氏度:celsius計算華氏度:fahrenheit = 9 / 5 celsius + 32顯示輸出:fahrenheit,47,Python程序,# convert.py# convert Celsius temps to Fahrenheitdef main():celsius = input("What is the Celsius temperature? ")fahrenheit

22、= 9.0 / 5.0 * celsius + 32print "The temperature is", fahrenheit, "degrees Fahrenheit.”main(),寫一個簡單的程序,,,軟件開發(fā)過程程序?qū)嵗簻囟绒D(zhuǎn)換程序的構(gòu)件程序?qū)嵗豪⒂嬎?,,程序的構(gòu)成,各種名字:main、 celsius等輸入: celsius = input("What is t

23、he Celsius temperature? ")表達式: 9.0 / 5.0 * celsius + 32賦值: fahrenheit = 9.0 / 5.0 * celsius + 32輸出: print "The temperature is", fahrenheit, "degrees Fahrenheit.”,標(biāo)識符,標(biāo)識符:值,變量,函數(shù),模塊等的名字.標(biāo)識符命名規(guī)則字母下

24、劃線開頭,后接字母數(shù)字下劃線大小寫敏感標(biāo)識符不能是保留詞良好編程風(fēng)格選擇有意義的名字:變量名一般是名詞短語,函數(shù)名一般是動詞短語風(fēng)格統(tǒng)一.,51,表達式,表達式:與數(shù)學(xué)中類似。如3.9 * x * (1?x)參加運算的可以是常量、變量運算符:+、-、*、/、**(指數(shù)運算)可以用括號改變優(yōu)先級良好編程風(fēng)格:用空格、括號增加可讀性.,52,輸出語句,輸出語句print的語法:printprint print , ,

25、 …, print , , …, ,print的語義:自左向右計算表達式的值并在一行上顯示,值之間以空格隔開.最后輸出換行,但以逗號結(jié)尾時不換行.,53,賦值語句,語法 = 語義: 計算表達式的值,存入變量.一個變量可被多次賦值,但總是持有最后一次賦值的結(jié)果.,54,輸入賦值語句,輸入賦值語句 = input()語義計算的值(通常是字符串),顯示該值等待用戶輸入一個表達式(以回車鍵結(jié)束)計算用戶輸入的表達式,得到i

26、nput( )的值把input( )的值存入.良好風(fēng)格用提醒用戶輸入以空格結(jié)束. (Why?),55,同時賦值語句,同時賦值: , ... , = , ... ,語義:計算右邊各表達式的值,分別存入左邊的對應(yīng)變量.應(yīng)用同時賦值交換兩個變量傳統(tǒng)語言的做法:引入一臨時變量Python可以: x, y = y, xinput( )也可為多個變量同時賦值x, y = input(“input x, y”)執(zhí)行到此語

27、句時用戶可輸入:3,4,則x=3, y=4,56,寫一個簡單的程序,,,軟件開發(fā)過程程序?qū)嵗簻囟绒D(zhuǎn)換程序的構(gòu)件程序?qū)嵗豪⒂嬎?,,利息計算,需求:給定本金和利率,計算10年后的本利之和規(guī)格:明年的本金之和 = 今年的本金*(1+利率),算法過程,Python程序,# interest.py# coding = gbkdef main(): print "這是一個計算10年后本利之和的程序"

28、 balance = input("請輸入本金: ") rate = input("請輸入利率: ") for i in range(9): balance = balance * (1 + rate) print balancemain(),上機作業(yè),修改interest.py,使它能輸出每一年的本利之和。例如年份 本利之和=== ==

29、=====1 1012 102.2 104.5……,END,數(shù)值計算,,數(shù)值數(shù)據(jù)的類型數(shù)學(xué)庫的使用求階乘整型數(shù)的限制處理大整型類型轉(zhuǎn)換,,,,,,數(shù)據(jù)類型,程序存儲與操作的信息稱為數(shù)據(jù).數(shù)據(jù)類型不同的數(shù)據(jù)表示方式不同的操作,數(shù)值數(shù)據(jù)類型,整數(shù)類型int不帶小數(shù)點可存儲整數(shù)的精確值浮點數(shù)類型float帶小數(shù)點計算機只能存儲浮點數(shù)的近似值type( )函數(shù)返回值的類型

30、,65,整型數(shù)的內(nèi)部表示,整型數(shù)在內(nèi)部用補碼表示正數(shù)的補碼是它的二進制表示,負數(shù)的補碼是它的絕對值的二進制的每一位取反后再加1。如用8位表示一個整數(shù),那么: [62]補=0 0111110 [-62]補=1 1000010在補碼表示中,最高位是符號。0為正數(shù),1為負數(shù)Python中的整數(shù)用32位表示, 則int范圍為 ?231 ~ 231?1,即-2147483648 ~ 2147483647,實型數(shù)的表示,

31、定點表示:小數(shù)點的位置固定不變浮點表示:小數(shù)點位置不固定。一個浮點數(shù)分成尾數(shù)和階碼兩部分。階碼表示小數(shù)點在該數(shù)中的位數(shù),尾數(shù)表示數(shù)的有效數(shù)值。如十進制數(shù)N=246.135,其浮點表示可為: N = 246135 * 10-3 = 2461350 * 10-4 = 0.246135 * 103 = 0.0246135 * 104,浮點數(shù)的存儲,當(dāng)字長一定時,分配給階碼的位數(shù)越多,表示數(shù)的范圍越大,但分配給尾數(shù)的

32、位數(shù)將減少,從而降低數(shù)的精度。,數(shù)值運算符,69,運算數(shù)都是整數(shù),結(jié)果為整數(shù);至少有一個運算數(shù)是浮點數(shù),結(jié)果為浮點數(shù).,數(shù)值計算,,數(shù)值數(shù)據(jù)的類型數(shù)學(xué)庫的使用求階乘整型數(shù)的限制處理大整型類型轉(zhuǎn)換,,,,,,數(shù)學(xué)庫,其他的數(shù)學(xué)運算都包含在一個庫中庫是系統(tǒng)或其他用戶已經(jīng)寫好的一些有用的程序。一般一個功能表示為一個函數(shù)數(shù)學(xué)庫:支持各類數(shù)學(xué)計算的函數(shù).數(shù)學(xué)庫的引入:import math數(shù)學(xué)庫中函數(shù)的調(diào)用:例如求平方根m

33、ath.sqrt(),求一元二次方程解,# equation1.pyimport mathdef main(): a, b, c = input("Enter three coefficients:") discRoot = math.sqrt(b * b - 4 * a * c) r1 = (-b + discRoot) / (2 * a) r2 = (-b - discRoo

34、t) / (2 * a) print "The solutions are:", r1, r2main(),72,引用數(shù)學(xué)函數(shù)庫中的函數(shù),數(shù)學(xué)庫中的常用函數(shù),pi : 常數(shù)?e : 常數(shù)esqrt(x): 平方根sin(x), cos(x), tan(x), asin(x), acos(x), atan(x): 三角函數(shù)log(x), log10(x):自然對數(shù)與常用對數(shù)

35、exp(x): e的x次方ceil(x): ?x的最小整數(shù)floor(x): ?x的最大整數(shù),數(shù)值計算,,數(shù)值數(shù)據(jù)的類型數(shù)學(xué)庫的使用累積整型數(shù)的限制處理大整型類型轉(zhuǎn)換,,,,,,一種常用算法模式:累積,最終結(jié)果是由逐個中間結(jié)果累積起來形成的.例如6!的計算:先算6 * 5,再* 4,…,再* 1而得.1 + 2 + 3 + 4 + …… + 100:先計算1+2,再加3,……這種累積程序需要一個存放累積結(jié)果的變

36、量,累積過程是一個循環(huán):初始化累積變量循環(huán)直至得到最終結(jié)果 計算累積變量的當(dāng)前累積值,累積(續(xù)),初始化:給累積變量一個合適的初值,以便進入循環(huán)后能正確計算.忘記初始化是一個常見編程錯誤!循環(huán)過程:將一個個值累積到累積變量中,階乘計算程序,具體數(shù)(如6)的階乘fact = 1for f in [6,5,4,3,2,1]:fact = fact * f一般情形n = input(" Enter

37、a number: ")fact = 1for f in range(n,1,-1):fact = fact * fprint "The factorial of ",n, "is",fact,階乘程序的幾點注解,由于乘法結(jié)合律,累積的次序是不重要的.如按下面的循環(huán)來累積:for f in [2,3,4,5,6]:for f in [2,4,6,1,3,5]:for f

38、in range(2,n+1)range()函數(shù)range(n)range(start,n)range(start,n,step)fact也可初始化為n,求1到100的和,sum = 0for i in range(1, 101): sum = sum + iprint sum,數(shù)值計算,,數(shù)值數(shù)據(jù)的類型數(shù)學(xué)庫的使用求階乘整型數(shù)的限制處理大整型類型轉(zhuǎn)換,,,,,,整數(shù)的限制,int型在內(nèi)存占用的空間是有限

39、的,因此能表示的數(shù)值范圍也是有限的。Python中的整數(shù)用32位表示, 只能表示-2147483648 ~ 2147483647浮點數(shù)同樣也有這個問題,數(shù)值計算,,數(shù)值數(shù)據(jù)的類型數(shù)學(xué)庫的使用求階乘整型數(shù)的限制處理大整型類型轉(zhuǎn)換,,,,,,大數(shù)的表示,long int: 不定長,可擴至任意長度(當(dāng)然受限于存儲器容量).如5L, 1234567890000L注意:5L和5有完全不同的表示有長整數(shù)參加的運算,結(jié)果為長整數(shù)

40、.long int運算效率遠低于int,因此能用int就不用long int.浮點數(shù)很大時用科學(xué)表示法:1.234e+12最大數(shù):1e+308,求階乘的更好的實現(xiàn),n = input(" Enter a number: ")fact = 1Lfor f in range(n,1,-1):fact = fact * fprint "The factorial of ",n,“ is

41、 ", fact,階乘增長很快,結(jié)果很容易超出int的范圍,現(xiàn)在的Python環(huán)境都能自動執(zhí)行int到大整數(shù)的轉(zhuǎn)換。當(dāng)超出int范圍時,自動轉(zhuǎn)換為大整型,數(shù)值計算,,數(shù)值數(shù)據(jù)的類型數(shù)學(xué)庫的使用求階乘整型數(shù)的限制處理大整型類型轉(zhuǎn)換,,,,,,類型轉(zhuǎn)換,Python只會做同類型的運算,運算結(jié)果與運算數(shù)類型相同。在混合類型表達式中,Python自動轉(zhuǎn)換: int? long ? float

42、人工轉(zhuǎn)換:利用int(), long(), float()小測驗:求整數(shù)的平均值時用哪個好?avg = sum / countavg = float(sum) / countavg = float(sum / count)浮點數(shù)取整時如何做到四舍五入?int(x + 0.5)round(),END,字符串處理,文本數(shù)據(jù)簡單的字符串處理字符串的機內(nèi)表示字符串和密碼格式化輸出文件處理,,,,,,,文本數(shù)據(jù),計算機應(yīng)

43、用從科學(xué)計算轉(zhuǎn)向信息管理.信息管理中大量的數(shù)據(jù)都是文本數(shù)據(jù).如姓名,地址,簡歷等等計算機中用字符串來表示文本數(shù)據(jù).,89,字符串類型,字符串:字符序列字符串字面值:用一對引號(單或雙)標(biāo)明.“hello world”‘~!@#$%^&*’“漢字也是字符”字符串中包含引號怎么辦?包含單引號:串用雙引號括住包含雙引號:串用單引號括住兩者都有:更一般的方法是串中用轉(zhuǎn)義字符\print “Alice said,

44、\“Hello, ’Bob’\””,字符串處理,文本數(shù)據(jù)簡單的字符串處理字符串的機內(nèi)表示字符串和密碼格式化輸出文件處理,,,,,,,字符串的輸入,普通變量的輸入>>>num = input(“Enter a number: “)Enter a number : 5.6變量num得到值 5.6如果用同樣的方法輸入字符串>>>str = input(“Enter a string: “

45、)Enter a string: JohnPython會輸出出錯信息原因:input()是把輸入當(dāng)成表達式來計算的!,92,字符串的正確輸入,輸入時加上引號>>>str = input(“Enter a string: “)Enter a string: ‘John’Enter a string: “John”使用raw_input()str = raw_input(“Enter a string: “

46、)Enter a string: John,input與raw_input,>>>x = input() >>>x = raw_input()“John” John>>>x >>>x‘John’ ‘John’>>>x = input()

47、 >>>x = raw_input()3*4+2 3*4+2>>>x >>>x14 3*4+2,94,字符串賦值,字符串可以直接賦值>>>Str = ‘a(chǎn)bcde’>>>Str‘a(chǎn)bcde’,取字符,字符串是字符序列,可通過位置索引

48、訪問每個字符.[]對長度為n的字符串,索引可以是大于0的數(shù):自左向右為0 ~ n?1, 或者是負數(shù):自右向左為?1, ?2, ?3,…, ?n 例如:若str = “Hello Bob”,則str[0]或str[?9]是‘H’str[5]或str[?4]是‘ ’str[8]或str[?1]是‘b’str[9]或str[?10]越界出錯,取子串,切段:取一個索引范圍內(nèi)的字符.[:]所取子串:位置索引從start ~

49、end?1start或/和end可省略,缺省值為串的首尾例如:若str = “Hello Bob”,則str[0:3]是‘Hel’str[5:9]是‘ Bob’str[:5]即str[0:5]str[5:]即str[5,9]str[:]即str[0:9],連接,兩字符串的連接 + 例如:“Hello” + “Bob”得到“HelloBob”一個字符串的重復(fù)例如:3*“Hi”和“Hi”*3都得到“HiHiHi”

50、串長度函數(shù)len(),編程實例:獲得每個月份的縮寫,在一個數(shù)據(jù)表里查找目標(biāo)def main():months=“JanFebMarAprMayJunJulAugSepOctNovDec”n = input(“Enter month number (1-12): ”)pos = (n-1)*3monthAbbr = months[pos:pos+3]print “The month abbreviation is”,

51、monthAbbr+”.”這是簡單查找:利用位置規(guī)律來定位.若是月份全稱怎么辦?,字符串處理,文本數(shù)據(jù)簡單的字符串處理字符串的機內(nèi)表示字符串和密碼格式化輸出文件處理,,,,,,,字符串的機內(nèi)表示,與數(shù)值一樣,計算機內(nèi)用二進制數(shù)表示每一個字符因此操作字符串本質(zhì)上仍然是數(shù)值運算.表示字符的這個數(shù)值稱為字符的編碼.每個字符用什么編碼?對這個問題的不同回答就導(dǎo)致了許多不同的字符編碼系統(tǒng)例如:字符集只包含A~Z,分別用1

52、~26表示.“8 5 12 12 15”是什么意思?,編碼標(biāo)準(zhǔn),不同計算機若用不同編碼體系,則彼此無法溝通。標(biāo)準(zhǔn)化ASCII:單字節(jié)編碼只用到7位: 0 - 12796個可打印字符,32個控制字符利用8位可擴充ASCII: 0 - 255GB2312:兩字節(jié)(6763個漢字)GB18030:最多四字節(jié)(70244個漢字)Unicode:最多四字節(jié).,字符與編碼,求給定字符的編碼: ord()ord(‘a(chǎn)’)可得97

53、求給定編碼的字符:chr()chr(97)可得‘a(chǎn)’可見Python 2.7支持ASCII.支持中文編碼嗎?>>>print “你好”,字符串處理,文本數(shù)據(jù)簡單的字符串處理字符串的機內(nèi)表示字符串和密碼格式化輸出文件處理,,,,,,,編碼,編碼:輸出一串字符對應(yīng)的內(nèi)碼def main(): message=raw_input("Enter the message to encode:

54、") for ch in message: print ord(ch),main()執(zhí)行時Enter the message to encode:abcdef97,98,99,10,11,12,解碼,輸出一串?dāng)?shù)字對應(yīng)的字符串稱為解碼import stringdef main(): code = raw_input("Enter the code of message: &

55、quot;) message = "" for numStr in string.split(code): num = eval(numStr) message = message + chr(num) print "the decoded message is:", messagemain()運行時Enter the code o

56、f message:97 98 99 100the decoded message is:abcd,幾個函數(shù),字符串與數(shù)字的相互轉(zhuǎn)換eval(字符串):將字符串轉(zhuǎn)換成數(shù)字。例如:eval(“500”) 返回500str(表達式) :將數(shù)值當(dāng)作字符串。例如:str(3+4*5)string.split:string庫中的函數(shù),字符串庫,Python提供的string庫包含了很多有用的字符串處理函數(shù)例如split():將字符串拆分

57、成子串string.split(“Hello string library!”)返回結(jié)果:[‘Hello’,’string’,’library!’]string.split(“32,24,25,57”,”,”):按,拆分返回結(jié)果:[’32’,’24’,’25’,’57’],字符串庫的常用函數(shù),capitalize(s): 使字符串s的首字母大寫capwords(s): 使字符串s中的每個單詞首字母大寫center(s, wi

58、dth), ljust(s, width), rjust(s, width): 使s變成width寬度且居中/左對齊/右對齊count(s, sub): sub在s中出現(xiàn)次數(shù)find(s, sub), rfind(s, sub): 在s中找sub的首次/末次出現(xiàn)join(seq): 將串序列中的串合并成一個串,分隔符默認(rèn)為空格lower(s), upper(s): 將串變成小寫/大寫lstrip(s), rstrip(s):

59、刪除打頭/收尾的空格replace(s, oldsub, newsub): 在s中用新子串替換舊子串,字符串與密碼,字符串在機內(nèi)使用一個數(shù)字序列表示。如果不知道采用什么編碼,只看這個數(shù)字序列是猜不出表示的是什么字符串。這就是一種加密機制,稱為替換法。字符編碼都是工業(yè)標(biāo)準(zhǔn),不是為了保密目的,從編碼到密碼,密碼:為了保密而對信息進行編碼.加密是計算機的一個重要應(yīng)用,凱撒密碼(Caesar cipher),a-D、b-E、 c-F

60、、d-G、e-H … … s-V … …、z-C eg. 明文:access control 可變?yōu)椋?DFFHVV FRQWURO,字符串處理,文本數(shù)據(jù)簡單的字符串處理字符串的機內(nèi)表示字符串和密碼格式化輸出文件處理,,,,,,,格式化輸出,格式化運算符%語法 % ()語義:模板串中用%標(biāo)記“空位”,輸出時用實際值填入.例如print “The price is $%0.2f” % (100)The price

61、 is $100.00,格式描述,%.三種類型字符:decimal, float, string寬度:用多少位置顯示數(shù)值.省略或指定為0:根據(jù)值的實際長度顯示.寬度超出值的長度時:右對齊顯示寬度前加負號:左對齊.對浮點數(shù)用超長寬度會怎樣?試試…精度:指示浮點數(shù)值的小數(shù)位數(shù).省略:按系統(tǒng)默認(rèn)的小數(shù)位數(shù)顯示.print “%f” % (math.pi),浮點數(shù)如何精確化?,浮點數(shù)的機內(nèi)表示是近似值.銀行應(yīng)用要求精確表示金

62、額,故不宜用浮點數(shù)及浮點運算.解決辦法:以“分”為單位,用整數(shù)表示金額.設(shè)金額是x分,輸出時利用x/100和x%100分別得到“元”和“角分”.print “You have %d.%02d” % \ (x/100, x%100)02d:不足2位用0填充\:語句換行繼續(xù),字符串處理,文本數(shù)據(jù)簡單的字符串處理字符串的機內(nèi)表示字符串和密碼格式化輸出文件處理,,,,,,,文件處理,文件:存儲在磁盤上的數(shù)據(jù)序列

63、.典型的文件結(jié)構(gòu):基本數(shù)據(jù)項:可為任何類型若干數(shù)據(jù)項構(gòu)成記錄若干記錄構(gòu)成文件例如:學(xué)生基本數(shù)據(jù)項:學(xué)號,姓名,年齡一個學(xué)生記錄:{學(xué)號,姓名,年齡}文件:全體學(xué)生記錄,118,文本文件,文件中是文本數(shù)據(jù)文本文件可視為存儲在磁盤上的字符串.單行字符串多行字符串行尾(EOL):用特殊字符,如新行(newline)字符.Python用\n表示新行字符,該字符在顯示時被解釋成新行字符.例:print “first

64、line\nsecond line”,文件處理:打開文件,程序不能直接與外存儲器交互信息,必須通過內(nèi)存進行交流打開文件:將磁盤文件與一個程序變量關(guān)聯(lián),做好讀寫準(zhǔn)備. = open(,): “r”或“w”例如infile = open(“myfile”, “r”)outfile = open(“myfile”, “w”)寫打開時小心文件名!因為可能破壞現(xiàn)有文件,文件處理:讀寫文件,讀文件:讀出文件內(nèi)容.read():將整個

65、文件作為一個字符串讀入.readline():讀入一行.readlines():讀入所有行點表示法:文件是對象!寫文件:將新內(nèi)容寫入文件..write()若想寫多行內(nèi)容,需寫入\n,文件處理:關(guān)閉文件,關(guān)閉文件:取消文件變量與磁盤文件的關(guān)聯(lián)..close()關(guān)閉文件時,系統(tǒng)會將內(nèi)存中文件內(nèi)容輸出到磁盤.,將整個文件作為一個字符串,# file0.pydef main(): infile = open(&quo

66、t;encode.py", 'r') str = infile.read() print str infile.close()main(),讀入文件的前5行,# file1.pydef main(): infile = open("encode.py", 'r') for i in range(5): str

67、= infile.readline() print str infile.close()main(),讀入某個文件的所有行,# file3.pydef main(): infile = open("encode.py", 'r') for line in infile.readlines(): print line infile.c

68、lose()main(),125,END,面向?qū)ο笈c圖形編程,面向?qū)ο蟮乃枷雸D形化編程圖形對象的使用未知值的圖形化處理坐標(biāo)系的選擇圖形交互圖形模塊介紹,,,,,,,,數(shù)據(jù)與操作:傳統(tǒng)觀點,數(shù)據(jù)類型某種值的集合運算(操作)的集合計算就是對數(shù)據(jù)進行操作數(shù)據(jù)與操作分離數(shù)據(jù)是被動的, 操作是主動的例如:string類型的值是’abc’等, 對串的操作有+, *, len()等,數(shù)據(jù)與操作:面向?qū)ο笥^點,對象(Obje

69、ct):集數(shù)據(jù)與操作于一身.對象知道一些信息對象能對那些信息進行處理計算:向?qū)ο蟀l(fā)出請求操作的消息.主動的數(shù)據(jù)類型面向?qū)ο?Object-Oriented):軟件系統(tǒng)由各種對象組成, 對象之間通過消息進行交互.現(xiàn)代軟件系統(tǒng)幾乎都是OO設(shè)計和實現(xiàn).,OO基本概念,類(class):描述同類對象的共性包含的數(shù)據(jù):任何類型的數(shù)據(jù),甚至可以是對其他對象的引用.能執(zhí)行的操作(方法)對象(object):類的實例(instance

70、)同類的不同對象可有不同的數(shù)據(jù)值(實例變量),但能執(zhí)行的操作是一樣的創(chuàng)建對象:使用類的構(gòu)造器(constructor)初始化對象(,,…)消息:請求對象執(zhí)行它的方法.(,,…),對象的方法,不同類型的對象當(dāng)然提供不同的操作對象一般都提供讀取它的實例變量值的方法,統(tǒng)稱為accessor。例如Point對象的getX()和getY(),Line對象的getP1()和getP2()。對象一般也提供修改其實例變量的方法,統(tǒng)稱為m

溫馨提示

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

評論

0/150

提交評論