程序的流程圖

a程序的基本結(jié)構(gòu)
程序由三種基本結(jié)構(gòu)組成:
順序結(jié)構(gòu)
分支結(jié)構(gòu)
循環(huán)結(jié)構(gòu)
這些基本結(jié)構(gòu)都有一個(gè)入口和一個(gè)出口。任何程序都由這三種基本結(jié)構(gòu)組合而成。
1.,順序結(jié)構(gòu)是程序按照線性順序依次執(zhí)行的一種運(yùn)行方式。其中“語(yǔ)句塊1”和“語(yǔ)句塊2”表示一個(gè)或一組順序執(zhí)行的語(yǔ)句。

2.分支結(jié)構(gòu)是程序根據(jù)條件判斷結(jié)果而選擇不同向前執(zhí)行路徑的一種運(yùn)行方式。包括:
? ??????單分支結(jié)構(gòu)
????????二分支結(jié)構(gòu)
? ??????多分支結(jié)構(gòu)

3.循環(huán)結(jié)構(gòu)是程序根據(jù)條件判斷結(jié)果向后反復(fù)執(zhí)行的一種運(yùn)行方式。根據(jù)循環(huán)體觸發(fā)條件不同,包括:
條件循環(huán)結(jié)構(gòu)
遍歷循環(huán)結(jié)構(gòu)

程序的基本結(jié)構(gòu)實(shí)例
IPO描述
IPO描述主要用于區(qū)分程序的輸入輸出關(guān)系,重點(diǎn)在于結(jié)構(gòu)劃分,算法主要采用自然語(yǔ)言描述。
輸入:圓半徑R
處理:
????????圓面積:S = π*R*R
????????圓周長(zhǎng):L = 2*π*R
輸出:
????????圓面積S、
????????周長(zhǎng)L
流程圖描述
流程圖描述側(cè)重于描述算法的具體流程關(guān)系,流程圖的結(jié)構(gòu)化關(guān)系相比自然語(yǔ)言描述更進(jìn)一步,有助于闡述算法的具體操作過(guò)程。

Python代碼方式描述
Python代碼描述是最終的程序產(chǎn)出,最為細(xì)致。

b、程序的分支結(jié)構(gòu)
Python中,if 語(yǔ)句的語(yǔ)法格式如下:

語(yǔ)句塊是 if 條件滿足后執(zhí)行的一個(gè)或多個(gè)語(yǔ)句序列
語(yǔ)句塊中語(yǔ)句通過(guò)與 if 所在行形成縮進(jìn)表達(dá)包含關(guān)系
if語(yǔ)句首先評(píng)估<條件>的結(jié)果值:
如果結(jié)果為True,則執(zhí)行語(yǔ)句塊里的語(yǔ)句序列,然后控制轉(zhuǎn)向程序的下一條語(yǔ)句。
如果結(jié)果為False,語(yǔ)句塊里的語(yǔ)句會(huì)被跳過(guò)。
然后Python依次評(píng)估尋找第一個(gè)結(jié)果為T(mén)rue的條件,執(zhí)行該條件下的語(yǔ)句塊,同時(shí)結(jié)束后跳過(guò)整個(gè)if-elif-else結(jié)構(gòu),執(zhí)行后面的語(yǔ)句。
如果沒(méi)有任何條件成立,else下面的語(yǔ)句塊被執(zhí)行。else子句是可選的。
If 語(yǔ)句中<條件>部分可以使用任何能夠產(chǎn)生True或False的語(yǔ)句--布爾表達(dá)式,為bool類型
對(duì)于數(shù)字(整型和浮點(diǎn)型):零值被認(rèn)為是false;任何非零值都是true
對(duì)于序列類型:一個(gè)空序列被解釋為false;而任何非空序列被解釋為true
布爾運(yùn)算符and(和)和or(或者)用于組合兩個(gè)布爾表達(dá)式,并產(chǎn)生一個(gè)布爾結(jié)果
not運(yùn)算符是一個(gè)一元運(yùn)算符,用來(lái)計(jì)算一個(gè)布爾表達(dá)式的反
優(yōu)先級(jí):從高分到低分依次是not、and最低是or
單分支結(jié)構(gòu)

