1.6【Python】第六章 控制語句

人工智能入門與實戰(zhàn)第一季:python基礎語法

控制語句包含條件控制語句和循環(huán)語句姆蘸,任何編程語言都是如此昌渤,用來控制代碼的執(zhí)行邏輯能岩,我們在第二章講比較運算符的時候就提到了條件語句沥阱。

前面我們學習了各種各樣的數(shù)據(jù)類型泣崩、各種運算更卒,那么本章的控制語句將結合他們從而形成我們想要的程序等孵。

條件語句

條件語句通過判斷條件是否成立,來決定執(zhí)行哪個分支蹂空,根據(jù)分支的多少可以分為單分支俯萌、雙分支果录、多分支。

單分支:

雙分支結構:

多分支結構:

單分支結構

if…
舉例:輸入一個數(shù)咐熙,判斷是否是偶數(shù)

num = int(input("請輸入一個整數(shù):"))
if num % 2 == 0:
    print("%d 是 偶數(shù)" % num)

雙分支結構

if…else…
舉例:輸入一個數(shù)弱恒,判斷是奇數(shù)還是偶數(shù)

num = int(input("請輸入一個整數(shù):"))
if num % 2 == 0:
    print("%d 是 偶數(shù)" % num)
else:
    print("%d 是 奇數(shù)" % num)

多分支結構

多分支結構在程序的開發(fā)過程中是非常常見的形式,因為多分支的場景非常多: if…elif…else…

多分支結構中只能有一個if和一個else糖声,但是可以有多個elif

舉例:使用第二章的作業(yè)舉例

'''
某小學考試評優(yōu)三個等級:
1斤彼、80分(含)以上:優(yōu)秀
2、60-79分:一般
3蘸泻、60以下:不及格
小明數(shù)學考試得了59分琉苇,打印出小明的評優(yōu)結果
'''
score = 59

if score > 80:
    print("優(yōu)秀")
elif score > 60:
    print("及格")
else:
    print("不及格")

條件語句的嵌套

條件語句的嵌套即在if或else的分支里再嵌入if…else…分支
舉例:模擬用戶注冊時用戶名和密碼校驗

name = input("請輸入用戶名:")
pwd = input("請輸入密碼:")

if len(name) == 0 or len(pwd) == 0:
    print("用戶名或密碼為空,請重新輸入")
else:
    # 以下為嵌套的條件語句
    if len(pwd) < 4:
        print("密碼位數(shù)太短")
    else:
        # 提交處理...
        print("提交成功")

注意python和其他編程語言在語法上不太一樣悦施,if和else之后別忘了加冒號:

使用條件語句的嵌套注意不易嵌套層數(shù)過多并扇,一個是影響代碼執(zhí)行效率,一個是降低了代碼的可讀性抡诞。

三元條件運算

格式如下:

條件為真時的值 if 條件表達式 else 條件為假時的值

三元條件運算可以理解成雙分支結構的簡寫穷蛹,在所有語言中幾乎都有類似的三元運算。

舉例:

score = 80
assessment = "優(yōu)秀" if score > 90 else "一般"
print(assessment)

輸出結果:
一般

條件語句通常與比較運算昼汗、邏輯運算配合使用肴熏,這些內容在第二章已講解。

本節(jié)對應源文件:se1_ch6_case_control.py

循環(huán)語句

循環(huán)語句是指在符合某個條件的情況下顷窒,重復執(zhí)行一個代碼段蛙吏。

循環(huán)語句執(zhí)行過程:表達式為True,則執(zhí)行循環(huán)體鞋吉,循環(huán)體執(zhí)行完之后再次判斷表達式鸦做,如果為True,則繼續(xù)執(zhí)行循環(huán)體谓着,否則結束循環(huán)泼诱。

Python中的循環(huán)語句有while和for

while循環(huán)

語法格式

while 條件表達式:
        代碼塊

舉例:求1-100的整數(shù)和

