五、循環(huán)
本章內容運行環(huán)境:
Jupyter Notebook
本單元視頻鏈接:https://v.youku.com/v_show/id_XNDYyNTQ1MTcyMA==.html
5.1 for 循環(huán)
for item in list_of_items:
pass
-
in后面,是一個列表 -
for -- in ---:不要忘記這個: - 下一行要縮進,縮進幾個字符都可以,但是要保證上下文統一
這里需要注意,在Python中,縮進非常非常非常重要。
學過C或者MATLAB等其他編程語言的同學應該了解,一般是用{}來把函數包裹起來,系統通過{判定函數開始,}判定函數結束。
但是Python是通過縮進來判斷的,所以你的縮進必須一致。比如都用2個空格,或者都用4個空格。
nameList = ['Yangyang','Lindy','Alice','Leimei','Jack']
for eachName in nameList:
print(eachName)
# 輸出:
# Yangyang
# Lindy
# Alice
# Leimei
# Jack
nameList = ['Yangyang','Lindy','Alice','Leimei','Jack']
for eachName in nameList:
print(eachName, ', Hello')
# 輸出:
# Yangyang , Hello
# Lindy , Hello
# Alice , Hello
# Leimei , Hello
# Jack , Hello
看一下縮進的區(qū)別
nameList = ['Yangyang','Lindy','Alice','Leimei','Jack']
for eachName in nameList:
print(eachName)
print('Hello!')
# 輸出:
# Yangyang
# Hello!
# Lindy
# Hello!
# Alice
# Hello!
# Leimei
# Hello!
# Jack
# Hello!
nameList = ['Yangyang','Lindy','Alice','Leimei','Jack']
for eachName in nameList:
print(eachName)
print('Hello!')
# 輸出:
# Yangyang
# Lindy
# Alice
# Leimei
# Jack
# Hello!
range()
在上一章列表里,我們學習了可以用range()函數生成列表
for i in range(5): # 等價于range(0,5,1)
print(i)
# 輸出:
0
1
2
3
4
練習:生成一個列表[0,1,4,9,16,25,36,49....]
squares = []
for i in range(10):
squares.append(i**2)
print(squares)
# 輸出:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
練習:生成九九乘法表
for i in range(1,10):
for j in range(1,i+1):
print("{}*{}={}".format(i,j,i*j),end=" ")
print("\n")

5.2 列表推導式
(大概了解就可以,現在沒辦法掌握,也沒關系)
拿剛剛求平方的代碼為例,我們原來是這么寫的
squares = []
for i in range(10):
squares.append(i**2)
print(squares)
#輸出:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
有了列表推導式,我們可以這么寫
squares = [i**2 for i in range(10)]
print(squares)
#輸出:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
兩者的輸出是一樣的,只是列表推導式更簡潔和高效
5.3 while 循環(huán)
while expression:
pass
while循環(huán)的內容會一直循環(huán)執(zhí)行, 直到 expression 值為假(條件失效), 循環(huán)結束
count = 0
while (count < 9):
print( 'the index is:', count)
count += 1
#輸出:
the index is: 0
the index is: 1
the index is: 2
the index is: 3
the index is: 4
the index is: 5
the index is: 6
the index is: 7
the index is: 8
while循環(huán)常常用于你不確定,這個循環(huán),要循環(huán)多少次
用《Python編程:從入門到實踐,7.2.2節(jié)》中的一個例子:
不管用戶輸入什么,系統都會重復一遍,直到用戶輸入“quit”,程序結束
print("Tell me something, and I will repeat it back to you:")
message = ""
while message != "quit":
message = input("Your input:")
print("Output:",message)
# 輸出:
# Tell me something, and I will repeat it back to you:
# Your input:hi,I'm yangyang
# Output: hi,I'm yangyang
# Your input:quit
# Output: quit
避免無限循環(huán)
x = 1
while x <= 5:
print(x)
x += 1
如果你忘記了x += 1,這個程序就會陷入無限循環(huán)
可以通過Ctrl+C退出,也可以直接把軟件關了。。
5.4 break 和 continue
break:停止循環(huán)(直接退出了)
舉個例子:在一大堆士中,找到土,就結束(break)
shi_and_tu = ["士","士","士","士","士","士","士","土","士","士","士","士"]
for char in shi_and_tu:
print(char)
if char == "土":
print("我找到土啦!")
break
continue:跳過循環(huán)(本次退出,下次還來)
舉個例子:未滿18歲的輸出,超過18歲的,就跳過(continue)
ages = [16, 15, 23, 33, 67, 8, 10, 32]
for age in ages:
if age >= 18:
continue
print(age)
print("未達到18歲,不可以買酒")
5.5 實踐:輸出豆瓣首頁數據
【小練習】
給定整數序列, 求這個序列中子序列和的最大值
number = [-2, 11, 8, -4, -1, 16, 5, 0]
sum_n = []
for i in range(len(number)):
sum_n.append(number[i])
for j in range(i):
sum_n.append(sum(number[j:i+1]))
print(max(sum_n))
【清洗豆瓣數據】
結合【3.11節(jié),字符串】的實踐,輸出豆瓣電影 Top 250,前25部電影詳情
思路:
- 先去網站上,把所有內容貼下來,保存到
txt文件中 - 讀取txt文件
- 切割字符串
- 加入循環(huán),輸出前25項結果
注意:
- 注意
txt文件的路徑,要么和代碼保存在一個路徑下面,要么把路徑寫正確 -
for循環(huán)別忘記冒號: - 注意縮進,保持統一
參考代碼:
text = open('D:/Python/html_text.txt', 'rb')
text = text.read().decode('utf-8')
movies = text.split('class="grid_view\">')[1].split('<li>') #movies此時是一個列表
for i in range(1,len(movies)):
movie = movies[i] # 把movies這個列表的值,依次取出
title = movie.split('</span>')[0].split('>')[-1]
rate = movie.split('v:average\">')[1].split('</span>')[0]
number = movie.split('star')[1].split('<span>')[1].split('</span>')[0]
quote = movie.split('inq')[1].split('>')[1].split('<')[0]
year = movie.split(' <p class="">')[1].split('<br>')[1].split(' ')[0].strip()
print("{},《{}》,豆瓣評分{},{}。推薦理由:{}".format(year,title, rate, number, quote))

請在作業(yè)的最后一行輸出:
昵稱:第5節(jié)課作業(yè)