4.1程序的分支結構
4.2實例:身體質量指數BIM
4.3程序的循環結構:for;while;
4.4 random()
4.5 實例: 圓周率的計算
4.1
單分支 if 二分支 if-else 多分支 if-elif-else
條件判斷:
<;<=;>=;>;==;!=
條件組合:
x and y 邏輯與
x or y 邏輯或
not x 邏輯取非
EG: if guess >9 or guess <9:
print("錯了")
else:
print("對了")
異常處理:
try:
<語句塊1>
except [,<異常類型>]:
<語句塊2>
else:
<語句塊3> ---else在不發生異常時執行
finally:
<語句塊4> ---finally一定執行
EG: try:
num=eval(input("輸入一個整數")
print(num**2)
except:
print("輸入不是整數")
4.2
身體質量指數 BMI 衡量人體肥胖和健康的重要標準
BMI=體重(kg)/身高^2(m^2)
輸入體重和身高
輸出國際和國內標準
#TextProBarV13.py
height,weight=eval(input(“請輸入身高(米)和體重(公斤)【逗號隔開】:”))
bmi=weight/pow(height,2)
print(“BMI{:.2f}”.format(bmi))
who,nat="",""
if bmi<18.5:
who,nat=“偏瘦”,“偏瘦”
elif 18.5<=bmi<24:
who,nat=“正常”,“正常”
elif 24<=bmi<25:
who,nat=“正常”,“偏胖”
elif 25<=bmi<28:
who,nat=“偏胖”,“偏胖”
elif 28<=bmi<30:
who,nat=“偏胖”,“肥胖”
else:
who,nat=“肥胖”,“肥胖”
print(“BMI指標爲:國際’{0}’,國內’{1}’”.format(who,nat))
4.3
-----------------遍歷循環for---------------------------------------(條件循環)無限循環while
for <循環變量> in <遍歷結構>:
<語句塊>
for i in range(M,N,K):
<語句塊> 從M開始 不到N 間隔K k可省略
1.字符串遍歷循環
for c in s: s----字符串 c ----每個字符
EG: for c in “Python123”:
print(c,end=",")
2.列表遍歷循環
for item in ls:
<語句塊> ls是一個列表,遍歷其每個元素,產生循環
EG: for item in [123,“PY”,456]
print(item,end=",")
3.文件遍歷循環
for line in fi:
<語句塊> fi是一個文件標識符,遍歷其每行,產生循環
EG: for line in
while <條件>:
<語句塊>
EG: s="PYTHON"
while s!="":
for c in s:
print(c,end="")
s=s[:-1] #去掉最後一個字符
循環與else
循環:
else:
<語句塊>
當循環沒有被break語句退出時,執行else語句塊 else作爲“正常”完成循環的獎勵 與異常處理中的else相似
4.4
random庫 隨機數的Python標準庫
random.<b>
基本隨機函數: seed() random()
默認種子爲系統時間 種子相同 隨機數相同
擴展隨機數函數:randint(a,b) ,randrange(m,n[,k])
a-b之間的整數 生成[m,n)之間以k爲間隔的隨機整數
,getrandbits(k) ,uniform(a,b)
k比特長的隨機整數 [a,b]之間的隨機小數
,choice(seq) ,shuffle(seq)
從序列seq中隨機選擇一個元素 將序列seq中隨機排列,返還打亂後的序列
s=[1,2,3,4,5,6];random.shuffle(s);print(s) #一行時要加分號
4.5
1.公式計算
#CalPiv1.py
pi=0
N=100
for k in range(N):
pi+=1/pow(16,k)(
4/(8k+1) - 2/(8k+4) -
1/(8k+5) - 1/(8*k+6))
print(“圓周率值是:{}”.format(pi))
2.蒙特卡羅方法 (撒點過程)
#CalpiV2.py
from random import random
from time import perf_counter
DARTS=10001000
hits=0.0
start=perf_counter()
for i in range(1,DARTS+1):
x,y=random(),random()
dist=pow(x2+y2,0.5)
if dist<=1.0:
hits=hits+1
pi=4(hits/DARTS)
print(“圓周率爲:{}”.format(pi))
print(“運行時間爲:{}”.format(perf_counter()-start))
錯題:
條件循環也叫無限循環
使用while能夠實現循環計數
for循環必須知道循環的次數,而while循環循環的次數可以是不確定的