n = 1   # n代表從1到100的整數(shù)
s = 0   # s用來存儲所求的和
while n <= 100:    # 如果n小于等于100,就會繼續(xù)執(zhí)行循環(huán)語句
    s = s + n      # 每一次循環(huán)時加上一個整數(shù)
    n = n + 1      # 每次循環(huán)結束n變成下一個整數(shù)

print(s)

輸出結果:
5050

for循環(huán)

同樣以“求1-100的整數(shù)和“為例赊锚,我們看使用for循環(huán)如何處理:

s = 0
# 我們在前面講序列range時說range的一個使用場景是配合for循環(huán)
# 以下使用range會生成1-100個整數(shù)治筒,依次從range中取出1-100的數(shù),存儲到n中
for n in range(1, 101):  
    s += n  # 每次把n的值加起來改抡,存到s中
print(s)

輸出結果:
5050

循環(huán)嵌套

前面我們講到了條件語句的嵌套矢炼,循環(huán)也是可以嵌套的,循環(huán)嵌套就是在循環(huán)語句中再嵌套循環(huán)語句阿纤。

舉例:打印出某個年級所有班級的學生名稱

# 我們創(chuàng)建了一個二維列表,代表某個年級夷陋,二維列表中的每一個元素又是一個列表欠拾,代表一個班級
lists3 = [
    ['a', 'b', 'c', 'd'],
    ['e', 'f', 'g', 'h'],
    ['i', 'j', 'k', 'l']
]

for cls in lists3:
    for name in cls:
        print(name, end=',')    # 在一行輸出胰锌,以逗號隔開

輸出結果:
a,b,c,d,e,f,g,h,i,j,k,l,

以上的循環(huán)嵌套是以for循環(huán)舉例的,是一個基礎的案例藐窄,你可以嘗試一下稍帶點難度的循環(huán)嵌套资昧,比如打印我們熟悉的九九乘法表。

continue語句

continue語句會經(jīng)常出現(xiàn)在循環(huán)語句中荆忍,它的作用是結束本次循環(huán)格带,繼續(xù)下一次循環(huán),如果有循環(huán)嵌套的話刹枉,結束最近一層的本次循環(huán)叽唱,舉個例子你就懂了。

舉例:有一個1-100的列表微宝,希望打印出列表中所有的偶數(shù)棺亭。

# 使用range生成一個1-100的list
lists = list(range(1, 101))
print(lists)
for x in lists:
    if x % 2 != 0:   
        continue    

    print(x)

如果x不是偶數(shù)的話,就結束本次循環(huán)蟋软,繼續(xù)下一次循環(huán)镶摘,所以如果x不是偶數(shù)的話,后面的語句print(x)就不會執(zhí)行了岳守。

continue語句可以使用在for或while循環(huán)中凄敢,以上僅在for循環(huán)中舉例。

break語句

break語句放在循環(huán)語句中湿痢,表示結束整個循環(huán)涝缝,如果有循環(huán)嵌套的話,結束最近一層的整個循環(huán)蒙袍。

舉例:假設某個班級有n個學生俊卤,現(xiàn)在讓你找一下班級里有沒有叫judy的小同學(我們使用for循環(huán)舉例)

lists2 = ['jordan', 'kobe', 'james', 'yao','judy', 'bob', 'beckhanm']
for name in lists2:
    if name == 'judy':
        print('haha,i found it')   
        break
    print('not found害幅,go on')

輸出結果:
not found消恍,go on
not found,go on
not found以现,go on
not found狠怨,go on
haha,i found it

當?shù)?次找到后邑遏,執(zhí)行了break語句佣赖,結束了整個循環(huán)。

這里使用break語句很重要记盒,尤其數(shù)據(jù)量大的情況下憎蛤,避免執(zhí)行無效的循環(huán),造成資源的浪費。

當然break也有其他使用場景俩檬,這里就不舉例了萎胰。總之記住break語句是用來結束整個循環(huán)的棚辽。

