所謂流程控制,是指會改變程序運行順序的指令,可能是運行不同位置的指令,或是在二段(或多段)程序中選擇一個運行。
之前忘了說關于python中的幾點語法特點吧
1、python使用#添加注釋
2、沒有;
號
3、縮進代表同一個代碼塊
4、python中沒有定義變量不需要類型,變量的類型由變量的值決定
5、python沒有空的代碼塊,任何空的代碼塊都必須使用pass語句
if語句
if語句有三種形式,
#普通形式
if a>0:
print("正數")
#if-else形式
if a>0:
print("正數")
else:
print("負數")
#if-elif-else形式
if a>0:
print("正數")
elif a == 0:
print("零")
else:
print("負數")
for循環
Python中的for循環能夠遍歷任何集合類(能夠產生item集合的對象),比如
num = [1,4,5,8,2]
#類似于java遍歷對象的方式
for x in num:
print(x)
在遍歷的過程中修改序列是不安全額,比如看下面的例子
num = [1,4,5,8]
for x in num:
# 遍歷num,當其中一個元素大于等于8的時候,就在集合的末尾添加一個8
if x >= 8:
num.insert(len(num)-1,x)
print(num)
運行函數就會出現死循環了,因為在遍歷的過程中一邊添加8,num的結構發生了改變,那么for循環遍歷num就會繼續取出新的元素,又因為新添加的8符合條件,所以就會進入死循環了。
哎呀...剛才不小心開著死循環跑這個程序,結果CPU飆到99%了,真可怕。
言歸正傳,如果我們要對可變集合進行修改,那么我們可以選擇使用切片來獲得一個副本,在for循環中使用這個副本,就能夠達到隔離副本和原數據的目的了,比如剛才的例子:
num = [1,4,5,8]
#使用切片獲取數據集的副本
for x in num[:]:
if x >= 8:
num.insert(len(num)-1,x)
print(num)
#結果輸出 [1, 4, 5, 8, 8]
為了方便我們生成數值序列,python提供了一個range()函數給我們,通過range()我們可以獲取到一個等差數值序列
#默認從0開始,差值為1,返回 [0,1,2,3,4]
range(5)
#從5開始,到10結束,差值為1,返回為[5,6,7,8,9]
range(5,10)
#從0開始,到10結束,差值為2,返回[0,2,4,6,8]
range(0,10,2)
直接運行range()函數是不會有結果的,也不會返回對應列表,當我們使用range函數的時候,它能夠按照我們的預期返回下一個元素,這樣是為了節省空間。range配合for循環進行使用,比如
for x in range(0,10,2):
print(x)
#輸出結果 0 2 4 6 8
range是一個可迭代的對象,使用list方法能夠返回一個列表,也就是說這個時候列表越大占據的內存就越大,而range()只有當調用next的時候,才會訪問下一個元素。如果想通過range()生成器來生成列表的話,可以使用list(),list()能夠把可迭代對象轉化成列表
mylist = list(range(0,10,2))
ptint(mylist)
#輸出結果為[0,2,4,6,8]
while循環
while屬于對條件進行控制的循環,區別于for循環是對集合進行遍歷的,我們來看一下while循環的用例
go = True
b = 0
while(go):
b = b+ 1
print(b)
if b>=10:
go = False
忘了之前有沒有說,python的bool類型有兩種取值,True或者False,首字母必須是大寫,對于非空的對象,視作true,即使是負數,在條件語句里也是判斷為True的,比如
c = -1
if(c):
print(c)
#輸出結果為-1
break和continue語句
說到for循環,自然離不開break和continue,這兩個關鍵字都和java中的功能是一樣的,break用于跳出最近一級的循環,而continue則用于跳過本次循環。
關于遞歸
在流程控制的過程中,我們有時候可能會使用遞歸,但是需要注意的是,遞歸使用不到是會出現問題的,棧溢出的問題,所以在不了解遞歸層數的情況下,謹慎使用遞歸。