1. python用for使每次輸出多一個值
首先來說下for循環,for循環是python語言的循環控制語句,for循環可以遍歷任何序列的項目,包括序列集合或可迭代對象,如列表、字元串、元組、字典等。
看下基本語法:
for 變數 in 序列: #變數為任意值,序列為列表、元組、字元串等
子代碼模塊
復制
比如我們想從一個列表中列印出來每個值,就可以用到for循環:
for i in (1,2,3,"test"): #遍歷列表裡的所有值,並把值賦值給變數 i
print(i) #輸出結果為:1 2 3 test
#每次只輸出一個,因為for循環是遍歷列表裡的所有值,每遍歷一次就輸出一個值,然後遍歷第二次,當遍歷第二次時,變數i的值也會發生變化
復制
第一次循環:從列表中讀取到 1 ,把1值賦值給變數 i ,然後進入到子代碼中,此時 i 的值為 1,列印出 1 ,然後結束本次for循環,判斷列表中還有其他值,開始第二次循環
第二次循環:從列表中讀取到 2 ,把2值賦值給變數 i ,然後進入到子代碼中,此時 i 的值變成了 2,列印出2,然後結束本次for循環,判斷列表中還有其他值,開始第三次循環
第三次循環:從列表中讀取到 3 ,把3值賦值給變數 i ,然後進入到子代碼中,此時 i 的值變成了 3,列印出3,然後結束本次for循環,判斷列表中還有其他值,開始第四次循環
第四次循環:從列表中讀取到 test ,把test值賦值給變數 i ,然後進入到子代碼中,此時 i 的值變成了 "test",列印出 "橘行test",判斷列表中沒有值了,結束本次遍歷
最後輸出的值為:1
2
3
test
如果我們把print(i)加到for循環外,此時列印的結果是什麼呢?
for i in (1,2,3,"test"): #遍歷列表裡的所有值,並把值賦值給變數 i
print(i) #列印每次循環的值
print(i) #因為最後一次遍歷的值為「test」,所以最後輸出的值為 test
復制
最後按個print(i)輸出的值為:test
輸出的值為:1
2
3
test #上面是for循環每次遍歷得到的結果
test #這個是for循環外,列印圓備嘩i得到的結果
如果我們遍歷一個字元串是什麼樣子呢?
for i in ("Atom"): #遍歷字元串里的所有值,並把值賦值給變數 i
print(i) #列印的結果為:A
t
o
m
復制
列印出的結果為:A
t
o
m
遍歷一個字元串,會把字元串的每個字元都遍歷出來
第一次循環:從字元滾前串中讀取到 A ,把A值賦值給變數 i ,然後進入到子代碼中,此時 i 值為 A,印出 A ,然後結束本次for循環,判斷字元串中還有其他值,開始第二次循環
第二次循環:從字元串中讀取到 t ,把t值賦值給變數 i ,然後進入到子代碼中,此時 i 的值變成了 t,列印出t,然後結束本次for循環,判斷字元串中還有其他值,開始第三次循環
第三次循環:從字元串中讀取到 o ,把o值賦值給變數 i ,然後進入到子代碼中,此時 i 的值變成了 o,列印出o,然後結束本次for循環,判斷字元串中還有其他值,開始第四次循環
第四次循環:從字元串中讀取到 m ,把m值賦值給變數 i ,然後進入到子代碼中,此時 i 的值變成了 m,列印出 m,判斷字元串中沒有值了,結束本次遍歷
現在我們用下range()函數
先說下rang()函數,rang()函數可以創建一個整數列表
range(3)就表示創建一個整數列表(0,1,2) range(5)表示創建一個整數列表(0,1,2,3,4)
for i in range(3): #創建一個整數列表(0,1,2),然後遍歷列表裡的所有值,並把值賦值給變數 i
print(i) #列印結果為:0
1
2
復制
列印結果為:0
1
2
最後來個for循環和if判斷相結合的一個例子:
有一個列表(0,1,2,3),我們想取出列表中小於2的數字,應該怎麼辦?
這時候就可以先用for循環取出,列表裡的每個值,然後再用if判斷是否小於2,如果滿足就列印出來,如果不滿足結束本次循環,再去取第二個值:
for i in range(4): #創建一個列表(0,1,2,3),然後遍歷列表中的每個值,賦值給i
if i < 2: #得到列表中的每個值後,去進行判斷,如果滿足i < 2,就列印出i的值
print(i) #輸出的結果為:0 1
復制
第一次循環:從列表中讀取到 0 ,把0賦值給變數 i ,然後進入for循環的子代碼中,此時 i 的值為 0,然後去進行if判斷,i <2成立,進入到if子代碼中,列印出i的值為0 ,結束本次if循環,然後結束本次for循環,判斷列表中還有其他值,開始第二次for循環
第二次循環:從列表中讀取到 1 ,把1賦值給變數 i ,然後進入for循環的子代碼中,此時 i 的值為 1,然後去進行if判斷,i <2成立,進入到if子代碼中,列印出i的值為1 ,結束本次if循環,然後結束本次for循環,判斷列表中還有其他值,開始第三次for循環
第三次循環:從列表中讀取到 2 ,把2賦值給變數 i ,然後進入for循環的子代碼中,此時 i 的值為 2,然後去進行if判斷,i <2不成立,不進入if子代碼中,結束本次if循環,然後結束本次for循環,判斷列表中還有其他值,開始第四次for循環
第四次循環:從列表中讀取到 3 ,把3賦值給變數 i ,然後進入for循環的子代碼中,此時 i 的值為 3,然後去進行if判斷,i <2成立,不進入if子代碼中,結束本次if循環,然後結束本次for循環,判斷列表中沒有其他值了,結束本次遍歷
總結下for循環就是,去一個個取出序列中的所有值,然後用每個值去進行for循環子代碼下的運算,當結束for循環下子代碼的運算後,再去判斷序列中還有沒有其他值,如果存在,再去把值取出,去進行for循環下子代碼的運算,直到序列中的所有值,都進行過for循環子代碼的運算,然後結束for循環
2. python提供了哪三個非常重要的語句來應對python程序在運
1、If語句詳解與實踐
之前已經用過很多次If函數了,這邊我再做一個簡單介紹和一些新內容的補充吧,If函數的底層邏輯就是用來判斷,如果滿足條件則執行下面的語句。
基本的語法邏輯如下,注意記得寫冒號及代碼前的縮進:
if 條件:
代碼1
else:
代碼2
1
2
3
4
其中兩個注意點,之前也提過了,就是縮進與英文格式的標點符號,有的時候,你忘記縮進或者冒號是中文格式的時候,程序就會報錯,不過Pycharm和Spyder都會在那一行提醒你這一行的寫法有問題,所以倒也不用太擔心。
現在我們再來看看之前寫過這個代碼,是不是會感覺清晰很多呢。
score = 100
year = 2018
if (score < 0) and (year == 2018):
print('錄入資料庫')
else:
print('不錄入資料庫')
1
2
3
4
5
6
我們下面再補充些內容,其實掌握上面的內容已經完全足夠了,下面的只是作為一個知識點的補充。比如你考試考了80分,最簡單的是:
score = 85
if score >= 60:
print('及格')
else:
print('不及格')
1
2
3
4
5
我相信現在大家看這個代碼已經完全沒有問題了,輸出肯定是『及格』。那如果我除了想判斷是否及格外,還想看它是否優秀(大於80分),則輸出『優秀』,該怎麼弄呢。
score = 55
if score >= 80:
print('優秀')
elif (score >= 60) and (score < 80):
print('褲豎及格')
else:
print('不及格')
1
2
3
4
5
6
7
這邊唯一的一個不同,就是中間加入了一個elif,這個其實就是elseif的縮寫,用來提供多個結果使用的,
其實這個我做項目的時候基本沒有用過,大家簡單了解下即可。
2、For語句詳解與實踐
For語句之前有提到過一次,它的重要程度可以說僅次於If語句了,它的底層邏輯是循環,其實While的底層邏輯是循環,不過還是For用的更加普遍些。
For語句的常見使用格式為,注意記得寫冒號及代碼前的縮進:
for i in 區域:
代碼
1
2
先舉個之前講列表的時候講過的例子:
class1 = ['丁一', '王二麻子', '張三', '李四', '趙五']
for i in class1:
print(i)
1
2
3
用大白話來說就是:
列表class1 = ['丁一', '王埋純茄二麻子', '張三', '李四', '趙五']
對於class1中的所有元素i:
我們都把它列印輸出出來
1
2
3
這個輸出代碼為:
丁一
王二麻子
張三
李四
趙五
1
2
3
4
5
這個i可以換成任何東西,比如你換成j,換成一個字元串,只要和下面的print()裡面的內容匹配即可。
比如我們可以寫:
class1 = ['丁一', '王二麻子', '張三', '李四', '趙五']
for haha in class1:
print(haha)
1
2
3
這樣輸出的結果其實是一樣的。
For語句還通常與range()函數合用,range函數的話其實就是一個類似於list的東西,只不過它可能更像list的長度,你想循環多少次,在range的括弧里填寫幾就可以,比如我寫for i in range(3),那麼它就是循環3次:
for i in range(3):
print('hahaha')
1
2
這個它就會輸出三行『hahaha』。
我擔心大家可能會對這個for i in range(3)中的i還有疑惑,剛剛i不是代表列表裡的每一個元素嗎,這邊這個i又是什麼意思呢?這邊我給大家做一個偷懶的總結:
(1)對於"for i in 區域"來說,如果說這個區域是一個列表,那麼那個i就表示這個列表裡的每一個元素;
(2)對於"for i in 區域"來說,如果說這個區域是一個range(n),那麼那個i就表示0到n -1這n個數字,之前提到過,python中序號都是從0開始的,所以這邊彎察也是從0開始,到n - 1結束。
(3)對於"for i in 區域"來說,如果說這個區域是一個字典,那麼i表示的就是字典的中的鍵(了解即可,很長一段時間用不到)
還有個非常重要的知識點:for i in range(5)的話,它的確會循環5次,但要注意,在python中,第一個元素的序號其實是0,所以如果我們輸入如下代碼:
for i in range(5):
print(i)
1
2
那麼輸出的結果是從0開始的,也就是0到4
0
1
2
3
4
1
2
3
4
5
這時候你可能要問,這玩意有什麼用?下面我就以輿情監控中的實戰來給大家講解下for語句在爬蟲實戰中的應用:
title = ['標題1','標題2','標題3','標題4','標題5']
for i in range(len(title)): #len(title)表示一個有多少個新聞,這里是5
print(str(i+1) + '.' + title[i]) #這個其實把字元串進行一個拼接
1
2
3
上面這幾行代碼已經很大程度就是你做項目實戰用到的代碼了,暫時看著有點暈也沒有關系,我在教學視頻里會詳細介紹下的。我先用大白話來解釋下這幾行代碼在幹嘛:
爬到了一些新聞標題,放到了title這個列表裡
用len(title)來獲取一共有多少條新聞,並利用for和range語句來進行循環:
列印輸出新聞標題,並且在前面加上序號
1
2
3
輸出結果如下圖所示:
其中有幾個小注意點,
(1)range(len(title))這邊就相當於range(5),因為len(title)就等於5,所以for i in range(len(title))就是循環5次,這里的i就表示數字0-4。
(2)為什麼要寫str(i + 1),因為我們要標序號,'標題1』是字元串形式的,而i是數字,我們講過數字和字元串不能直接相加,所以要用str函數進行下轉換。
(3)至於為什麼不是str(i),而是str(i + 1)。是因為之前講列表的時候提到過,在編程中,第一個序號都是0,比如之前列表裡講過的class1[0]表示「丁一」一樣,這邊如果寫str(i)的話,那麼輸出的第一個序號就是「0.標題1」了。
(4)因為這里的i就表示數字0-4,title[i]的話,表示列表中的第i+1個元素,所以title[0]的話就表示第1個元素,title[4]就表示第5個元素。
通過for循環和range()函數和len()函數的聯合使用,可以同時列印多個列表中的元素,代碼如下:
# 在實戰中的應用(可以同時列印多個列表中的內容)
title = ['標題1', '標題2', '標題3', '標題4', '標題5']
href = ['網址1', '網址2', '網址3', '網址4', '網址5']
for i in range(len(title)): # len(title)表示一個有多少個新聞,這里是5;這里的i就表示數字0-4
print(str(i+1) + '.' + title[i]) # 這個其實把字元串進行一個拼接
print(href[i])
1
2
3
4
5
6
3、While語句詳解與實踐
While的底層邏輯也是循環,它和For的特點不一樣,最大的區別是For知道循環次數,而While的話則是不清楚循環次數。
其使用格式為,注意要寫冒號以及代碼前的縮進:
while 條件:
要執行的的代碼
1
2
舉個例子給大家看下:
a = 1
while a < 3:
print(a)
a = a + 1 #或者寫成 a += 1
1
2
3
4
它白話的意思就是:
首先將1賦值給a
當 a 小於3的時候:
列印輸出a
a 在原來的基礎上加上1
1
2
3
4
a一開始等於1,滿足小於3的條件,會列印輸出1,然後a加上1等於2,此時a仍然小於3,所以仍然會執行列印輸出的命令,此時列印輸出2,然後a在2的基礎上加上1等於3,此時a已經不滿足小於3的條件了,那麼循環此時便終止了。最後輸出如下:
1
2
1
2
大家可以試著把數字3換成別的數試試看。
其實我們之後大多情況下用到While的時候,就是讓While來一直循環(如果用for i in range(n),無論n多大,那麼早晚都有結束的時候),這個在爬蟲實戰中的具體應用是:當每爬完一次,就自動進行下一次爬取,實現24小時不間斷爬取。那麼While如何能實現一直循環呢?
具體的方法其實很簡單,那就用while True進行永久循環。
while True:
代碼塊
1
2
給大家截個圖看下,下面這張圖就是最終的代碼效果,這個while True就是輿情監控系統實現24小時不間斷爬取的秘訣,有個注意點,這個True得大寫首字母,之後講到的時候再詳細介紹:
大家如果想停止while True的不停的循環,可以在點擊右上角的紅色終止按鈕即可。我當初自己學的時候,寫過這么兩行代碼