break語句可以使用在for或while循環(huán)中,以上僅在for循環(huán)中舉例屈藐。

else語句

1榔组、while循環(huán)中使用else語句
格式如下:

while 條件表達式:
    條件表達式成立,執(zhí)行此代碼塊1
else:
    條件表達式不成立联逻,執(zhí)行此代碼塊2

舉例:把上述“求1-100的整數(shù)和”改造一下

n = 1   # n代表從1到100的整數(shù)
s = 0   # s用來存儲所求的和
while n <= 100:    
    s = s + n      
    n = n + 1      
else:
    print('完成求和計算搓扯,結果為:%d' % s)

輸出結果:
5050

2、for循環(huán)中使用else語句
格式如下:

for 變量 in 可迭代對象:
    循環(huán)體 
else:
    for循環(huán)結束遣妥,執(zhí)行此代碼塊

仍然以“求1-100的整數(shù)和”舉例

s = 0
for n in range(1, 101):
    s += n  # 每次把n的值加起來擅编,存到s中
else:
    print('完成求和計算,結果為:%d' % s)

輸出結果:
5050

for循環(huán)與序列

這部分已經(jīng)不屬于新的知識點了箫踩,算是總結吧爱态。

for循環(huán)與list的使用在上述循壞嵌套、continue語句境钟、break語句中已經(jīng)講解锦担。

for循環(huán)與range的使用在上述使用while循環(huán)求和、使用for循環(huán)求和已經(jīng)講解慨削。

for循環(huán)與tuple的使用洞渔,這個請參考for循環(huán)與list、range的使用缚态,
自己嘗試來寫個小例子磁椒。

所以我們可以發(fā)現(xiàn)for循環(huán)可以與任何可迭代對象配合使用,即:

for 變量 in 可迭代對象:
    循環(huán)體

啥是可迭代對象玫芦?list浆熔、tuple、range都是可迭代對象桥帆。

for循環(huán)與字典医增、集合

for循環(huán)與字典舉例:

student = {'name':'tom', 'age':18, 'sex':'male'}

# 輸出字典所有的鍵
for key in student.keys():
    print('key:%s' % key)

# 輸出字典所有的值
for value in student.values():
    print('value:%s' % value)

# 輸出字典鍵和值
for key, value in student.items():
    print('key:%s,value:%s' % (key, value))

輸出結果:
key:name
key:age
key:sex
value:tom
value:18
value:male
key:name,value:tom
key:age,value:18
key:sex,value:male

for循環(huán)與集合舉例:

set1 = {1,2,3,4,5}
for x in set1:
    print(x, end=' ') 
# 使用end=' ' 表示在同一行輸出,以空格隔開

輸出結果:
1 2 3 4 5

推導式生成序列老虫、字典叶骨、集合

簡單來說就是通過已有的可迭代對象(比如list、range祈匙、tuple)忽刽,來生成新的序列、字典、集合缔恳,本質上是利用了for循環(huán)創(chuàng)建序列宝剖、字典洁闰、集合的簡寫形式歉甚。

列表推導式

我們在前面講解創(chuàng)建列表list的時候,其中一種創(chuàng)建方式就是通過列表推導式創(chuàng)建扑眉,不知你還是否記得纸泄?

語法格式:

[表達式 for 變量 in 可迭代對象] 
[表達式 for 變量 in 可迭代對象 if 條件判斷]

這里偷個懶,我把前面的例子拿過來:

list3 = [1,2,3,4]

#通過list3生成一個新的列表list4 
list4 = [x for x in list3]

#把list3中的數(shù)乘以2再存到list5中
list5 = [x*2 for x in list3]
print(list4)
print(list5)

#思路擴展:找出list3中的偶數(shù)
list5_even = [x for x in list3 if x % 2 == 0]
print(list5_even)

輸出結果:
[1, 2, 3, 4]
[2, 4, 6, 8]
[2, 4]

字典推導式

語法格式:

{key_expression : value_expression for 表達式 in 可迭代對象} 

