Python語(yǔ)言程序設(shè)計(jì) 課件 3-編程基礎(chǔ)_第1頁(yè)
Python語(yǔ)言程序設(shè)計(jì) 課件 3-編程基礎(chǔ)_第2頁(yè)
Python語(yǔ)言程序設(shè)計(jì) 課件 3-編程基礎(chǔ)_第3頁(yè)
Python語(yǔ)言程序設(shè)計(jì) 課件 3-編程基礎(chǔ)_第4頁(yè)
Python語(yǔ)言程序設(shè)計(jì) 課件 3-編程基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩30頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

Python語(yǔ)言程序設(shè)計(jì)PythonLanguageProgramming3編程基礎(chǔ)

通過(guò)蒙特卡羅方法計(jì)算圓周率π的值

通過(guò)蒙特卡羅方法計(jì)算圓周率π的值【參考代碼】importnumpyasnp#引入第三方庫(kù)numpyimportmatplotlib.pyplotasplt#引入第三方庫(kù)matplotlibfrommatplotlib.patchesimportCircle#投點(diǎn)次數(shù)n=1000#設(shè)置圓的屬性,半徑為1radius=1.0#設(shè)置半徑a,b=(0.,0.)#圓心位置坐標(biāo)#正方形位置屬性設(shè)置,邊長(zhǎng)為2x_left,x_right=a-radius,a+radiusy_down,y_up=b-radius,b+radius#在正方形區(qū)域內(nèi)隨機(jī)投點(diǎn)x=np.random.uniform(x_left,x_right,n)#從一個(gè)均勻分布[x_left,x_right)中隨機(jī)采樣,生成n個(gè)樣本點(diǎn)的橫坐標(biāo)y=np.random.uniform(y_down,y_up,n)#從一個(gè)均勻分布[y_down,y_up)中隨機(jī)采樣,生成n個(gè)樣本點(diǎn)的縱坐標(biāo)#計(jì)算點(diǎn)到圓心的距離dis=np.sqrt((x-a)**2+(y-b)**2)#平方根運(yùn)算,計(jì)算點(diǎn)(x,y)到圓心的距離,返回距離數(shù)組dis#統(tǒng)計(jì)落在圓內(nèi)的點(diǎn)的數(shù)目points_in=sum(np.where(dis<=radius,1,0))#數(shù)組dis中滿足與圓心距離小于等于1的,返回1,否則返回0,累加至res中#計(jì)算pi的近似值(MonteCarlo方法的精髓:用統(tǒng)計(jì)值去近似真實(shí)值,統(tǒng)計(jì)值越大,越逼近真實(shí)值)pi=4*points_in/nprint('pi的值約為:',pi)#可視化fig=plt.figure()ax=fig.add_subplot(111)#構(gòu)建1*1的網(wǎng)格圖,其中有一個(gè)子圖ax.plot(x,y,'ro',color='red',markersize=1)plt.axis('equal')#保持作圖時(shí)正方形的邊長(zhǎng)相等,否則會(huì)變形circle=Circle(xy=(a,b),radius=radius,alpha=0.8)ax.add_patch(circle)plt.show()通過(guò)蒙特卡羅方法計(jì)算圓周率π的值散落點(diǎn)的數(shù)量n的值不同,統(tǒng)計(jì)計(jì)算所得的值也不同:n的取值統(tǒng)計(jì)計(jì)算得出的值約為10003.0921000031379610000003.143612100000003.1413232表3-1不同散落點(diǎn)的數(shù)量,統(tǒng)計(jì)得出不同的值變量和常量變量數(shù)據(jù)常量變量即用即命名,不需要事先指定變量的類型,也可以賦值不同類型的數(shù)據(jù),不會(huì)發(fā)生溢出。圖3-1變量和命名空間變量的命名規(guī)則標(biāo)識(shí)符對(duì)大小寫敏感,不能與保留字相同;變量名必須以下劃線或字母開(kāi)頭,而后面接任意數(shù)目的字母、數(shù)字或下劃線。不能使用空格。以下是合法命名的標(biāo)識(shí)符:its_name_,_its_name_is_xx_;名稱中的字母區(qū)分大小寫,如its_name和Its_name是不同的;變量的名稱要有意義,要能夠代表變量的含義,比如表示半徑的變量名稱可以這樣起:radiusNum或radius_num;禁止使用Python保留字。Python的保留字見(jiàn)表3-2變量的命名規(guī)則andelifimportraiseaselseinreturnassertexceptistrybreakfinallylambdawhileclassfornotwithcontinuefromordefglobalpassdelifprint表3-2Python保留字?jǐn)?shù)據(jù)數(shù)據(jù)是指所有能輸入到計(jì)算機(jī)并被計(jì)算機(jī)程序處理的符號(hào)的介質(zhì)的總稱是用于輸入電子計(jì)算機(jī)進(jìn)行處理,具有一定意義的數(shù)字、字母、符號(hào)和模擬量等的通稱數(shù)據(jù)是信息的表現(xiàn)形式和載體,可以是符號(hào)、文字、數(shù)字、語(yǔ)音、圖像、視頻等信息量化到數(shù)字化,一般稱為“嵌入”(embedding)常量通常把程序中不發(fā)生變化的元素叫做常量,與變量進(jìn)行區(qū)別python沒(méi)有定義常量的保留字python中定義常量需要用自定義類的方法來(lái)創(chuàng)建運(yùn)算和表達(dá)式常用的運(yùn)算表達(dá)式常用的運(yùn)算算術(shù)運(yùn)算算術(shù)運(yùn)算包括數(shù)學(xué)中常見(jiàn)的運(yùn)算,如加、減、乘、除、乘方和開(kāi)方等所有的運(yùn)算都需要預(yù)先對(duì)變量進(jìn)行賦值,否則報(bào)錯(cuò)支持不同的數(shù)字類型相加(數(shù)字類型強(qiáng)制轉(zhuǎn)換),整數(shù)→浮點(diǎn)數(shù),非復(fù)數(shù)→復(fù)數(shù)。規(guī)則:簡(jiǎn)單→復(fù)雜常用的運(yùn)算下表展示Python的算數(shù)運(yùn)算符,變量預(yù)先賦值x=10,y=3算數(shù)運(yùn)算符運(yùn)算描述實(shí)例+加法x+y結(jié)果為13-減法x-y結(jié)果為13*乘法x*y結(jié)果為30/除法x/y結(jié)果為3.3333…..**冪運(yùn)算x**y的結(jié)果是1000//返回商的整數(shù)部分x//y的結(jié)果是3%返回余數(shù)部分x%y的結(jié)果為1(余數(shù))=賦值運(yùn)算x=10,將10賦值給變量x+=加法賦值運(yùn)算x+=10的運(yùn)算結(jié)果是x=20,等效于x=x+10-=減法賦值運(yùn)算x-=10的運(yùn)算結(jié)果是x=0,等效于x=x-10*=乘法賦值運(yùn)算x*=10的運(yùn)算結(jié)果是100,等效于x=x*10/=除法賦值運(yùn)算x/=10的運(yùn)算結(jié)果是1.0,等效于x=x/10表3-3Python中的算數(shù)運(yùn)算常用的運(yùn)算關(guān)系運(yùn)算傳統(tǒng)的關(guān)系運(yùn)算包括集合運(yùn)算(并、差、交等),專門的關(guān)系運(yùn)算包括選擇、投影、連接、除法、外連接等關(guān)系表達(dá)式的值只有真True和假False常用的運(yùn)算下表展示Python的關(guān)系運(yùn)算符,變量預(yù)先賦值x=10,y=20運(yùn)算符描述示例==如果兩個(gè)操作數(shù)的值相等,則條件為真。(x==y)求值結(jié)果為false!=如果兩個(gè)操作數(shù)的值不相等,則條件為真。(x!=y)求值結(jié)果為true>如果左操作數(shù)的值大于右操作數(shù)的值,則條件成為真。(x>y)求值結(jié)果為false<如果左操作數(shù)的值小于右操作數(shù)的值,則條件成為真。(x<y)求值結(jié)果為true>=如果左操作數(shù)的值大于或等于右操作數(shù)的值,則條件成為真。(x>=y)求值結(jié)果為false<=如果左操作數(shù)的值小于或等于右操作數(shù)的值,則條件成為真。(x<=y)求值結(jié)果為true表3-4Python中的關(guān)系運(yùn)算常用的運(yùn)算邏輯運(yùn)算邏輯運(yùn)算又稱布爾運(yùn)算,用等式表示判斷,把推理看作等式的變換邏輯運(yùn)算中包括與運(yùn)算、或運(yùn)算和非運(yùn)算三種基本的邏輯運(yùn)算邏輯運(yùn)算的結(jié)果也只有真True和假False常用的運(yùn)算下表展示Python的邏輯運(yùn)算符,變量預(yù)先賦值x=10,y=20運(yùn)算符描述示例and如果兩個(gè)操作數(shù)都為真,則結(jié)果為真(xandy)的結(jié)果為Falseor如果兩個(gè)操作數(shù)中的任何一個(gè)為真,則結(jié)果為真(xory)的結(jié)果為Truenot用于反轉(zhuǎn)操作數(shù)的邏輯狀態(tài)not(xandy)的結(jié)果為True表3-5Python中的邏輯運(yùn)算常用的運(yùn)算【例3-2】輸入學(xué)生的姓名,再輸入成績(jī),根據(jù)給出的條件判斷成績(jī)的等級(jí),最后打印輸出:某某的成績(jī)是什么等級(jí)。判斷標(biāo)準(zhǔn):小于60分,F(xiàn)ail;60到70分,Pass;70到80分,Good;80到90分,Average;90到100分,Outstanding。常用的運(yùn)算【參考代碼】name=input("Whatisyourname?")score=int(input("Whatisyourscore?"))ifscore<60:print("Hello,%s,yourgradesis'Fail'"%name)elifscore>=60andscore<70:print("Hello,%s,yourgradesis'Pass'"%name)elifscore>=70andscore<80:print("Hello,%s,yourgradesis'Average'"%name)elifscore>=80andscore<90:print("Hello,%s,yourgradesis'Good'"%name)elifscore>=90andscore<=100:print("Hello,%s,yourgradesis'Outstanding'"%name)else:print("Yourinputisincorrect.")常用的運(yùn)算成員運(yùn)算一般用來(lái)判斷某一元素是否在一個(gè)指定的序列對(duì)象中,其返回值為布爾值運(yùn)算符描述示例in若某一元素在一個(gè)指定的序列中,則返回True,否則返回False>>>x=10>>>L=[1,2,3.4]>>>xinLFalsenotin若某一元素不在一個(gè)指定的序列中,則返回True,否則返回False>>>x='10'>>>s='abcdefg'>>>xnotinsTrue表3-6Python中的成員運(yùn)算常用的運(yùn)算【例3-3】有一個(gè)列表L=[1,2,3,4,5,6,7,1,2,3,4,5,6,7],要求去掉其中重復(fù)的元素?!緟⒖即a】>>>L=[1,2,3,4,5,6,7,1,2,3,4,5,6,7]>>>L1=[]>>>forxinL: ifxnotinL1: L1.append(x)>>>L1【輸出結(jié)果】[1,2,3,4,5,6,7]常用的運(yùn)算身份運(yùn)算用來(lái)判斷兩個(gè)變量是否指向同一對(duì)象,或者某一對(duì)象是否在一個(gè)序列中常用的運(yùn)算下表展示Python的身份運(yùn)算符運(yùn)算符描述示例is判斷兩個(gè)變量是否指向同一個(gè)對(duì)象,返回值為True和False>>>a=1>>>b=1>>>aisbTrue>>>b=2>>>aisbFalse>>>b=a>>>aisbTrue>>>id(a)502515440>>>id(b)502515440isnot判斷兩個(gè)變量是否沒(méi)有指向同一個(gè)變量,返回值為True和False>>>a=1>>>b=2>>>aisnotbTrue表3-7Python中的身份運(yùn)算表達(dá)式表達(dá)式是運(yùn)算符和操作數(shù)所構(gòu)成的序列用算數(shù)運(yùn)算符連接起來(lái)的表達(dá)式叫做算數(shù)表達(dá)式,如a+b用關(guān)系運(yùn)算符連接起來(lái)的表達(dá)式叫做關(guān)系表達(dá)式,如a<b用邏輯運(yùn)算符連接起來(lái)的表達(dá)式叫做邏輯表達(dá)式,如aandb運(yùn)算順序:算數(shù)運(yùn)算表達(dá)式>關(guān)系運(yùn)算表達(dá)式>邏輯運(yùn)算表達(dá)式Python相關(guān)基礎(chǔ)語(yǔ)法空格注釋空格一般是四個(gè)空格或者一個(gè)Tab鍵的距離,且不要混用if、elif、else、while等引導(dǎo)的語(yǔ)句都有縮進(jìn),Pyhon的縮進(jìn)用來(lái)表示分段,類同C語(yǔ)言的{}從可讀性的角度考慮,一般關(guān)鍵詞、逗號(hào)的后面會(huì)加一個(gè)空格,如>>>print('score',90*0.3+81*0.7)score83.69999999999999>>>print('score',

