前言
本篇主要介紹程式結構控制,以BMI的計算為例,介紹回圈結構的控制和使用,以圓周率的計算為例,介紹random庫的使用,
(從本篇開始,出現的一些庫中函式介紹以及部分簡單代碼都將以圖片形式呈現)
讀完本篇,你將了解:
1.方法論
Python程式的控制語法及結構
2.實踐能力
學會撰寫帶有條件判斷及回圈的程式
本篇將系統介紹:
1.程式的分支結構(單、二、多分支結構,條件判斷及例外處理)
2.實體:身體質量指數BMI
3.程式的回圈結構(遍歷回圈、無限回圈;回圈控制保留字及回圈高級用法)
4.模塊3: random庫的使用(基本隨機函式及擴展隨機函式)
5.實體:圓周率的計算
一、程式的分支結構
1.單分支結構
根據判斷條件結果而選擇不同向前路徑的運行方式
(1)結構:(如果,則)
if<條件>∶
<陳述句塊>
(2)簡單實體
guess = eval(input())
if guess == 99:
print("猜對了")
也可直接使用真偽
if True:
print("條件正確")
2.二分支結構
根據判斷條件結果而選擇不同向前路徑的運行方式
(1)結構:
if<條件>∶
<陳述句塊1>
else:
<陳述句塊2>
(2)簡單實體
guess = eval(input())
if guess == 99:
print("猜對了")
else:
print("猜錯了")
if True:
print("陳述句塊1")
else:
print("陳述句塊2")
(3)緊湊形式:適用于簡單運算式的二分支結構
①結構:<運算式1> if <條件> else<運算式2>
當條件成立了回傳運算式1的資訊
②見代碼
guess = eval(input())
print("猜{}了".format("對" if guess == 99 else"錯"))
③好處:簡單的一行代碼表達二分支結構
④注意:緊湊形式中,if else所對應的輸出不是陳述句(帶賦值形式的,有等號構成),而是運算式
3.多分支結構
根據多個條件來選擇不同陳述句塊運行的一種分支結構
(1)結構:
if <條件>︰
<陳述句塊1>
elif :
<陳述句塊2>
…
else :
<陳述句塊2>
(2)簡單實體:對不同分數分級的問題
score = eval(input())
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
elif score >= 60:
grade = "D"
print("輸入成績屬于級別{}".format(grade))
(3)注意:
①注意多條件之間的包含關系
②注意變數取值范圍的覆寫
4.條件判斷及組合
(1)條件判斷
相關運算子

(2)條件組合
用于條件組合的三個保留字

(3)實體
guess = eval(input())
if guess > 99 or guess < 99:
print("猜錯了")
else:
print("猜對了")
if not True:
print("陳述句塊2")
else:
print("陳述句塊1")
5.程式的例外處理
(1)例外處理的基本使用
try :
<陳述句塊1>
except :
<陳述句塊2>
執行陳述句1,出現例外執行陳述句2
(2)進一步區分不同的例外型別
try :
<陳述句塊1>
except<例外型別> :
<陳述句塊2>
增加標記,僅在此種例外型別發生時才執行陳述句塊2
(3)簡單實體
try:
num = eval(input("請輸入一個整數: "))
print(num ** 2)
except:
print("輸入不是整數")
也可改為except NameError
(4)注意:標注例外型別后,僅回應該例外,例外型別名字等同于變數
(5)例外處理的高級使用
try :
<陳述句塊1>
except :
<陳述句塊2>
else :
<陳述句塊3>
finally:
<陳述句塊4>
注意:無論前面是否發生例外,finally對應陳述句塊4—定執行
else對應陳述句塊3在不發生例外時執行
二、實體5:身體質量指數BMI
1.問題分析
BMI∶對身體質量的刻畫
(1)BMI : Body Mass Index
國際上常用的衡量人體肥胖和健康程度的重要標準,主要用于統計分析
(2)定義:BMI=體重(kg)/身高2(m2 )
(3)問題需求
輸入∶給定體重和身高值
輸出:BMI指標分類資訊(國際和國內)
2.實體講解
(1)思路方法
難點在于同時輸出國際和國內對應的分類
①思路1:分別計算并給出國際和國內BMI分類
②思路2∶混合計算并給出國際和國內BMI分類
(2)代碼實作
①思路1
# CalBMIv1
height, weight = eval(input("請輸入身高(米)和體重(公斤)[逗號隔開]:"))
bmi = weight / pow(height, 2)
print("BMI數值為:{:.2f}".format(bmi))
who = ""
if bmi < 18.5:
who = "偏瘦"
elif 18.5 <= bmi < 25:
who = "正常"
elif 25 <= bmi < 30:
who = "偏胖"
else:
who = "肥胖"
print("BMI指標為:國際‘{0}’".format(who))
簡單修改后即可輸出國內BMI
②思路2
# CalBMIv2
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 < 25:
who, nat = "正常", "正常"
elif 24 <= bmi < 25:
who, nat = "正常", "偏胖"
elif 25 <= bmi < 28:
who, nat = "偏胖", "偏胖"
elif 28 <= bmi < 30:
who, nat = "偏胖", "肥胖"
print("BMI指標為:國際‘{0}’, 國內'{1]".format(who, nat))
3.舉一反三
(1)關注多分支條件的組合
①多分支條件之間的覆寫是重要問題
②程式可運行,但不正確,要注意多分支
③分支結構是程式的重要框架,讀程式先看分支
三、程式的回圈結構
1.遍歷回圈
遍歷某個結構形成的回圈運行方式
(1)結構:從遍歷結構中逐一提取元素,放在回圈變數中
for <回圈變數> in<遍歷結構>∶
<陳述句塊>
①由保留字for和in組成,完整遍歷所有元素后結束
②每次回圈,所獲得元素放入回圈變數,并執行一次陳述句塊
(2)常用搭配使用方式(具體應用)
①計數回圈(N次)
for i in range(N):
<陳述句塊>
遍歷由range()函式產生的數字序列,產生回圈
②計數回圈(特定次):實作特定次的計數回圈
for i in range(N,M,K):
<陳述句塊>
1)M開始(不到N)到N之前的整數,以K為步長
2)舉例:

