python學(xué)習(xí)筆記(五)條件计螺、循環(huán)及其他語句

個人筆記陈轿,僅供參考

五、條件、循環(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)有四要素:

  1. 循環(huán)的起點
  2. 循環(huán)的終點
  3. 循環(huán)要做的事
  4. 每次循環(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)建一個適合用于并行迭代的新序列
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末邻邮,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子克婶,更是在濱河造成了極大的恐慌筒严,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件情萤,死亡現(xiàn)場離奇詭異鸭蛙,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)筋岛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門娶视,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人睁宰,你說我怎么就攤上這事肪获。” “怎么了柒傻?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵孝赫,是天一觀的道長。 經(jīng)常有香客問我红符,道長青柄,這世上最難降的妖魔是什么伐债? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮刹前,結(jié)果婚禮上泳赋,老公的妹妹穿的比我還像新娘。我一直安慰自己喇喉,他們只是感情好祖今,可當(dāng)我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拣技,像睡著了一般千诬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上膏斤,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天徐绑,我揣著相機(jī)與錄音,去河邊找鬼莫辨。 笑死傲茄,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的沮榜。 我是一名探鬼主播盘榨,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蟆融!你這毒婦竟也來了草巡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤型酥,失蹤者是張志新(化名)和其女友劉穎山憨,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體弥喉,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡郁竟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了档桃。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片枪孩。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖藻肄,靈堂內(nèi)的尸體忽然破棺而出蔑舞,到底是詐尸還是另有隱情,我是刑警寧澤嘹屯,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布攻询,位于F島的核電站,受9級特大地震影響州弟,放射性物質(zhì)發(fā)生泄漏钧栖。R本人自食惡果不足惜低零,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拯杠。 院中可真熱鬧掏婶,春花似錦、人聲如沸潭陪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽依溯。三九已至老厌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間黎炉,已是汗流浹背枝秤。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留慷嗜,地道東北人淀弹。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像庆械,于是被迫代替她去往敵國和親垦页。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容