邏輯運算符回顧
連接多個條件運算符,and、or、not
問題:連接多個條件的運算返回的是布爾值還是數據值??
如果所有的條件都是數據值,那麼返回的就是數據值
print(0 and 2 and 5) # 5
print(0 or 1 or 3 or 5) # 1
如果所有的條件都是表達式,那麼返回的是布爾值
print(1 < 0 and True and 3 > 1) # False
print(1 < 0 or True or 3 > 1) # True
如果條件既有表達式又有數據值,那麼返回的結果就要看連接的邏輯運算符是and還是or
在遇到邏輯運算符都是and的情況時,從前到後要依次看條件是否都成立,最後一個條件是數據值就返回數據值,如果是表達式,就返回布爾值。
print(1 and 1 < 2) # True
print(1 and 3 and True and 56) # 56
在遇到邏輯運算符都是or的情況時,從前向後依次看,遇到的第一個條件結果成立的時候,就返回,如果是數據值就返回數據值,如果是表達式就返回布爾值
print(1 or 1 < 3 or True) # 1
print(3 > 1 or 1 < 2) # True
遇到多種運算符混合使用的時候,需要考慮優先級,()>not>and>or,遇到具體的數據值就返回數據值,遇到表達式,就返回布爾值
print(1 and 3 > 2 or 5 or False and 3 == 3) # True
print(1 < 0 and 3 or 5 or False and 3 == 3) # 5
not的結果返回的只能是布爾值
循環結構之while基本語法
`while` 條件
條件成立後執行的子代碼
while+break
`while` 條件:
條件成立後執行的子代碼
break
break的用法是可以終止循環,如果是多個條件循環嵌套的情況時,break只是終止的他所在的那層循環不會影響其他的循環
while+continue
`while` 條件:
條件成立後執行的子代碼
continue`
continue的用法是跳過這次循環,繼續執行下次循環
while+else
`while` 條件:
條件成立後執行的子代碼
`else`:
提前定義好的代碼
else的用法是正常在循環體結束後執行的,不是異常執行,else與while同級
while的循環嵌套
`while` 條件:
條件成立執行的子代碼
`whlie` 條件
條件成立後的子代碼
循環嵌套需要注意代碼的層級關系,代碼的縮進,大循環套小循環,只需要循行同級的關系按照順序結構一次向下執行,如果遇到while、if在做另行判斷
死循環和全局標志位
死循環:循環體代碼不能是連續的計算機任務,盡量不要去使用。
全局標志位:為了節省break,在開始定義一個True,結尾再重新定義為False
循環結構之for循環
for循環能夠做的事情while循環都可以做到,它可以遍歷到任何序列的項目,例如列表、字典、字符串、元組、集合
通過列表索引迭代,一種執行循環的方式是通過索引,適用於列表、元組和集合
fruits = ['banana', 'apple', 'mango']
for i in fruits:
print('當前水果 : %s' % i)
"""
當前水果 : banana
當前水果 : apple
當前水果 : mango
"""
`for` 變量名 `in` 可迭代對象:
for循環的循環體代碼
for循環的過程,它會拿到給的數據,從前到後依次取出這個數據的每一個數據值然後賦值給前面的變量i,首先拿出第一個數據值綁定給i進行循環體裡執行,執行結束後他會再次回到for循環裡然後再次拿出第二個數據值進行賦值給i,然後繼續執行循環體代碼,其中i是一個動態綁定的,直到數據裡的數據值全部取完後,它會自動結束
變量名的命名:如果待取名的數據有明確的方向,那麼就要做到見名之意
常見的命名名字有:i、j、k、item
字典的取值,在for循環中,默認我們只能取到K值
dict = {'name': 'zhangran', 'age': 23, 'gender': 'women'}
for i in dict:
print(i)
"""
name
age
gender
"""
字符串的取值,for循環中,字符串的取值為單個字符
str = 'asdfgh'
for i in str:
print(i)
"""
a
s
d
f
g
h
"""
擴展知識
`for` 變量名 in range(數字):
循環體代碼
當range後面只跟了一個數字,從0開始到范圍值-1結束例如:范圍值為4的時候,結果是0,1,2,3,4
`for` 變量名 in range(數字1,數字2):
循環體代碼
當range後面跟了倆個數字,第一個是起止位置,第二個為終止位置,這時候產生的數據值的特點是”顧頭不顧尾“,即左包含右不包含。例如:(1,6),結果是1,2,3,4,5
`for` 變量名 in range(數字1,數字2,間隔數):
循環體代碼
當range後面跟了三個數字,最後一個數字為數據之間的間隔數(也可理解為等差數列)例如:(1,10,2),結果是1,3,5,7,9
3. range方法實際操作---網絡爬出
網絡爬蟲:python代碼模擬網絡請求獲取數據
base_url = 'https://movie.douban.com/top250?start=%s&filter='
for i in range(0, 250, 25):
print(base_url % i)
"""
https://movie.douban.com/top250?start=0&filter=
https://movie.douban.com/top250?start=25&filter=
https://movie.douban.com/top250?start=50&filter=
https://movie.douban.com/top250?start=75&filter=
https://movie.douban.com/top250?start=100&filter=
https://movie.douban.com/top250?start=125&filter=
https://movie.douban.com/top250?start=150&filter=
https://movie.douban.com/top250?start=175&filter=
https://movie.douban.com/top250?start=200&filter=
https://movie.douban.com/top250?start=225&filter=
"""
for與其他關鍵字一起使用
for + break
break強制結束所在的那層for循環
for + continue
continue跳過這次循環繼續下次循環
for + else
else配合for一起使用 當for循環沒有被強制結束的情況下 循環體結束之後運行else子代碼