官术网_书友最值得收藏!

2.7 Python中的條件語句和循環(huán)語句

編程與生活息息相關(guān),如紅燈停、綠燈行就是條件語句。條件語句和循環(huán)語句在量化交易中很常用,如圖2.1所示。策略是否可以根據(jù)行情實時變化發(fā)現(xiàn)潛在的交易機會,取決于它在循環(huán)語句中重復(fù)的判斷交易信號是否成立。之所以會自動下單交易,是因為它可以根據(jù)條件語句執(zhí)行下單動作。

圖2.1 條件語句和循環(huán)語句

2.7.1 條件語句

計算機在執(zhí)行代碼時,會按照從上到下的順序逐行執(zhí)行。但很多時候按順序執(zhí)行代碼有很大的局限性。假如有一個策略邏輯是只有在均線金叉時才能買入,這時就需要用到if條件語句了。if條件語句的邏輯示意圖如圖2.2所示。

圖2.2 if條件語句的邏輯示意圖

if條件語句屬于選擇結(jié)構(gòu),它就像一個開關(guān),首先對條件進(jìn)行判斷,然后根據(jù)判斷結(jié)果執(zhí)行不同的代碼。這個條件可以是單一的值,也可以是由運算符組成的表達(dá)式,只要這個條件能得到一個值,if條件語句都能判斷它是否成立。如果條件成立,則會執(zhí)行if語句中的代碼塊,否則會跳過if語句。示例代碼如下:

輸出結(jié)果如下:

在通常情況下,if語句和else語句可以組合成if...else條件語句。如果條件成立,那么執(zhí)行if語句中的代碼塊,跳過else語句中的代碼塊;如果條件不成立,那么跳過if語句中的代碼塊,執(zhí)行else語句中的代碼塊。if…else條件語句的邏輯示意圖如圖2.3所示。

圖2.3 if…else條件語句的邏輯示意圖

示例代碼如下:

輸出結(jié)果如下:

還有一種if…elif…else形式的條件語句,這種條件語句會依次判斷表達(dá)式的值,如果某個表達(dá)式的值為真,則執(zhí)行對應(yīng)的代碼塊;如果所有的表達(dá)式均為假,則執(zhí)行else語句中的代碼塊。if…elif…else條件語句的邏輯示意圖如圖2.4所示。

圖2.4 if…elif…else條件語句的邏輯示意圖

示例代碼如下:

輸出結(jié)果如下:

條件語句可以嵌套使用。在嵌套條件語句中,可以將if...elif...else條件語句嵌套在另一個if...elif...else條件語句中。示例代碼如下:

輸出結(jié)果如下:

在上述代碼中,首先定義了一個字典變量,然后使用if語句判斷字典變量中age元素的值,由于字典變量中age元素的值是18,因此if語句和elif語句中的代碼塊都不會被執(zhí)行,轉(zhuǎn)而執(zhí)行else語句中的代碼塊。

2.7.2 循環(huán)語句

循環(huán)是讓計算機重復(fù)做某件事情。Python提供了兩種循環(huán)語句,分別是for循環(huán)語句和while循環(huán)語句。for循環(huán)語句通常用于表示有限次數(shù)的循環(huán)。while循環(huán)語句通常用于表示不定次數(shù)的循環(huán),在某些條件觸發(fā)后退出循環(huán)。循環(huán)語句的邏輯示意圖如圖2.5所示。

圖2.5 循環(huán)語句的邏輯示意圖

for通常用于遍歷數(shù)量有限的數(shù)據(jù)(如字符串、列表、字典等)或處理有限的任務(wù)。例如,使用for循環(huán)語句將一個字符串中的所有字符逐個打印出來,示例代碼如下:

輸出結(jié)果如下:

如果數(shù)據(jù)是無限的,或者需要處理無限重復(fù)的任務(wù),則可以使用while循環(huán)語句。while循環(huán)語句在每次開始循環(huán)前,都會先判斷條件語句是否為真,如果條件語句為真,那么執(zhí)行循環(huán)體內(nèi)的代碼塊。示例代碼如下:

輸出結(jié)果如下:

在上述代碼中,首先定義了一個變量a并將其賦值為0,然后使用while循環(huán)語句,其條件是a>100,也就是說,如果a>100,就重復(fù)執(zhí)行循環(huán)體內(nèi)的代碼塊,每一次循環(huán)都將a的值加1,直到a=100,循環(huán)結(jié)束。

2.7.3 break語句

break語句是循環(huán)語句的搭檔,當(dāng)循環(huán)語句中出現(xiàn)break語句時,循環(huán)會立刻終止。如果是雙層循環(huán)語句,那么break語句只會終止當(dāng)前循環(huán)。示例代碼如下:

輸出結(jié)果如下:

在上述代碼中,使用了兩個for循環(huán)語句,分別用于遍歷列表變量arr1和arr2,在遍歷列表變量arr2時遇到了break語句,就跳出了當(dāng)前的for循環(huán),所以列表變量arr2中的第2~4個元素("b"、"c"和"d")都不會被打印出來,但是列表變量arr1中的元素都被打印了出來,說明break語句只是跳出了循環(huán)for j in arr2。

2.7.4 continue語句

continue語句與break語句類似,和break語句不同的是,continue語句不是終止整個循環(huán),而是跳過本次循環(huán),并且強制執(zhí)行下一次循環(huán)。示例代碼如下:

輸出結(jié)果如下:

在上面的輸出結(jié)果中,字符串"c"沒有被打印出來。因為在循環(huán)體內(nèi)使用if語句判斷i=="c"時執(zhí)行了continue語句,所以跳過了當(dāng)前循環(huán),并未執(zhí)行后面的Log(i)代碼,直接執(zhí)行了下一次循環(huán)。continue語句和break語句類似,只能作用于當(dāng)前循環(huán),不影響外層循環(huán)(如果有的話)。

主站蜘蛛池模板: 浠水县| 岳池县| 华宁县| 敦化市| 泸定县| 亚东县| 永修县| 永川市| 岱山县| 瓮安县| 五莲县| 徐水县| 桓台县| 海南省| 广饶县| 美姑县| 莱西市| 嘉荫县| 合肥市| 改则县| 黔江区| 赤城县| 宽甸| 宁陵县| 建宁县| 新密市| 灵石县| 沈阳市| 扎囊县| 兴文县| 兴隆县| 克拉玛依市| 青冈县| 石首市| 大同县| 永定县| 奉贤区| 兴文县| 太康县| 东阳市| 休宁县|