90*0.3+81*0.7)

#這樣看起來(lái)更好一些score83.69999999999999注:以上的空格無(wú)語(yǔ)法含義注釋提高程序的可閱讀性和可理解性源程序的有效注釋在20%以上,不宜太多,也不宜過(guò)少。通常,函數(shù)頭部、源文件頭部、標(biāo)志性變量等均需要標(biāo)注明確的注釋,以便于代碼的閱讀單行注釋#多行注釋

三引號(hào)常用的運(yùn)算【例3-4】利用泰勒級(jí)數(shù)計(jì)算e的近似值。whileabs(term)>1e-5:term=term/ne=e+termn=n+1count+=1endtime=time.perf_counter()print("e=%f,運(yùn)行次數(shù):%d次"%(e,count))print("運(yùn)行耗時(shí)"+str(endtime-starttime)+"s")【參考代碼】'''利用泰勒級(jí)數(shù)計(jì)算e的近似值,當(dāng)最后一項(xiàng)的絕對(duì)值小于時(shí)認(rèn)為達(dá)到了精度要求,要求統(tǒng)計(jì)總共累加了多少項(xiàng)并輸出程序的總運(yùn)行時(shí)間。'''importtimestarttime=time.perf_counter()n=1count=1term=1.0e=0random庫(kù)Python中用來(lái)產(chǎn)生隨機(jī)數(shù)的標(biāo)準(zhǔn)庫(kù),使用的時(shí)候需要引用importrandom或fromrandomimport*。類別函數(shù)功能說(shuō)明基本隨機(jī)函數(shù)

