您好,登錄后才能下訂單哦!
編寫程序時經常有代碼需要重復運行,python提供了while和for進行循環操作。
一、while循環
1、while循環可以根據條件進行判斷,決定是否要循環執行語句塊,語法如下:
循環條件后面也是要使用冒號,然后縮進寫循環操作語句,先判斷條件是否成立,如果為true,則執行循環操作語句,如果為false,則跳出循環。示例代碼如下:
count = 0
while (count <5):
count = count+1
print (count)
#結果
>>>
5
變量count初始值為0,當count < 5時,循環執行count=count+1語句。如第1遍執行時,條件是0 < 5,結果true,則執行count=count+1語句,count值變為1,此時已經沒有其他語句同級,則值變為2。以此類推,當count等于4的時候,4 < 5成立,執行count=count+1語句,count變為5,此時再進行條件判斷5 < 5為false,退出while循環,最后的輸出結果為5.
2、字符串的格式化是將若干值插入帶有“%”替代符的字符串中,從而可以動態地輸出字符串,字符串中的“%d”表示插入的是一個整形數據,字符串后面的“%i”表示取的是變量i的值。
字符串格式化中可以使用的替代符除了“%d”,還有其他的替代符,如下表:
下面示例演示這幾種替代符的使用情況:
num = 5
numStr = "5"
numF = 5.55
print("第%d名"%num)
print("第%s名"%numStr)
print("分數是:%f"%numF)
#結果
>>>
第5名
第5名
分數是:5.550000
字符串中使用對應的替代符,把相應的變量插入到了相應的位置。
字符串中還可以使用多個替代符,對應的變量使用元組即可,示例代碼如下:
first = 1
second = 2
print("第%d名和第%d名"%(first,second))
#結果
>>>
第1名和第2名
使用時要注意順序,位置不能放錯,否則可能會出現類型不匹配的問題。
還可以使用字典格式化多個值,示例代碼如下:
num={"first":1,"second":2}
print("第%(first)d名和第%(second)d名"%num)
#結果
>>>
第1名和第2名
因為字典是無序的,所以使用字典時需要把鍵指定出來,明確哪個位置要用哪個鍵值。
3、對于編寫好的代碼,經過一段時間之后,有可能會忘記代碼的具體作用,所以代碼中要寫一些注釋文字,以便于日后閱讀和修改代碼。python中使用“#”+空格開頭表示注釋,可以對前面代碼加上注釋如下:
#輸入5門課程的考試成績,計算平均成績
#初始化循環計算器i
i=1
#初始化總成績變量sum
sum=0
#重復執行5次接收考試成績,求和的操作
while i<=5:
print("請輸入第%d門課程的考試成績"%i)
#每門課程計入總成績
sum=sum+inpunt()
i=i+1 #計數器i增加1
#計算平均成績
avg=sum/(i-1)
#輸出平均成績
print("5門課程的平均成績是%d"%avg)
使用“#”+空格開頭的文字python解釋器不會做任何處理,可以提高代碼的可讀性。在行開頭就使用“#”+空格的成為單行注釋,緊隨同行以“#”+空格開頭的成為行內注釋,注釋并不是在每行都需要,只需要把不易讀的代碼做注釋即可。
二、for循環
for循環是另一種用于控制循環的方式,while是使用條件判斷執行循環,而for是使用遍歷元素的方式進行循環。
1、for循環的幾種方式
for循環的語法結構如下:
常用的有以下幾種方式。
1)for循環可以對字符串進行遍歷,逐個獲得字符串的每個字符,示例代碼如下:
for letter in ("python"):
print ("Current letter:%s"%letter)
#結果
>>>
Current letter:p
Current letter:y
Current letter:t
Current letter:h
Current letter:o
Current letter:n
語句“for letter in python”:的作用是對“python”字符串的字符逐個遍歷,把字符賦值給變量letter,然后執行for對應的語句塊。例如,第一遍執行時,letter的值是“p”,執行輸出語句,然后返回再執行for語句,letter的值是“y”;依此類推,當執行完最后一個字符“n”的語句塊后,for循環已經沒有字符再可以獲得,循環退出。
2)for循環可以對列表和元組進行遍歷,示例代碼如下:
fruits = ["西瓜","蘋果","香蕉"]
for fruit in fruits:
print (fruit)
#結果
>>>
西瓜
蘋果
香蕉
語句“for fruit in fruits:”的作用是遍歷列表fruits中的元素,把元素賦值給fruit,輸出語句每次輸出一個水果。
3)需要循環操作相同的內容時,可以用for循環和range()函數結合使用,先看看range()函數的作用,示例代碼如下:
for i in range(0,5):
print(i)
#結果
0
1
2
3
4
for i in range(0,5,2):
print(i)
#結果
>>>
0
2
4
range(0,5)輸出的是一個列表,由第一個參數0開始,默認每次加1,當大于等于第二個參數時結束,所以列表中不包括第二個參數值。range(0,5,2)多了第三個參數2,作用是每次加2,最后的列表值是“[0,2,4]”。所以range()函數的作用是創建一個數字列表,取值范圍是從起始數字開始到結束數字之前的內容。for循環可以對列表進行遍歷,所以可以對range()函數的結果進行遍歷。示例代碼如下:
for i in range(0,5):
print("哈哈哈")
#結果
>>>
哈哈哈
哈哈哈
哈哈哈
哈哈哈
哈哈哈
range(0,5)是由0~4組成的列表,循環共執行了5遍,輸出語句執行了5遍,變量i的值就是每次遍歷列表的元素值。
2、for循環綜合示例代碼如下:
subjects = ('python','MySQL','Linux')
sum = 0
for i in subjects:
print("請輸入111的%s的考試成績:"%i)
score=int (input())
sum+=score
a v g=sum/len(subjects)
print("111的平均成績是%d"%a v g)
#結果
>>>
請輸入111的python的考試成績:
52
請輸入111的MySQL的考試成績:
68
請輸入111的Linux的考試成績:
84
111的平均成績是68
這段代碼的作用是接收2門課程的成績,計算輸出平均成績。使用for循環遍歷課程列表subjects,接收成績后使用sum累加,最后輸出平均成績。
3、邏輯運算符
任何語言中都有邏輯表達式,它是用邏輯運算符和變量連接起來的表達式,邏輯運算符下圖所示:
簡單演示邏輯運算符的使用方法:
>>> print (not True)
False
>>> print(True and False)
False
>>> print(True or False)
True
not是求反運算,所以not True的結果是false;and是與運算,只要有一個值是False,結果就是False,所以(True and False)的結果是False;or是或運算,只要有一個值是True,結果就是True,所以(True or False)的結果是True。
4、for循環嵌套
同while循環一樣,for循環也可以使用嵌套的方式,示例代碼如下:
students =["111","222"]
subjects = ('Python','MySQL','Linux')
for student in students:
sum = 0
for subject in subjects:
print("請輸入%s的%s考試成績:"%(student,subject))
score = int(input())
sum+=score
avg=sum/len(subjects)
print("%s的平均成績是%d"%(student,avg))
#結果
>>>
請輸入111的Python考試成績:
56
請輸入111的MySQL考試成績:
75
請輸入111的Linux考試成績:
93
111的平均成績是74
請輸入222的Python考試成績:
63
請輸入222的MySQL考試成績:
42
請輸入222的Linux考試成績:
69
222的平均成績是58
第1層循環用于控制對學生進行遍歷,第2層循環控制對課程遍歷,與while的方式基本相同。
此處需要注意的是,for循環的變量名沒有使用i、j這樣沒有意義的變量,而是使用了student、subject這種名稱明確的變量名,使程序的可讀性更強,避免了引用變量時出現引用錯誤的情況。
三、循環控制
當使用while和for做循環操作時,有可能需要改變循環的正常執行順序,這時就需要用循環控制語句實現,循環控制語句有break和continue。
1、break
在循環的語句塊中使用break語句,可以跳出整個 循環。下面對輸出平均成績的代碼進行修改,當成績無效時,使用break退出循環,示例代碼如下:
students =["111","222"]
subjects = ('Python','MySQL','Linux')
for student in students:
sum = 0
for subject in subjects:
print("請輸入%s的%s考試成績:"%(student,subject))
score = int(input())
if(score<0 or score>100):
print("輸入的成績需要大于0或小100,循環退出")
break;
sum+=score
avg=sum/len(subjects)
print("%s的平均成績是%d"%(student,avg))
#結果
>>>
請輸入111的Python考試成績:
52
請輸入111的MySQL考試成績:
111
輸入的成績需要大于0或小100,循環退出
111的平均成績是17
請輸入222的Python考試成績:
0
請輸入222的MySQL考試成績:
0
請輸入222的Linux考試成績:
5
222的平均成績是1
大部分是前面的代碼,只是在第8~10行加入了成績有效性的判斷,不符合條件,退出循環。當輸入111時,這是不符合條件的數值,程序執行8~10行,break退出for循環,break只和一個for循環對應,雖然有兩層循環,但它只會結束離它最近的循環,這里就是第2層for循環。第二層循環結束后,接著執行后面的第12行和13行代碼,第1層的循環照常遍歷執行,開始輸入第2個學生“王五”的成績。
2、continue
continue的作用和break不同,它不是結束整個循環,而是跳過當前一輪循環體的剩余語句,重新測試循環狀態,準備進入下一輪循環,示例代碼如下:
students =["111","222"]
subjects = ('Python','MySQL','Linux')
for student in students:
sum = 0
i = 0
while (i<len(subjects)):
print("請輸入%s的%s考試成績:"%(student,subjects[i]))
score=int(input())
if(score<0 or score>100):
print("輸入的成績需要大于0或小100,重新輸入")
continue;
sum+=score
i=i+1
avg=sum/len(subjects)
print("%s的平均成績是%d"%(student,avg))
#結果
>>>
52
請輸入111的MySQL考試成績:
120
輸入的成績需要大于0或小100,重新輸入
請輸入111的MySQL考試成績:
82
請輸入111的Linux考試成績:
100
111的平均成績是78
請輸入222的Python考試成績:
69
請輸入222的MySQL考試成績:
150
輸入的成績需要大于0或小100,重新輸入
請輸入222的MySQL考試成績:
63
請輸入222的Linux考試成績:
50
222的平均成績是60
第1層使用的是for循環遍歷名字,第2層使用while循環遍歷成績,使用continue是跳到離它最近的循環的下一輪,也就是第2層的while循環的下一輪。因為執行continue后,第13行的i=i+1沒有執行,而是重新有執行第6行的while循環,所以就是對當前課程的成績重新輸入。當輸入MySQL的成績為120時,提示數據有誤,然后又提示需要重新輸入MySQL成績,代碼更加健壯。
此博文到此結束,感謝閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。