版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、程序設(shè)計(jì)思想與方法,翁惠玉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.(電子版),什么是計(jì)算機(jī)科學(xué)?,計(jì)算機(jī)科學(xué)并非研究計(jì)算機(jī)!正如天文學(xué)不是研究天文望遠(yuǎn)鏡CS要回答的基本問題:什么是可計(jì)算的?對(duì)此問題的回答有三種方式:實(shí)際設(shè)計(jì)一個(gè)解決問題的算法理論分析問題的可解性:無解的,不是能行可解的通過實(shí)驗(yàn)來研究問題.,3,課程主要內(nèi)容,解決可計(jì)算問題需要教會(huì)計(jì)算機(jī)如何解決問題如何教計(jì)算機(jī)解決問題了解計(jì)算機(jī)有哪些基本功能因材施教,設(shè)計(jì)教學(xué)的過程一門與計(jì)算機(jī)進(jìn)行交流的語
3、言,對(duì)本課程的定位,學(xué)習(xí)計(jì)算機(jī)科學(xué)解決問題的思想方法, 應(yīng)用于其他專業(yè)領(lǐng)域不是程序設(shè)計(jì)語言課程!本課程需要編程,以加深對(duì)計(jì)算思維的理解壞消息:學(xué)習(xí)編程語言需要掌握非常繁瑣的細(xì)節(jié)好消息:Python語言非常簡(jiǎn)單,易學(xué)易用也不是算法和數(shù)據(jù)結(jié)構(gòu)課程!當(dāng)然會(huì)學(xué)習(xí)這方面的一些基本技術(shù),5,計(jì)算機(jī)與程序,計(jì)算機(jī)組成程序設(shè)計(jì)語言初識(shí)Python,,,,計(jì)算機(jī)的組成,硬件:計(jì)算機(jī)的軀殼軟件:計(jì)算機(jī)的靈魂,計(jì)算機(jī),也被稱之為“電腦”,是
4、一種能夠按照事先存儲(chǔ)的程序自動(dòng)、高效地對(duì)數(shù)據(jù)進(jìn)行輸入、處理、存儲(chǔ)和輸出的系統(tǒng),,,計(jì)算機(jī)硬件,存儲(chǔ)器,保存正在運(yùn)行的程序代碼和數(shù)據(jù)內(nèi)存的最小單元是bit,一個(gè)bit存儲(chǔ)一個(gè)二進(jìn)制位。一般8個(gè)bit組成一個(gè)byte,若干個(gè)byte組成一個(gè)word在一般的機(jī)器中,內(nèi)存按字節(jié)編址,內(nèi)存大小也是按字節(jié)計(jì)量關(guān)機(jī)后,內(nèi)存的數(shù)據(jù)全部丟失,CPU,CPU (Central Processing Unit) 有兩個(gè)部件組成:ALU – Arith
5、metic-Logic Unit(運(yùn)算器)Control unit (控制器),控制器,控制器控制計(jì)算機(jī)的其余部分如何完成程序的指令指揮內(nèi)存和其它部件之間的信息的傳送(包括信息和指令)指揮CPU和輸入輸出設(shè)備之間的控制信息的傳送,控制器中的信息存儲(chǔ),控制器中有兩個(gè)寄存器:指令寄存器( IR ):保存當(dāng)前正在執(zhí)行的指令程序計(jì)數(shù)器 ( PC ):保存下一條要執(zhí)行的指令地址,控制器的工作,取下一條指令:按PC指定的地址到內(nèi)存中取出下
6、一條指令,存入IR。解碼指令:將指令解碼成一系列的控制信號(hào)執(zhí)行指令:將控制信號(hào)發(fā)送給相關(guān)部件,執(zhí)行相應(yīng)的運(yùn)算,運(yùn)算器的組成,邏輯電路:執(zhí)行控制器發(fā)出的控制信號(hào)一組存放正在運(yùn)算的數(shù)據(jù)的寄存器,輸入輸出設(shè)備,輸入設(shè)備將人能理解的符號(hào)轉(zhuǎn)換成計(jì)算機(jī)能處理的符號(hào)。常用的輸入設(shè)備有:鍵盤、鼠標(biāo)、光筆等輸出設(shè)備將計(jì)算機(jī)的輸出轉(zhuǎn)換成人能理解的輸出。常用的輸出設(shè)備有:顯示器、打印機(jī)、音響設(shè)備等,計(jì)算機(jī)的組成,硬件:計(jì)算機(jī)的軀殼軟件:計(jì)算機(jī)的靈魂
7、,計(jì)算機(jī),也被稱之為“電腦”,是一種能夠按照事先存儲(chǔ)的程序自動(dòng)、高效地對(duì)數(shù)據(jù)進(jìn)行輸入、處理、存儲(chǔ)和輸出的系統(tǒng),,,計(jì)算機(jī)軟件,軟件決定了計(jì)算機(jī)能做什么.沒有軟件,計(jì)算機(jī)只是一堆廢鐵.軟件可以分為系統(tǒng)軟件和應(yīng)用軟件。系統(tǒng)軟件居于計(jì)算機(jī)系統(tǒng)中最靠硬件的部分,它將計(jì)算機(jī)的用戶與硬件隔離。系統(tǒng)軟件與具體的應(yīng)用無關(guān),但其他的軟件要通過系統(tǒng)軟件才能發(fā)揮作用。常用的系統(tǒng)軟件有操作系統(tǒng)、編譯器、網(wǎng)絡(luò)軟件等。應(yīng)用軟件是為了支持某一應(yīng)用而開發(fā)的軟件。
8、如字處理軟件、財(cái)務(wù)軟件等。,計(jì)算機(jī)與程序,計(jì)算機(jī)組成程序設(shè)計(jì)語言初識(shí)Python,,,,程序設(shè)計(jì)語言,人與計(jì)算機(jī)進(jìn)行交流的一種語言為什么不用自然語言與計(jì)算機(jī)交互?精確的語法和語義無二義性有不同層次的程序設(shè)計(jì)語言,Lu Chaojun, SJTU,19,不同層次的程序設(shè)計(jì)語言,機(jī)器語言匯編語言高級(jí)語言,機(jī)器語言,是機(jī)器的母語。每種計(jì)算機(jī)都有自己的機(jī)器語言。與計(jì)算機(jī)硬件設(shè)計(jì)有關(guān)。每個(gè)語句用一組二進(jìn)制數(shù)表示用機(jī)器語言寫程序
9、是非常困難的,讀機(jī)器語言寫的程序也是非常困難的機(jī)器語言提供的功能非常簡(jiǎn)單,匯編語言,用縮寫和助記符代替機(jī)器語言的0和1的比特串和機(jī)器語言一樣,不同類的機(jī)器有不同的匯編語言匯編程序:將匯編語言寫的程序翻譯成機(jī)器語言的程序解決了機(jī)器語言的可讀性問題,但沒有解決功能簡(jiǎn)單的問題以及可移植型問題,高級(jí)語言,類似于英語的語言,適合于人理解功能比機(jī)器語言強(qiáng),解決問題更加容易編譯器:將過程化語言寫的程序(源代碼)翻譯成機(jī)器語言的程序(目標(biāo)代
10、碼)解釋器:逐句解釋源程序并執(zhí)行,不保存目標(biāo)代碼。,編譯執(zhí)行,將程序全部翻譯成機(jī)器語言的程序,然后再執(zhí)行。,解釋執(zhí)行,高級(jí)語言的特點(diǎn),具備了一定的機(jī)器獨(dú)立性,使用戶可以專注于解決問題的方法。但某些方面還是受到機(jī)器的限制為了解決移植性問題,ANSI制訂了一系列的標(biāo)準(zhǔn),高級(jí)語言,本課程采用Python語言高級(jí)程序設(shè)計(jì)語言有很多種,據(jù)說2008年網(wǎng)上被引用最多的10個(gè)語言是(按字母順序): C,C++,C#,Java,JavaScrip
11、t,Perl, PHP,Python,Ruby,SQL,27,計(jì)算機(jī)與程序,計(jì)算機(jī)組成程序設(shè)計(jì)語言初識(shí)Python,,,,Python,Python采用編譯/解釋混合方式:先編譯成字節(jié)碼,再解釋執(zhí)行Python 軟件: ftp://public.sjtu.edu.cn 用戶碼/密碼:hyweng/public啟動(dòng)Python,29,初識(shí)Python,>>>:提示符,提示你可以輸入命令語句:一條命令,如pri
12、nt “hello”串:“hello world”數(shù):3、10表達(dá)式: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í)行,可以把它以文件形式保存在外存儲(chǔ)器中。保存在外存儲(chǔ)器中的程序稱為一個(gè)模塊,也稱為腳本文件或源文件。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í)行:一個(gè)個(gè)語句順序執(zhí)行,但也可以重復(fù)執(zhí)行某個(gè)語句,for循環(huán),將一段語句重復(fù)執(zhí)行多次語法for
16、in : 是一個(gè)值的序列,如[1,3,5,7,9]或range(10)(即[0,1,…,9]).可以是任何語句序列,用左縮進(jìn)標(biāo)識(shí).,36,程序的控制流,程序的諸語句通常是順序執(zhí)行的,但循環(huán)語句改變了控制流,表示一種控制結(jié)構(gòu).控制流可以用流程圖直觀表達(dá),37,保存文件,用任何一個(gè)文本編輯器,保存成純文本格式在IDLE中的file菜單中選擇new window,輸入程序的內(nèi)容。輸入結(jié)束后再在file菜單中選擇save或sa
17、ve as保存到文件中,模塊的執(zhí)行,在IDLE中執(zhí)行程序打開文件:在file菜單下選open或直接用右鍵點(diǎn)擊文件,并選擇用IDLE打開,或先打開IDLE,再在file菜單下選擇open執(zhí)行:在run菜單下選run module或直接按f5Cmd界面中執(zhí)行程序import文件,添加python的路徑,Import時(shí),系統(tǒng)必須知道到哪里去找那個(gè)文件這是通過PYTHONPATH指定的安裝PYTHON時(shí),系統(tǒng)會(huì)指定缺省path。缺省
18、的路徑是:\Python26\Lib\site-packages添加搜索路徑右鍵單擊我的電腦,然后單擊屬性。 單擊高級(jí)選項(xiàng)卡。 單擊環(huán)境變量。 單擊新建添加一個(gè)新變量名和值。,END,寫一個(gè)簡(jiǎn)單的程序,,,軟件開發(fā)過程程序?qū)嵗簻囟绒D(zhuǎn)換程序的構(gòu)件程序?qū)嵗豪⒂?jì)算,,,程序設(shè)計(jì)需要系統(tǒng)化的方法,程序設(shè)計(jì)是用精確的語言告訴計(jì)算機(jī)該做什么,要精確到最細(xì)節(jié)處.計(jì)算機(jī)只會(huì)做很簡(jiǎn)單的事情,只能刻板地執(zhí)行程序.一方面要寫大型程序
19、,一方面要精確到細(xì)枝末節(jié),這極具挑戰(zhàn)性.細(xì)節(jié)上的微小差錯(cuò)可帶來巨大災(zāi)難.例如1996年阿麗亞娜5火箭首次鑒定發(fā)射失敗的原因是將一個(gè)浮點(diǎn)數(shù)轉(zhuǎn)換為整數(shù)的代碼有問題.,43,軟件開發(fā)過程,需求分析:?jiǎn)栴}是什么?制定程序規(guī)格:程序要做什么?對(duì)簡(jiǎn)單程序描述輸入輸出即可.設(shè)計(jì):程序怎么做?主要任務(wù)是設(shè)計(jì)出滿足規(guī)格的算法一般用偽代碼給出總體結(jié)構(gòu),不糾纏細(xì)節(jié).實(shí)現(xiàn):用某種程序設(shè)計(jì)語言翻譯設(shè)計(jì).測(cè)試與排錯(cuò):測(cè)試程序是否如預(yù)期,排除bug
20、.維護(hù):運(yùn)行中還會(huì)不斷有問題.,44,寫一個(gè)簡(jiǎn)單的程序,,,軟件開發(fā)過程程序?qū)嵗簻囟绒D(zhuǎn)換程序的構(gòu)件程序?qū)嵗豪⒂?jì)算,,,溫度轉(zhuǎn)換,需求:預(yù)報(bào)攝氏度,想知道對(duì)應(yīng)華氏度.規(guī)格:輸入攝氏度,顯示輸出華氏度.兩者對(duì)應(yīng)關(guān)系是F = ( 9 / 5 ) C + 32.設(shè)計(jì)算法:簡(jiǎn)單的IPO實(shí)現(xiàn):翻譯成Python程序測(cè)試:常用邊界數(shù)據(jù).如輸入0, 100,46,算法設(shè)計(jì),將完成任務(wù)的步驟分解成計(jì)算機(jī)能完成的動(dòng)作偽代碼寫的算法:
21、輸入攝氏度:celsius計(jì)算華氏度: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(),寫一個(gè)簡(jiǎn)單的程序,,,軟件開發(fā)過程程序?qū)嵗簻囟绒D(zhuǎn)換程序的構(gòu)件程序?qū)嵗豪⒂?jì)算,,,程序的構(gòu)成,各種名字:main、 celsius等輸入: celsius = input("What is t
23、he Celsius temperature? ")表達(dá)式: 9.0 / 5.0 * celsius + 32賦值: fahrenheit = 9.0 / 5.0 * celsius + 32輸出: print "The temperature is", fahrenheit, "degrees Fahrenheit.”,標(biāo)識(shí)符,標(biāo)識(shí)符:值,變量,函數(shù),模塊等的名字.標(biāo)識(shí)符命名規(guī)則字母下
24、劃線開頭,后接字母數(shù)字下劃線大小寫敏感標(biāo)識(shí)符不能是保留詞良好編程風(fēng)格選擇有意義的名字:變量名一般是名詞短語,函數(shù)名一般是動(dòng)詞短語風(fēng)格統(tǒng)一.,51,表達(dá)式,表達(dá)式:與數(shù)學(xué)中類似。如3.9 * x * (1?x)參加運(yùn)算的可以是常量、變量運(yùn)算符:+、-、*、/、**(指數(shù)運(yùn)算)可以用括號(hào)改變優(yōu)先級(jí)良好編程風(fēng)格:用空格、括號(hào)增加可讀性.,52,輸出語句,輸出語句print的語法:printprint print , ,
25、 …, print , , …, ,print的語義:自左向右計(jì)算表達(dá)式的值并在一行上顯示,值之間以空格隔開.最后輸出換行,但以逗號(hào)結(jié)尾時(shí)不換行.,53,賦值語句,語法 = 語義: 計(jì)算表達(dá)式的值,存入變量.一個(gè)變量可被多次賦值,但總是持有最后一次賦值的結(jié)果.,54,輸入賦值語句,輸入賦值語句 = input()語義計(jì)算的值(通常是字符串),顯示該值等待用戶輸入一個(gè)表達(dá)式(以回車鍵結(jié)束)計(jì)算用戶輸入的表達(dá)式,得到i
26、nput( )的值把input( )的值存入.良好風(fēng)格用提醒用戶輸入以空格結(jié)束. (Why?),55,同時(shí)賦值語句,同時(shí)賦值: , ... , = , ... ,語義:計(jì)算右邊各表達(dá)式的值,分別存入左邊的對(duì)應(yīng)變量.應(yīng)用同時(shí)賦值交換兩個(gè)變量傳統(tǒng)語言的做法:引入一臨時(shí)變量Python可以: x, y = y, xinput( )也可為多個(gè)變量同時(shí)賦值x, y = input(“input x, y”)執(zhí)行到此語
27、句時(shí)用戶可輸入:3,4,則x=3, y=4,56,寫一個(gè)簡(jiǎn)單的程序,,,軟件開發(fā)過程程序?qū)嵗簻囟绒D(zhuǎn)換程序的構(gòu)件程序?qū)嵗豪⒂?jì)算,,,利息計(jì)算,需求:給定本金和利率,計(jì)算10年后的本利之和規(guī)格:明年的本金之和 = 今年的本金*(1+利率),算法過程,Python程序,# interest.py# coding = gbkdef main(): print "這是一個(gè)計(jì)算10年后本利之和的程序"
28、 balance = input("請(qǐng)輸入本金: ") rate = input("請(qǐng)輸入利率: ") for i in range(9): balance = balance * (1 + rate) print balancemain(),上機(jī)作業(yè),修改interest.py,使它能輸出每一年的本利之和。例如年份 本利之和=== ==
29、=====1 1012 102.2 104.5……,END,數(shù)值計(jì)算,,數(shù)值數(shù)據(jù)的類型數(shù)學(xué)庫的使用求階乘整型數(shù)的限制處理大整型類型轉(zhuǎn)換,,,,,,數(shù)據(jù)類型,程序存儲(chǔ)與操作的信息稱為數(shù)據(jù).數(shù)據(jù)類型不同的數(shù)據(jù)表示方式不同的操作,數(shù)值數(shù)據(jù)類型,整數(shù)類型int不帶小數(shù)點(diǎn)可存儲(chǔ)整數(shù)的精確值浮點(diǎn)數(shù)類型float帶小數(shù)點(diǎn)計(jì)算機(jī)只能存儲(chǔ)浮點(diǎn)數(shù)的近似值type( )函數(shù)返回值的類型
30、,65,整型數(shù)的內(nèi)部表示,整型數(shù)在內(nèi)部用補(bǔ)碼表示正數(shù)的補(bǔ)碼是它的二進(jìn)制表示,負(fù)數(shù)的補(bǔ)碼是它的絕對(duì)值的二進(jìn)制的每一位取反后再加1。如用8位表示一個(gè)整數(shù),那么: [62]補(bǔ)=0 0111110 [-62]補(bǔ)=1 1000010在補(bǔ)碼表示中,最高位是符號(hào)。0為正數(shù),1為負(fù)數(shù)Python中的整數(shù)用32位表示, 則int范圍為 ?231 ~ 231?1,即-2147483648 ~ 2147483647,實(shí)型數(shù)的表示,
31、定點(diǎn)表示:小數(shù)點(diǎn)的位置固定不變浮點(diǎn)表示:小數(shù)點(diǎn)位置不固定。一個(gè)浮點(diǎn)數(shù)分成尾數(shù)和階碼兩部分。階碼表示小數(shù)點(diǎn)在該數(shù)中的位數(shù),尾數(shù)表示數(shù)的有效數(shù)值。如十進(jìn)制數(shù)N=246.135,其浮點(diǎn)表示可為: N = 246135 * 10-3 = 2461350 * 10-4 = 0.246135 * 103 = 0.0246135 * 104,浮點(diǎn)數(shù)的存儲(chǔ),當(dāng)字長一定時(shí),分配給階碼的位數(shù)越多,表示數(shù)的范圍越大,但分配給尾數(shù)的
32、位數(shù)將減少,從而降低數(shù)的精度。,數(shù)值運(yùn)算符,69,運(yùn)算數(shù)都是整數(shù),結(jié)果為整數(shù);至少有一個(gè)運(yùn)算數(shù)是浮點(diǎn)數(shù),結(jié)果為浮點(diǎn)數(shù).,數(shù)值計(jì)算,,數(shù)值數(shù)據(jù)的類型數(shù)學(xué)庫的使用求階乘整型數(shù)的限制處理大整型類型轉(zhuǎn)換,,,,,,數(shù)學(xué)庫,其他的數(shù)學(xué)運(yùn)算都包含在一個(gè)庫中庫是系統(tǒng)或其他用戶已經(jīng)寫好的一些有用的程序。一般一個(gè)功能表示為一個(gè)函數(shù)數(shù)學(xué)庫:支持各類數(shù)學(xué)計(jì)算的函數(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):自然對(duì)數(shù)與常用對(duì)數(shù)
35、exp(x): e的x次方ceil(x): ?x的最小整數(shù)floor(x): ?x的最大整數(shù),數(shù)值計(jì)算,,數(shù)值數(shù)據(jù)的類型數(shù)學(xué)庫的使用累積整型數(shù)的限制處理大整型類型轉(zhuǎn)換,,,,,,一種常用算法模式:累積,最終結(jié)果是由逐個(gè)中間結(jié)果累積起來形成的.例如6!的計(jì)算:先算6 * 5,再* 4,…,再* 1而得.1 + 2 + 3 + 4 + …… + 100:先計(jì)算1+2,再加3,……這種累積程序需要一個(gè)存放累積結(jié)果的變
36、量,累積過程是一個(gè)循環(huán):初始化累積變量循環(huán)直至得到最終結(jié)果 計(jì)算累積變量的當(dāng)前累積值,累積(續(xù)),初始化:給累積變量一個(gè)合適的初值,以便進(jìn)入循環(huán)后能正確計(jì)算.忘記初始化是一個(gè)常見編程錯(cuò)誤!循環(huán)過程:將一個(gè)個(gè)值累積到累積變量中,階乘計(jì)算程序,具體數(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,階乘程序的幾點(diǎn)注解,由于乘法結(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ù)值計(jì)算,,數(shù)值數(shù)據(jù)的類型數(shù)學(xué)庫的使用求階乘整型數(shù)的限制處理大整型類型轉(zhuǎn)換,,,,,,整數(shù)的限制,int型在內(nèi)存占用的空間是有限
39、的,因此能表示的數(shù)值范圍也是有限的。Python中的整數(shù)用32位表示, 只能表示-2147483648 ~ 2147483647浮點(diǎn)數(shù)同樣也有這個(gè)問題,數(shù)值計(jì)算,,數(shù)值數(shù)據(jù)的類型數(shù)學(xué)庫的使用求階乘整型數(shù)的限制處理大整型類型轉(zhuǎn)換,,,,,,大數(shù)的表示,long int: 不定長,可擴(kuò)至任意長度(當(dāng)然受限于存儲(chǔ)器容量).如5L, 1234567890000L注意:5L和5有完全不同的表示有長整數(shù)參加的運(yùn)算,結(jié)果為長整數(shù)
40、.long int運(yùn)算效率遠(yuǎn)低于int,因此能用int就不用long int.浮點(diǎn)數(shù)很大時(shí)用科學(xué)表示法:1.234e+12最大數(shù):1e+308,求階乘的更好的實(shí)現(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)境都能自動(dòng)執(zhí)行int到大整數(shù)的轉(zhuǎn)換。當(dāng)超出int范圍時(shí),自動(dòng)轉(zhuǎn)換為大整型,數(shù)值計(jì)算,,數(shù)值數(shù)據(jù)的類型數(shù)學(xué)庫的使用求階乘整型數(shù)的限制處理大整型類型轉(zhuǎn)換,,,,,,類型轉(zhuǎn)換,Python只會(huì)做同類型的運(yùn)算,運(yùn)算結(jié)果與運(yùn)算數(shù)類型相同。在混合類型表達(dá)式中,Python自動(dòng)轉(zhuǎn)換: int? long ? float
42、人工轉(zhuǎn)換:利用int(), long(), float()小測(cè)驗(yàn):求整數(shù)的平均值時(shí)用哪個(gè)好?avg = sum / countavg = float(sum) / countavg = float(sum / count)浮點(diǎn)數(shù)取整時(shí)如何做到四舍五入?int(x + 0.5)round(),END,字符串處理,文本數(shù)據(jù)簡(jiǎn)單的字符串處理字符串的機(jī)內(nèi)表示字符串和密碼格式化輸出文件處理,,,,,,,文本數(shù)據(jù),計(jì)算機(jī)應(yīng)
43、用從科學(xué)計(jì)算轉(zhuǎn)向信息管理.信息管理中大量的數(shù)據(jù)都是文本數(shù)據(jù).如姓名,地址,簡(jiǎn)歷等等計(jì)算機(jī)中用字符串來表示文本數(shù)據(jù).,89,字符串類型,字符串:字符序列字符串字面值:用一對(duì)引號(hào)(單或雙)標(biāo)明.“hello world”‘~!@#$%^&*’“漢字也是字符”字符串中包含引號(hào)怎么辦?包含單引號(hào):串用雙引號(hào)括住包含雙引號(hào):串用單引號(hào)括住兩者都有:更一般的方法是串中用轉(zhuǎn)義字符\print “Alice said,
44、\“Hello, ’Bob’\””,字符串處理,文本數(shù)據(jù)簡(jiǎn)單的字符串處理字符串的機(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會(huì)輸出出錯(cuò)信息原因:input()是把輸入當(dāng)成表達(dá)式來計(jì)算的!,92,字符串的正確輸入,輸入時(shí)加上引號(hào)>>>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、訪問每個(gè)字符.[]對(duì)長度為n的字符串,索引可以是大于0的數(shù):自左向右為0 ~ n?1, 或者是負(fù)數(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]越界出錯(cuò),取子串,切段:取一個(gè)索引范圍內(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”一個(gè)字符串的重復(fù)例如:3*“Hi”和“Hi”*3都得到“HiHiHi”
50、串長度函數(shù)len(),編程實(shí)例:獲得每個(gè)月份的縮寫,在一個(gè)數(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+”.”這是簡(jiǎn)單查找:利用位置規(guī)律來定位.若是月份全稱怎么辦?,字符串處理,文本數(shù)據(jù)簡(jiǎn)單的字符串處理字符串的機(jī)內(nèi)表示字符串和密碼格式化輸出文件處理,,,,,,,字符串的機(jī)內(nèi)表示,與數(shù)值一樣,計(jì)算機(jī)內(nèi)用二進(jìn)制數(shù)表示每一個(gè)字符因此操作字符串本質(zhì)上仍然是數(shù)值運(yùn)算.表示字符的這個(gè)數(shù)值稱為字符的編碼.每個(gè)字符用什么編碼?對(duì)這個(gè)問題的不同回答就導(dǎo)致了許多不同的字符編碼系統(tǒng)例如:字符集只包含A~Z,分別用1
52、~26表示.“8 5 12 12 15”是什么意思?,編碼標(biāo)準(zhǔn),不同計(jì)算機(jī)若用不同編碼體系,則彼此無法溝通。標(biāo)準(zhǔn)化ASCII:?jiǎn)巫止?jié)編碼只用到7位: 0 - 12796個(gè)可打印字符,32個(gè)控制字符利用8位可擴(kuò)充ASCII: 0 - 255GB2312:兩字節(jié)(6763個(gè)漢字)GB18030:最多四字節(jié)(70244個(gè)漢字)Unicode:最多四字節(jié).,字符與編碼,求給定字符的編碼: ord()ord(‘a(chǎn)’)可得97
53、求給定編碼的字符:chr()chr(97)可得‘a(chǎn)’可見Python 2.7支持ASCII.支持中文編碼嗎?>>>print “你好”,字符串處理,文本數(shù)據(jù)簡(jiǎn)單的字符串處理字符串的機(jī)內(nèi)表示字符串和密碼格式化輸出文件處理,,,,,,,編碼,編碼:輸出一串字符對(duì)應(yīng)的內(nèi)碼def main(): message=raw_input("Enter the message to encode:
54、") for ch in message: print ord(ch),main()執(zhí)行時(shí)Enter the message to encode:abcdef97,98,99,10,11,12,解碼,輸出一串?dāng)?shù)字對(duì)應(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()運(yùn)行時(shí)Enter the code o
56、f message:97 98 99 100the decoded message is:abcd,幾個(gè)函數(shù),字符串與數(shù)字的相互轉(zhuǎn)換eval(字符串):將字符串轉(zhuǎn)換成數(shù)字。例如:eval(“500”) 返回500str(表達(dá)式) :將數(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中的每個(gè)單詞首字母大寫center(s, wi
58、dth), ljust(s, width), rjust(s, width): 使s變成width寬度且居中/左對(duì)齊/右對(duì)齊count(s, sub): sub在s中出現(xiàn)次數(shù)find(s, sub), rfind(s, sub): 在s中找sub的首次/末次出現(xiàn)join(seq): 將串序列中的串合并成一個(gè)串,分隔符默認(rèn)為空格lower(s), upper(s): 將串變成小寫/大寫lstrip(s), rstrip(s):
59、刪除打頭/收尾的空格replace(s, oldsub, newsub): 在s中用新子串替換舊子串,字符串與密碼,字符串在機(jī)內(nèi)使用一個(gè)數(shù)字序列表示。如果不知道采用什么編碼,只看這個(gè)數(shù)字序列是猜不出表示的是什么字符串。這就是一種加密機(jī)制,稱為替換法。字符編碼都是工業(yè)標(biāo)準(zhǔn),不是為了保密目的,從編碼到密碼,密碼:為了保密而對(duì)信息進(jìn)行編碼.加密是計(jì)算機(jī)的一個(gè)重要應(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ù)簡(jiǎn)單的字符串處理字符串的機(jī)內(nèi)表示字符串和密碼格式化輸出文件處理,,,,,,,格式化輸出,格式化運(yùn)算符%語法 % ()語義:模板串中用%標(biāo)記“空位”,輸出時(shí)用實(shí)際值填入.例如print “The price is $%0.2f” % (100)The price
61、 is $100.00,格式描述,%.三種類型字符:decimal, float, string寬度:用多少位置顯示數(shù)值.省略或指定為0:根據(jù)值的實(shí)際長度顯示.寬度超出值的長度時(shí):右對(duì)齊顯示寬度前加負(fù)號(hào):左對(duì)齊.對(duì)浮點(diǎn)數(shù)用超長寬度會(huì)怎樣?試試…精度:指示浮點(diǎn)數(shù)值的小數(shù)位數(shù).省略:按系統(tǒng)默認(rèn)的小數(shù)位數(shù)顯示.print “%f” % (math.pi),浮點(diǎn)數(shù)如何精確化?,浮點(diǎn)數(shù)的機(jī)內(nèi)表示是近似值.銀行應(yīng)用要求精確表示金
62、額,故不宜用浮點(diǎn)數(shù)及浮點(diǎn)運(yùn)算.解決辦法:以“分”為單位,用整數(shù)表示金額.設(shè)金額是x分,輸出時(shí)利用x/100和x%100分別得到“元”和“角分”.print “You have %d.%02d” % \ (x/100, x%100)02d:不足2位用0填充\:語句換行繼續(xù),字符串處理,文本數(shù)據(jù)簡(jiǎn)單的字符串處理字符串的機(jī)內(nèi)表示字符串和密碼格式化輸出文件處理,,,,,,,文件處理,文件:存儲(chǔ)在磁盤上的數(shù)據(jù)序列
63、.典型的文件結(jié)構(gòu):基本數(shù)據(jù)項(xiàng):可為任何類型若干數(shù)據(jù)項(xiàng)構(gòu)成記錄若干記錄構(gòu)成文件例如:學(xué)生基本數(shù)據(jù)項(xiàng):學(xué)號(hào),姓名,年齡一個(gè)學(xué)生記錄:{學(xué)號(hào),姓名,年齡}文件:全體學(xué)生記錄,118,文本文件,文件中是文本數(shù)據(jù)文本文件可視為存儲(chǔ)在磁盤上的字符串.單行字符串多行字符串行尾(EOL):用特殊字符,如新行(newline)字符.Python用\n表示新行字符,該字符在顯示時(shí)被解釋成新行字符.例:print “first
64、line\nsecond line”,文件處理:打開文件,程序不能直接與外存儲(chǔ)器交互信息,必須通過內(nèi)存進(jìn)行交流打開文件:將磁盤文件與一個(gè)程序變量關(guān)聯(lián),做好讀寫準(zhǔn)備. = open(,): “r”或“w”例如infile = open(“myfile”, “r”)outfile = open(“myfile”, “w”)寫打開時(shí)小心文件名!因?yàn)榭赡芷茐默F(xiàn)有文件,文件處理:讀寫文件,讀文件:讀出文件內(nèi)容.read():將整個(gè)
65、文件作為一個(gè)字符串讀入.readline():讀入一行.readlines():讀入所有行點(diǎn)表示法:文件是對(duì)象!寫文件:將新內(nèi)容寫入文件..write()若想寫多行內(nèi)容,需寫入\n,文件處理:關(guān)閉文件,關(guān)閉文件:取消文件變量與磁盤文件的關(guān)聯(lián)..close()關(guān)閉文件時(shí),系統(tǒng)會(huì)將內(nèi)存中文件內(nèi)容輸出到磁盤.,將整個(gè)文件作為一個(gè)字符串,# 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(),讀入某個(gè)文件的所有行,# 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形化編程圖形對(duì)象的使用未知值的圖形化處理坐標(biāo)系的選擇圖形交互圖形模塊介紹,,,,,,,,數(shù)據(jù)與操作:傳統(tǒng)觀點(diǎn),數(shù)據(jù)類型某種值的集合運(yùn)算(操作)的集合計(jì)算就是對(duì)數(shù)據(jù)進(jìn)行操作數(shù)據(jù)與操作分離數(shù)據(jù)是被動(dòng)的, 操作是主動(dòng)的例如:string類型的值是’abc’等, 對(duì)串的操作有+, *, len()等,數(shù)據(jù)與操作:面向?qū)ο笥^點(diǎn),對(duì)象(Obje
69、ct):集數(shù)據(jù)與操作于一身.對(duì)象知道一些信息對(duì)象能對(duì)那些信息進(jìn)行處理計(jì)算:向?qū)ο蟀l(fā)出請(qǐng)求操作的消息.主動(dòng)的數(shù)據(jù)類型面向?qū)ο?Object-Oriented):軟件系統(tǒng)由各種對(duì)象組成, 對(duì)象之間通過消息進(jìn)行交互.現(xiàn)代軟件系統(tǒng)幾乎都是OO設(shè)計(jì)和實(shí)現(xiàn).,OO基本概念,類(class):描述同類對(duì)象的共性包含的數(shù)據(jù):任何類型的數(shù)據(jù),甚至可以是對(duì)其他對(duì)象的引用.能執(zhí)行的操作(方法)對(duì)象(object):類的實(shí)例(instance
70、)同類的不同對(duì)象可有不同的數(shù)據(jù)值(實(shí)例變量),但能執(zhí)行的操作是一樣的創(chuàng)建對(duì)象:使用類的構(gòu)造器(constructor)初始化對(duì)象(,,…)消息:請(qǐng)求對(duì)象執(zhí)行它的方法.(,,…),對(duì)象的方法,不同類型的對(duì)象當(dāng)然提供不同的操作對(duì)象一般都提供讀取它的實(shí)例變量值的方法,統(tǒng)稱為accessor。例如Point對(duì)象的getX()和getY(),Line對(duì)象的getP1()和getP2()。對(duì)象一般也提供修改其實(shí)例變量的方法,統(tǒng)稱為m
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- python程序設(shè)計(jì)習(xí)題與答案
- 《python程序設(shè)計(jì)》題庫
- 最新《python程序設(shè)計(jì)》題庫
- 《python程序設(shè)計(jì)基礎(chǔ)》習(xí)題答案
- 《python程序設(shè)計(jì)》實(shí)驗(yàn)指導(dǎo)書
- python模擬銀行atm程序設(shè)計(jì)資料
- 《python程序設(shè)計(jì)》教學(xué)進(jìn)度表
- python程序設(shè)計(jì)_教學(xué)大綱_段震
- Python程序設(shè)計(jì)題的查重研究.pdf
- 初識(shí)python程序設(shè)計(jì)的順序結(jié)構(gòu)和循環(huán)結(jié)構(gòu)
- 數(shù)據(jù)導(dǎo)入程序設(shè)計(jì)思想
- 教科版信息技術(shù)--算法與程序設(shè)計(jì)算法與程序設(shè)計(jì)思想
- 程序設(shè)計(jì)方法教學(xué)大綱
- 面向?qū)ο蠓椒俺绦蛟O(shè)計(jì)
- 程序設(shè)計(jì)方法學(xué)programming
- 算法與程序設(shè)計(jì)
- 算法與程序設(shè)計(jì)
- 學(xué)生管理系統(tǒng)的分析與程序設(shè)計(jì)方法
- vb程序設(shè)計(jì)例題-程序改錯(cuò)程序填空程序設(shè)計(jì)
- 《python程序設(shè)計(jì)》課程教學(xué)大綱(移動(dòng)互聯(lián)網(wǎng)-林春杰)
評(píng)論
0/150
提交評(píng)論