seed(a=None)改變隨機(jī)數(shù)生成器的種子,在調(diào)用其他隨機(jī)模塊之前調(diào)用該函數(shù),可固定生成同一個(gè)隨機(jī)數(shù)。random()隨機(jī)生成一個(gè)[0.0,1.0]區(qū)間的小數(shù)擴(kuò)展隨機(jī)函數(shù)

randint(a,b)隨機(jī)生成一個(gè)[a,b]區(qū)間的整數(shù)getrandbits(k)隨機(jī)生成一個(gè)k比特(bit)長(zhǎng)度的整數(shù)randrange(start,stop[,step])隨機(jī)生成一個(gè)[start,stop)區(qū)間,步長(zhǎng)為step的整數(shù)uniform(a,b)隨機(jī)生成一個(gè)[a,b]區(qū)間的小數(shù)choice(seq)隨機(jī)返回序列類型中的一個(gè)元素shuffle(seq)隨機(jī)排列序列中的元素,并返回打亂順序后的原序列,即不會(huì)生成新的序列表3-8random庫(kù)常用函數(shù)random庫(kù)【例3-5】random庫(kù)中常見(jiàn)函數(shù)的使用。>>>randrange(1,20,3)#隨機(jī)生成一個(gè)1-20之間,步長(zhǎng)為3的整數(shù)7>>>uniform(2,3)#隨機(jī)生成一個(gè)2-3之間的小數(shù)2.076089346781348>>>choice([1,2,3,4,5,6,7,8,9])#隨機(jī)選中列表序列中的一個(gè)元素并返回6>>>shuffle([1,2,3,4,5,6,7,8,9])#隨機(jī)將列表中的元素亂序>>>x=shuffle([1,2,3,4,5,6,7,8,9])>>>x>>>print(shuffle([1,2,3,4,5,6,7,8,9]))#由于亂序而不會(huì)生成新的列表,因此沒(méi)有任何返回值None>>>y=[1,2,3,4,5,6,7,8,9]#隨機(jī)亂序原有的列表序列>>>shuffle(y)>>>y[1,7,9,6,2,3,8,5,4]