③字串遍歷回圈
for c in s:
<陳述句塊>
1)s是字串,遍歷字串每個字符放到c中,產生回圈
2)舉例:

④串列遍歷回圈
for item in ls:
<陳述句塊>
1)ls是一個串列,遍歷其每個元素放到item中,產生回圈
2)舉例:

⑤檔案遍歷回圈
for line in fi:
<陳述句塊>
1)fi是一個檔案識別符號,遍歷其每行,產生回圈
2)舉例:

2.無限回圈
由條件控制的回圈運行方式
(1)結構:
while<條件>∶
<陳述句塊>
反復執行陳述句塊,直到條件不滿足時結束
(2)無限回圈的條件

這段程式將永遠執行下去
3.回圈控制保留字
(1)break和continue
①break跳出并結束當前整個回圈,執行回圈后的陳述句
②continue只結束當次回圈,繼續執行后續次數回圈
③break和continue可以與for和while回圈搭配使用
(2)雙層回圈舉例:

s不為空則列印s,每次for之后進行切片操作,在其中插入break
(即只要遇到T就停止遍歷)
說明:一個break僅跳出當前最內層回圈
4.回圈的高級用法
(1)回圈與else
①結構1:
for <回圈變數> in<遍歷結構>∶
<陳述句塊1>
else :
<陳述句塊2>
②結構2:
while <條件>:
<陳述句塊1>
else :
<陳述句塊2>
(2)作用:
①當回圈沒有被break陳述句退出時,執行else陳述句塊
②else陳述句塊作為"正常"完成回圈的獎勵
③這里else的用法與例外處理中else用法相似
(3)舉例:

四、模塊3: random庫的使用
1.random庫概述
random庫是使用亂數的Python標準庫
(1)偽亂數:采用梅森旋轉演算法生成的(偽)隨機序列中元素
(2)random庫主要用于生成亂數
(3)使用random庫:import random
(4)random庫包括兩類函式,常用共8個
①基本亂數函式: seed(), random()
②擴展亂數函式: randint(), getrandbits(), uniform(),randrange(), choice(), shuffle()
2.基本亂數函式
(1)亂數種子
隨機序列根據種子唯一確定,亂數種子確定了隨機序列的產生
(2)兩個基本函式

①若不呼叫seed函式,將使用當前作業系統的默認系統時間作為種子
②random函式中隨機小數的產生與種子有關
(3)舉例:

種子只需要給一次,會產生后續的亂數,不給種子,默認種子為當前呼叫第一次random函式的系統時間
(4)使用種子的好處:
可以復現或者再現程式運行的程序
3.6個常用擴展亂數函式
(1)函式介紹


另外兩個函式與序列有關

撰寫代碼時如果要將幾行代碼放在一行中,用分號分隔
4.需要掌握的能力
(1)能夠利用亂數種子產生"確定"偽亂數
(2)能夠產生隨機整數
(3)能夠對序列型別進行隨機操作
五、實體6:圓周率的計算
1.問題分析
(1)圓周率的近似計算公式

(2)蒙特卡羅方法
撒點(隨機)計算

2.實體講解
(1)撰寫程式實作上述近似公式
①累加求和,變數k從0開始到無窮大,后邊就是一個分數以及乘方乘積的關系
②for回圈實作累加
(2)代碼實作近似公式
①假設無窮大是100
②增加“\”使代碼進行換行
③運行結果:圓周率值是:3.141592653589793
(3)蒙特卡羅方法的實作(使用四分之一單位正方形)
①DARTS:當前在區域中拋撒點的總數量,設為100萬
②hits:在圓的內部的點的數量
③start:當前的系統時間的一個值,啟動計時
④回圈撒點的程序,可以描述為一次遍歷回圈的程序,對每一個點做一個回圈體的運算
⑤用for in range對所有點進行拋灑
⑥x,y:兩個亂數的坐標值,random函式回傳0-1的小數值,單位正方形橫縱坐標也在0-1之間
使用x,y獲得當前的某一個坐標,即為一個隨機拋點
⑦如何判斷點在圓內:使用這個點到圓心的距離,用pow函式計算,小于1則在圓內部,hits加一
⑧hits比上撒點值再乘以4,即為圓周率
3.舉一反三
(1)理解方法思維
①數學思維:找到公式,利用公式求解
②計算思維:抽象一種程序,用計算機自動化求解
(2)程式運行時間
①使用time庫的計時方法獲得程式運行時間
②改變撒點數量,理解程式運行時間的分布(從性能角度說,關注回圈)
③初步掌握簡單的程式性能分析方法
(3)計算問題的擴展
①不求解圓周率,而是某個特定圖形的面積
②在工程計算中尋找蒙特卡羅方法的應用場景
總結
經過本篇的學習,可以大致掌握運用控制回圈結構去實作一些問題的求解(本篇只是基礎),大家可以嘗試不同的控制結構去拓展更多的回圈高級用法,回圈的高級用法中的else處理機制與例外處理機制類似,是與c++中不同的語法體系,
善于使用random庫函式解決數學問題,學會用代碼實作數學思維向計算機語言思維的轉換,
如有錯誤,歡迎指正!
注:代碼非原創
下篇將介紹函式和代碼復用,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/299684.html
標籤:python
