人工智能入門與實戰(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é)見扰藕。