【參考代碼】>>>fromrandomimport*#引用random庫(kù)>>>random()#生成0-1的隨機(jī)小數(shù)0.005971912566784976>>>seed(10)#設(shè)置隨機(jī)生成器的種子為10,然后再生成隨機(jī)數(shù)>>>random()0.5714025946899135>>>seed(10)#再次設(shè)置隨機(jī)生成器的種子為10,生成和上次一樣的隨機(jī)數(shù)>>>random()0.5714025946899135>>>random()#沒(méi)有設(shè)置隨機(jī)生成器的種子,則生成不同的隨機(jī)數(shù)0.4288890546751146>>>forxinrange(10):#隨機(jī)生成1-100之間的10個(gè)整數(shù) print(randint(1,100),end='')742276063368421567>>>getrandbits(3)#隨機(jī)生成一個(gè)3bit的整數(shù)3random庫(kù)【例3-6】隨機(jī)游走(randomwalk)也稱隨機(jī)漫步,隨機(jī)行走等是指基于過(guò)去的表現(xiàn),無(wú)法預(yù)測(cè)將來(lái)的發(fā)展步驟和方向。核心概念是指任何無(wú)規(guī)則行走者所帶的守恒量都各自對(duì)應(yīng)著一個(gè)擴(kuò)散運(yùn)輸定律,接近于布朗運(yùn)動(dòng),是布朗運(yùn)動(dòng)理想的數(shù)學(xué)狀態(tài),現(xiàn)階段主要應(yīng)用于互聯(lián)網(wǎng)鏈接分析及金融股票市場(chǎng)中[引自“百度百科”中“隨機(jī)漫步”詞條。]。隨機(jī)游走對(duì)于股市而言指股價(jià)的短期變動(dòng)不可預(yù)測(cè),各種投資咨詢服務(wù)、收益預(yù)測(cè)和復(fù)雜的圖形都毫無(wú)用處?,F(xiàn)在,隨機(jī)游走理論已發(fā)展成三種形式:強(qiáng)式、半強(qiáng)式、弱式。要求:模擬一維的1000步的隨機(jī)游走,從0開(kāi)始,步長(zhǎng)為1和-1,且以相等的概率出現(xiàn)。random庫(kù)【參考代碼】importrandomimportmatplotlib.pyplotaspltposition

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論