多分支結(jié)構(gòu)

實(shí)例:身體質(zhì)量指數(shù)BMI
BMI的定義如下:
BMI = 體重(kg)÷身高2(m2)
例如:一個(gè)人身高1.75米、體重75公斤,他的BMI值為24.49。

例一

例二

c、程序的循環(huán)結(jié)構(gòu)
break:終止此循環(huán)結(jié)構(gòu)
continue:終止本次循環(huán)
1.遍歷循環(huán):for語(yǔ)句
根據(jù)循環(huán)執(zhí)行次數(shù)的確定性,循環(huán)可以分為確定次數(shù)循環(huán)和非確定次數(shù)循環(huán)。
確定次數(shù)循環(huán)(遍歷循環(huán))指循環(huán)體對(duì)循環(huán)次數(shù)有明確的定義,循環(huán)次數(shù)采用遍歷結(jié)構(gòu)中元素個(gè)數(shù)來(lái)體現(xiàn)。
Python通過(guò)保留字for實(shí)現(xiàn)“遍歷循環(huán)”:
for?<循環(huán)變量>?in? <遍歷結(jié)構(gòu)>:
???<語(yǔ)句塊>?
遍歷結(jié)構(gòu)可以是字符串、文件、組合數(shù)據(jù)類型或range()函數(shù):
遍歷循環(huán)還有一種擴(kuò)展模式,使用方法如下:
for <循環(huán)變量>
in <遍歷結(jié)構(gòu)>:
???<語(yǔ)句塊1>
else:
???<語(yǔ)句塊2>
當(dāng)for循環(huán)正常執(zhí)行之后,程序會(huì)繼續(xù)執(zhí)行else語(yǔ)句中內(nèi)容。else語(yǔ)句只在循環(huán)正常執(zhí)行之后才執(zhí)行并結(jié)束。
因此可以在<語(yǔ)句塊2>中放置判斷循環(huán)執(zhí)行情況的語(yǔ)句。

不執(zhí)行else,繼續(xù)循環(huán)
缺點(diǎn):
程序開(kāi)始時(shí)必須提供輸入數(shù)字總數(shù)
大規(guī)模數(shù)字求平均值需要用戶先數(shù)清楚個(gè)數(shù)
for循環(huán)是需要提供固定循環(huán)次數(shù)的循環(huán)方式
Python提供了另一種循環(huán)模式:無(wú)限循環(huán),不需要提前知道循環(huán)次數(shù),也叫條件循環(huán)
2.無(wú)限循環(huán):while語(yǔ)句
continue:跳出本次循環(huán)
無(wú)限循環(huán)(條件循環(huán))一直保持循環(huán)操作直到特定循環(huán)條件不滿足才結(jié)束,不需要提前知道確定循環(huán)次數(shù)。
Python通過(guò)保留字while實(shí)現(xiàn)無(wú)限循環(huán)。
Python通過(guò)保留字while實(shí)現(xiàn)無(wú)限循環(huán),使用方法如下:
while?<條件>:
<語(yǔ)句塊>
條件和if語(yǔ)句的判斷條件一樣,是布爾表達(dá)式。
語(yǔ)句塊是一條或多條語(yǔ)句。
條件總是在循環(huán)頂部被判斷,即在循環(huán)體(語(yǔ)句塊)執(zhí)行之前,這種結(jié)構(gòu)又被稱為前測(cè)循環(huán)。
無(wú)限循環(huán)也有一種使用保留字else的擴(kuò)展模式:
while?<條件>:
???<語(yǔ)句塊1>
else:
???<語(yǔ)句塊2>
如果循環(huán)體忘記累加計(jì)數(shù)器idx,條件判斷一直為真,循環(huán)體將一直執(zhí)行,這就是所謂的死循環(huán)程序
這時(shí)通常使用<Ctrl>+c來(lái)終止一個(gè)程序

3.?continue和break
continue:跳出本次循環(huán)
break:終止此循環(huán)結(jié)構(gòu)