通過推導式創(chuàng)建字典腰素,我們把字典那一節(jié)的例子拿過來改造一下:

keys = ['name', 'age', 'sex']
values = ['jerry', 18, 'female']
student = {k : v for k, v in zip(keys, values)}
print(student)

輸出結果:
{'name': 'jerry', 'age': 18, 'sex': 'female'}

zip(keys, values) 的作用:
把列表keys聘裁、values打包成一個元素為元組的列表:[('name', 'jerry'), ('age', 18), ('sex', 'female')]

集合推導式

語法格式:

[表達式 for 變量 in 可迭代對象] 
[表達式 for 變量 in 可迭代對象 if 條件判斷]

舉例:把集合中數(shù)平方,生成新的集合

sets = {1,2,3,4,5,6}
sets_square = {x**2 for x in sets}
print(sets_square)

輸出結果:
{1, 4, 36, 9, 16, 25}

推導式總結:不管是列表推導式弓千、字典推導式、集合推導式均大同小異:
1洋访、要有for循環(huán)
2镣陕、for循環(huán)中要使用可迭代對象,比如列表姻政、元組呆抑、range、集合

本章對應的源文件:
se1_ch6_case_control.py
se1_ch6_circulation.py

本章作業(yè)

1汁展、創(chuàng)建一個列表list1鹊碍,list1中存儲1-100的整數(shù),然后使用列表推導式找出list1中的奇數(shù)食绿,存儲到list2中侈咕。
2、使用循環(huán)語句打印出由星號*組成的一個等腰三角形器紧。

本章總結

本章講的控制語句可以理解成程序的骨架耀销,然后把我們前面學習到的數(shù)據(jù)類型、運算填充進去就成了真正的程序品洛。我們記住幾種常用的控制語句树姨,一個是條件語句,一個是循環(huán)語句桥状。然后再學會這兩種控制語句與數(shù)據(jù)類型的結合使用帽揪,比如for循環(huán)與range、列表辅斟、字典等等的結合使用转晰。

我是豬弟爸爸,這里我會持續(xù)更新人工智能自學內容,有問題請關注我的公眾號zhudipapa查邢,我會統(tǒng)一在公眾號下方回復蔗崎,同時你也可以第一時間收到我的推文,我們下節(jié)見扰藕。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末缓苛,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子邓深,更是在濱河造成了極大的恐慌未桥,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芥备,死亡現(xiàn)場離奇詭異冬耿,居然都是意外死亡,警方通過查閱死者的電腦和手機萌壳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門亦镶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人袱瓮,你說我怎么就攤上這事缤骨。” “怎么了懂讯?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵荷憋,是天一觀的道長。 經(jīng)常有香客問我褐望,道長勒庄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任瘫里,我火速辦了婚禮实蔽,結果婚禮上,老公的妹妹穿的比我還像新娘谨读。我一直安慰自己局装,他們只是感情好,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布劳殖。 她就那樣靜靜地躺著铐尚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪哆姻。 梳的紋絲不亂的頭發(fā)上宣增,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機與錄音矛缨,去河邊找鬼爹脾。 笑死帖旨,一個胖子當著我的面吹牛,可吹牛的內容都是我干的灵妨。 我是一名探鬼主播解阅,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼泌霍!你這毒婦竟也來了货抄?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤烹吵,失蹤者是張志新(化名)和其女友劉穎碉熄,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肋拔,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年呀酸,在試婚紗的時候發(fā)現(xiàn)自己被綠了凉蜂。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡性誉,死狀恐怖窿吩,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情错览,我是刑警寧澤纫雁,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站倾哺,受9級特大地震影響轧邪,放射性物質發(fā)生泄漏。R本人自食惡果不足惜羞海,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一忌愚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧却邓,春花似錦硕糊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至撬腾,卻和暖如春螟蝙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背时鸵。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工胶逢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留厅瞎,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓初坠,卻偏偏與公主長得像和簸,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子碟刺,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內容