個人筆記陈轿,僅供參考
五、條件、循環(huán)及其他語句
1峻呛、再談print和import
1.1穆碎、打印多個參數(shù)
print不僅可以打印一個表達(dá)式话肖,還可以同時打印多個表達(dá)式蔚叨,條件是用逗號分隔邢锯。
>>> print('Age:',42)
Age: 42
如你所見蒂培,打印后的兩個參數(shù)之間有一個空格。在你要合并文本和變量值,而又不想使用字符串設(shè)置功能時,這種行為很有用。
可以取消結(jié)尾默認(rèn)的換行符,
print('Hello,',end='')
print('world')
使用上面兩行代碼打印Hello,world
1.2、導(dǎo)入時重命名
從模塊導(dǎo)入時通常用以下幾種方法
import somemodule
from somemodule import somefunction
from somemodule import function1,funtion2
導(dǎo)入包中所有內(nèi)容時
from somemodule import *
如果導(dǎo)入多個包牲剃,且有同名函數(shù)聪舒,調(diào)用時應(yīng)制定包名
module1.open()
module2.open()
或者在導(dǎo)包時添加as并制定別名
>>> from math import sqrt as foobar
>>> foobar(4)
2.0
2亡鼠、賦值
(花里胡哨的賦值,了解就好)
2.1举哟、序列解包
同時給多個變量賦值
>>> x,y,z = 1,2,3
>>> print(x,y,z)
1 2 3
這種方式還可以交換多個變量的值
>>> x,y = y,x
>>> print(x,y,z)
2 1 3
這里執(zhí)行的操作就叫序列解包(可迭代對象解包):將一個序列解包壶硅,并將得到的值存儲在一系列變量中。
>>> values = 1,2,3
>>> values
(1, 2, 3)
>>> x,y,z = values
>>> x
1
>>> y
2
>>> z
3
在使用返回元組的函數(shù)或方法時很有用。假設(shè)要從字典中隨機(jī)獲取一個鍵值對,可用popitem,它隨便獲取一個鍵值對并以元組的方式返回泳唠。接下來士鸥,可直接將返回的元組解包到兩個變量中脚仔。
>>> scoundrel = {'name':'Robin','girlfriend':'Marion'}
>>> key,value = scoundrel.popitem()
>>> key
'girlfriend'
>>> value
'Marion'
2.2、鏈?zhǔn)劫x值
這是一種快捷方式,用于將多個變量關(guān)聯(lián)到同一變量。
x = y = somefunction()
2.3、增強(qiáng)賦值
使用復(fù)合的運(yùn)算符來賦值邻眷,如以下兩種寫法效果相同葫督。
>>> x = x + 1
>>> x += 1
也可以用于其他數(shù)據(jù)類型
>>> fnord = 'foo'
>>> fnord += 'bar'
>>> fnord
'foobar'
3、代碼塊的縮進(jìn)
在循環(huán)中,python依靠縮進(jìn)判斷是否在循環(huán)體中绒窑,python中的縮進(jìn)也是判斷代碼塊之間從屬關(guān)系的重要條件。所以縮進(jìn)一定要嚴(yán)謹(jǐn)烫映。
4、條件和條件語句
在你編寫的程序中,語句都是逐條執(zhí)行的“追現(xiàn)在更進(jìn)一步槐瑞,讓程序選擇是否執(zhí)行特定的代碼塊。
4.1、布爾值
用布爾表達(dá)式丈钙,下面的值都被視為假:
False None 0 "" () [] {}
4.2芙扎、有條件地執(zhí)行和if語句
if語句
在確定條件為真時執(zhí)行指定語句,條件為假這不執(zhí)行榨汤。
name = input("what your name: ")
if name == 'Gumby':
print("hello,Mr.Gumby")
4.3虫埂、else語句
在前面的示例中,輸入Gumby即可打印出信息麻裁。
現(xiàn)在可以使用else語句來在輸入值不是Gumby時執(zhí)行其他操作。
name = input("what your name: ")
if name == 'Gumby':
print("hello,Mr.Gumby")
else:
print("hello")
但要注意,在if語句中只能有一個else語句
要處理多種情況的話慕趴,應(yīng)使用elif語句。
4.4蔓同、elif語句
前文已經(jīng)說了,在執(zhí)行多種情況是要使用elif語句。
number = int(input("your number:"))
if number<3:
print("number<3")
elif number>3:
print("number>3")
else:
print("數(shù)字不屬于上述情況")
elif語句需要指定條件思灌,而else不用裕照。但elif語句可以有無數(shù)個蜒茄,else只能有一個。
4.5楚殿、代碼塊嵌套
說白一點,代碼塊嵌套就是在循環(huán)內(nèi)部加上另一個循環(huán)猖闪。
4.6何址、運(yùn)算符
表達(dá)式 | 描述 |
---|---|
x == y | x等于y |
x < y | x小于y |
x > y | x大于y |
x >= y | x大于或等于y |
x <= y | x小于或等于y |
x != y | x不等于y |
x is y | x和y是同一個對象 |
x is not y | x和y是不同的對象 |
x in y | x是容器y的成員 |
x not in y | x不是容器y的成員 |
4.7、斷言
用于判斷代碼是否有問題空郊,如果有則會讓程序立即停止涩盾。
工作原理類似于下面的的代碼
if not condition:
crash program
(了解即可离福,異常時會詳細(xì)說)
5、循環(huán)
簡單來說挪圾,就是滿足條件是重復(fù)執(zhí)行循環(huán)體內(nèi)的代碼忆嗜。循環(huán)有四要素:
- 循環(huán)的起點
- 循環(huán)的終點
- 循環(huán)要做的事
- 每次循環(huán)的變化
以上條件缺一不可濒憋,缺少一個就會變成死循環(huán)本姥。
5.1蛙婴、while循環(huán)
下面是一個while循環(huán)的示例
x = 1
while x <= 100:
print(x)
x += 1
循環(huán)的起點是x=1懒构,終點是x<=100,循環(huán)要做的事是打印x,變化是每次循環(huán)后x都會加一颠悬。
5.2澜沟、for循環(huán)
while循環(huán)非常靈活,可用在條件為真時反復(fù)執(zhí)行埠忘。但對序列執(zhí)行操作時for循環(huán)更為合適爽哎。
words = ['this','is','an','ex','parrot']
for word in words:
print(word)
這個for循環(huán)將words中的值依次存到word中雏胃,再打印出來。
有的時候需要一個范圍內(nèi)的數(shù)志鞍,這是需要使用range函數(shù)瞭亮,這個函數(shù)可以生成一個范圍內(nèi)的所有整數(shù)。
>>> range(0,10)
range(0, 10)
>>> list(range(0,10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
注意:range生成的數(shù)包含開頭的數(shù)但不包含結(jié)尾的數(shù)
使用for循環(huán)來打印1-100:
for num in range(0,101):
print(num)
5.3述雾、迭代字典
要遍歷字典的所有關(guān)鍵字街州,可像遍歷序列那樣使用普通的for語句
d = {'x':1,'y':2,'z':3}
for key in d:
print(key,'correspons to',d[key])
可使用d.items返回鍵值對,并在for循環(huán)中使用序列解包玻孟,把鍵和值分開唆缴。
d = {'x':1,'y':2,'z':3}
for key,value in d.items():
print(key,'corresponds to ',value)
5.4、一些迭代工具
5.4.1黍翎、并行迭代
同時迭代兩個序列
name = ['anne','beth','george','damon']
age = [12,45,32,102]
for i in range(len(name)):
print(name[i],'is',age[i],'years old')
還有一個可以“縫合”兩個序列的并行迭代工具——函數(shù)zip
它將兩個序列組合面徽,并返回一個由元組組成的序列。要查看內(nèi)容匣掸,可以使用list轉(zhuǎn)化為列表趟紊。
>>> list(zip(name,age))
[('anne', 12), ('beth', 45), ('george', 32), ('damon', 102)]
5.4.2、迭代時獲取索引
strings = 'abcdxxx'
for index, string in enumerate(strings):
if 'xxx' in string:
strings[index] = '[censored]'
5.4.3碰酝、反向迭代和排序后再迭代
使用函數(shù)reversed和sorted可以返回修改后的版本霎匈。
5.5、跳出循環(huán)
循環(huán)會在條件滿足是一直執(zhí)行送爸,但有的時候需要中斷循環(huán)铛嘱。
5.5.1暖释、break
break可以直接中斷整個循環(huán),一般是在循環(huán)內(nèi)嵌套if語句墨吓,當(dāng)滿足某一條件時跳出球匕。
from math import sqrt
for n in range(99,0,-1):
root = sqrt(n)
if root == int(root):
print(n)
break
上面的循環(huán)從100開始向下迭代。找到一個平方值后跳出循環(huán)
5.5.2帖烘、continue
contiune沒有break用的多亮曹,它結(jié)束當(dāng)前迭代,并跳到下一次迭代開頭秘症,這個只會結(jié)束當(dāng)前這一次循環(huán)照卦,并不會中斷縱膈循環(huán)。
5.6乡摹、列表推導(dǎo)
列表推導(dǎo)是一種從其他列表創(chuàng)建列表的方式窄瘟,類似于數(shù)學(xué)中的集合推導(dǎo),工作原理類似for循環(huán)
>>> [x * x for x in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
這個列表由range(10)內(nèi)每個值的平方組成趟卸。
小結(jié)
函數(shù) | 描述 |
---|---|
chr(n) | 返回一個字符串,其中只包含一個字符氏义,這個字符對應(yīng)于傳入的順序值n(0<=n<=256) |
eval(source[,globals[,locals]]) | 計算并返回字符串表示的表達(dá)式的結(jié)果 |
exec(source[, globals[,locals]]) | 將字符串作為語句執(zhí)行 |
enumerate(seq) | 生成可迭代的索引--值對 |
ord(c) | 接受一個只包含一個字符的字符串锄列,并返回這個字符的順序值 |
range([start, ] stop[, step]) | 創(chuàng)建一個由整數(shù)構(gòu)成的列表 |
reversed(seq) | 按相反的順序返回seq中的值,以便用于迭代 |
sorted(seq[,cmp] [,key] [,reverse]) | 返回一個列表惯悠,其中包含seq中的所有值且這些值是經(jīng)過排序的 |
xrange([start,] stop[, step]) | 創(chuàng)建一個用于迭代的xrange對象 |
zip(seq1, seq2,......) | 創(chuàng)建一個適合用于并行迭代的新序列 |