4. 交互循環(huán)
交互式循環(huán)是無(wú)限循環(huán)的一種
允許用戶通過(guò)交互的方式重復(fù)程序的特定部分
以交互循環(huán)的視角重新審視求平均數(shù)程序,偽碼如下:
初始化sum為0
初始化count為0
初始化moredata為"yes"
當(dāng)moredata值為"yes"時(shí)
輸入數(shù)字x
將x加入sum
count值加1
詢問(wèn)用戶是否還有moredata需要處理
輸出
5. 哨兵循環(huán)
執(zhí)行循環(huán)直到遇到特定的值,循環(huán)語(yǔ)句才終止執(zhí)行的循環(huán)結(jié)構(gòu)設(shè)計(jì)方法
哨兵循環(huán)是求平均數(shù)的更好方案,思路如下:
設(shè)定一個(gè)哨兵值作為循環(huán)終止的標(biāo)志
任何值都可以做哨兵,但要與實(shí)際數(shù)據(jù)有所區(qū)別
偽碼如下:
接收第一個(gè)數(shù)據(jù)
while這個(gè)數(shù)據(jù)不是哨兵
程序執(zhí)行相關(guān)語(yǔ)句
接收下一個(gè)數(shù)據(jù)項(xiàng)
在求考試分?jǐn)?shù)平均數(shù)的程序中,可以設(shè)定負(fù)數(shù)為哨兵
6.文件循環(huán)
之前求平均數(shù)的數(shù)字都是用戶輸入的,如果幾百個(gè)數(shù)求平均,輸入困難且容易出錯(cuò)
面向文件的方法是數(shù)據(jù)處理的典型應(yīng)用
可以事先將數(shù)據(jù)錄入到文件中,然后將這個(gè)文件作為程序的輸入,避免人工輸入的麻煩,便于編輯修改
d、random庫(kù)的使用
random庫(kù)概述
隨機(jī)數(shù)在計(jì)算機(jī)應(yīng)用中十分常見(jiàn),Python內(nèi)置random庫(kù)主要用于產(chǎn)生各種分布的偽隨機(jī)數(shù)序列。random庫(kù)采用梅森旋轉(zhuǎn)算法(Mersenne twister)生成偽隨機(jī)數(shù)序列,可用于除隨機(jī)性要求更高的加解密算法外的大多數(shù)工程應(yīng)用
使用random庫(kù)主要目的是生成隨機(jī)數(shù),因此,讀者只需要查閱該庫(kù)的隨機(jī)數(shù)生成函數(shù),找到符合使用場(chǎng)景的函數(shù)使用即可。
這個(gè)庫(kù)提供了不同類型的隨機(jī)數(shù)函數(shù),所有函數(shù)都是基于最基本的random.random()函數(shù)擴(kuò)展而來(lái)。

對(duì)random庫(kù)的引用方法與math庫(kù)一樣,采用下面兩種方式實(shí)現(xiàn):
from random import *
或import random


e、π的計(jì)算
應(yīng)用蒙特卡羅方法求解π的基本步驟如下:
1.隨機(jī)向單位正方形和圓結(jié)構(gòu),拋灑大量“飛鏢”點(diǎn)
2.計(jì)算每個(gè)點(diǎn)到圓心的距離從而判斷該點(diǎn)在圓內(nèi)或者圓外
3.用圓內(nèi)的點(diǎn)數(shù)除以總點(diǎn)數(shù)就是π/4值。
隨機(jī)點(diǎn)數(shù)量越大,越充分覆蓋整個(gè)圖形,計(jì)算得到的π值越精確。實(shí)際上,這個(gè)方法的思想是利用離散點(diǎn)值表示圖形的面積,通過(guò)面積比例來(lái)求解π值。

π計(jì)算問(wèn)題的IPO表示如下:
1.輸入:拋點(diǎn)的數(shù)量
2.處理:對(duì)于每個(gè)拋灑點(diǎn),計(jì)算點(diǎn)到圓心的距離,通過(guò)距離判斷該點(diǎn)在圓內(nèi)或是圓外。統(tǒng)計(jì)在圓內(nèi)點(diǎn)的數(shù)量
3.輸出:π值。
Python代碼

