-
Python之for循環
for循環在Python語言的流程控制中是非常重要的,在編程中有很多場景需要使用到for循環。舉個例子,當我們需要把字符串中的每一個字符打印出來的時候,我們怎么實現呢?
我們當然可以使用之前學習的指定位置的方式讓每個字符打印出來。s = 'ABCD' print(s[0]) print(s[1]) print(s[2]) print(s[3])
但是,這是字符串s比較短的情況下可以實現的,當s擁有成千上萬個字符的時候,難道我們要為此書寫上萬行代碼嗎?這個時候for循環就可以派上用場了。
s = 'ABCD' for ch in s: ? ? print(ch) # 注意縮進
在上述代碼中,ch是在for循環中定義的,意思是把字符串s中的每一個元素依次賦值給ch,然后再把ch打印出來,直到打印出字符串s的最后一個字符為止。
任務
班里考試后,老師要統計幾位同學的平均成績,已知5位同學的成績用list表示如下:
L = [75, 92, 59, 68, 99]
請利用for循環計算出平均成績。查看全部 -
Python之if-elif-else語句
在100分的考試當中,分數達到或超過90分是頂尖的,達到或超過80分是優秀的,如果想對達到或者超過60分的學生進行不同的分類,使用if-else進行判斷,代碼如下:
score = 59 if score < 60: ? ? print('抱歉,考試不及格') else: ? ? if score >= 90: ? ? ? ? print('恭喜你,拿到卓越的成績') ? ? else: ? ? ? ? if score >= 80: ? ? ? ? ? ? print('恭喜你,拿到優秀的成績') ? ? ? ? else: ? ? ? ? ? ? print('恭喜你,考試及格')
在這個程序里,我們做了多次分類,第一次,我們把低于60分和大于等于60分的分開,第二次,我們把大于等于90分和小于90分的分開,第三次,我們把大于等于80分和小于80分的分開。
這樣寫,我們得到一個兩層嵌套的if-else語句,這樣的實現可以滿足我們的要求,但是如果繼續增加條件,比如繼續判斷高于70分和低于70分的話,那么這個代碼將會縮進越來越多,代碼邏輯看起來也不夠清晰。
我們可以使用if-elif-else語句來簡化以上的邏輯。其中elif就是else if的意思。score = 59 if score < 60: ? ? print('抱歉,考試不及格') elif score >= 90: ? ? print('恭喜你,拿到卓越的成績') elif score >= 80: ? ? print('恭喜你,拿到優秀的成績') else: ? ? print('恭喜你,考試及格')
這樣,我們就可以寫出代碼結構非常清晰的一系列條件判斷了。
特別注意: 這一系列條件判斷會從上到下依次判斷,如果某個判斷為 True,執行完對應的代碼塊,后面的條件判斷就直接忽略,不再執行了。
請思考以下代碼將會輸出什么?為什么不輸出恭喜你,拿到卓越的成績。score = 95 if score < 60: ? ? print('抱歉,考試不及格') elif score >= 80: ? ? print('恭喜你,拿到優秀的成績') elif score >= 90: ? ? print('恭喜你,拿到卓越的成績') else: ? ? print('恭喜你,考試及格')
任務
如果年齡達到18歲,則是成年人,如果年齡6歲到18歲,則是青少年,如果年齡3歲到6歲,則是小孩子,如果年齡在3歲以下,則是嬰兒,請使用if-elif-else語句實現邏輯,如果成年,輸出'adult',如果是青少年,輸出'teenager',如果是小孩子,輸出kid,如果是嬰兒,輸出baby。
查看全部 -
Python之if-else語句
使用if判斷,可以在當if條件為True時,執行if的子邏輯分支,但有時候,也想在if條件不為True時,執行別的子邏輯分支。
比如:在上一節課的例子中,我希望當分數小于60分時輸出,抱歉,考試不及格,否則,輸出恭喜你,考試及格,這個時候可以使用if-else語句。score = 59 if score < 60: ? ? print('抱歉,考試不及格') else: ? ? print('恭喜你,考試及格')
這個時候,程序就會根據score的值,走不同的子邏輯分支,同學可以改變score的值試一試。
在這里,同樣需要注意兩個地方,第一個是冒號:,在else中,同樣需要冒號;其次是縮進,在else的子邏輯分支,同樣需要縮進。任務
如果年齡達到18歲,則是成年人,請使用if-else語句實現以下邏輯,如果成年,輸出'adult',否則,輸出'teenager'。
查看全部 -
Python之if語句
計算機之所以能做很多自動化的任務,因為它可以自己做條件判斷,通過條件判斷,選擇做什么樣的邏輯(當然,邏輯是需要我們提前寫好的),我們稱之為條件分支判斷。
舉個例子,在100分試卷的考試中,小于60分我們認為是不及格的,因此,我們可以使用程序自動判斷考試是否及格。score = 59 if score < 60: ? ? print('抱歉,考試不及格') # ==> 抱歉,考試不及格
這里,因為score = 59 < 60,所以if的判斷是True,因此就會執行print('抱歉,考試不及格')。
這里有幾個需要注意的地方:可以看到print('抱歉,考試不及格')這行代碼明顯比上一行代碼縮進了,這是因為這行代碼是if判斷的一個子分支,因此需要縮進,在Python規范中,一般使用4個空格作為縮進
在if語句的最后,有一個冒號:,這是條件分支判斷的格式,在最后加入冒號:,表示接下來是分支代碼塊
任務
如果年齡達到18歲,則是成年人,咚咚嗆的年齡是19歲,請使用if語句判斷咚咚嗆是否成年,如果成年,輸出'adult',并把咚咚嗆的年齡打印出來。
查看全部 -
Python的字符串切片
字符串由一個個字符組成,每一個字符都有一個唯一的位置。比如字符串'ABC',第一個字符是A,第二個字符是B,第三個字符是C。
因此我們可以使用位置的方式取出字符串中特定位置的字符,按照位置取字符串的方式使用中括號[]訪問,這個時候可以把字符串看作是一個列表(一種新的數據類型,在后面會繼續學習),不過需要注意的是,在程序的世界中,計數是從0開始的,使用0來表示第一個。s = 'ABC' a = s[0] # 第一個 b = s[1] # 第二個 c = s[2] # 第三個 print(a) # ==> A print(b) # ==> B print(c) # ==> C
有時候,我們會想獲取字符串的一部分(子串),這個時候我們采取切片的方式獲取,切片需要在中括號[]中填入兩個數字,中間用冒號分開,表示子串的開始位置和結束位置,并且這是半閉半開區間,不包括最后的位置。
ab = s[0:2] # 取字符串s中的第一個字符到第三個字符,不包括第三個字符 print(ab) # ==> AB
我們定義一個更長的字符串,了解切片更多的細節。
s = 'ABCDEFGHIJK' abcd = s[0:4] # 取字符串s中的第一個字符到第五個字符,不包括第五個字符 print(abcd) # ==> ABCD cdef = s[2:6] # 取字符串s中的第三個字符到第七個字符,不包括第七個字符 print(cdef) # ==> CDEF
任務
請從字符串'AABCDEFGHHIJ'中,使用切片的方式取出'ABCDEFGH'。
查看全部 -
Python的字符串切片
字符串由一個個字符組成,每一個字符都有一個唯一的位置。比如字符串'ABC',第一個字符是A,第二個字符是B,第三個字符是C。
因此我們可以使用位置的方式取出字符串中特定位置的字符,按照位置取字符串的方式使用中括號[]訪問,這個時候可以把字符串看作是一個列表(一種新的數據類型,在后面會繼續學習),不過需要注意的是,在程序的世界中,計數是從0開始的,使用0來表示第一個。s = 'ABC' a = s[0] # 第一個 b = s[1] # 第二個 c = s[2] # 第三個 print(a) # ==> A print(b) # ==> B print(c) # ==> C
有時候,我們會想獲取字符串的一部分(子串),這個時候我們采取切片的方式獲取,切片需要在中括號[]中填入兩個數字,中間用冒號分開,表示子串的開始位置和結束位置,并且這是半閉半開區間,不包括最后的位置。
ab = s[0:2] # 取字符串s中的第一個字符到第三個字符,不包括第三個字符 print(ab) # ==> AB
我們定義一個更長的字符串,了解切片更多的細節。
s = 'ABCDEFGHIJK' abcd = s[0:4] # 取字符串s中的第一個字符到第五個字符,不包括第五個字符 print(abcd) # ==> ABCD cdef = s[2:6] # 取字符串s中的第三個字符到第七個字符,不包括第七個字符 print(cdef) # ==> CDEF
任務
請從字符串'AABCDEFGHHIJ'中,使用切片的方式取出'ABCDEFGH'。
查看全部 -
Python的字符串編碼
在python2中,字符串的編碼問題是使用python2必經歷的門檻,所幸到了python3,python3從編程語言的層面就減少了很多編碼的問題,但是學習字符串編碼還是很有必要的。
為什么有編碼問題
因為計算機只能處理數字,如果要處理文本,就必須先把文本轉換為數字才能處理。最早的計算機在設計時采用8個比特(bit)作為一個字節(byte),所以,一個字節能表示的最大的整數就是255(二進制11111111=十進制255),0 - 255被用來表示大小寫英文字母、數字和一些符號,這種編碼方式被稱為ASCII編碼,比如大寫字母 A 的編碼是65,小寫字母 z 的編碼是122。
如果要表示中文,顯然一個字節是不夠的,至少需要兩個字節,而且還不能和ASCII編碼沖突,所以,中國制定了GB2312編碼,用來把中文編進去。
類似的,日文和韓文等其他語言也有這個問題。為了統一所有文字的編碼,Unicode應運而生。Unicode把所有語言都統一到一套編碼里,這樣就不會再有亂碼問題了。
Unicode通常用兩個字節表示一個字符,原有的英文編碼從單字節變成雙字節,只需要把高字節全部填為0就可以。python3的編碼
在python3中,默認使用UTF-8 Unicode來進行編碼,因此我們可以在python中輸入任意形式的Unicode字符串,都不會遇到像python2中遇到的問題(在python2中,需要顯式指明該字符串是Unicode字符串),如果沒有了解過python2,則完全可以忽略這一點,python3提供了更加簡單易懂的編碼方式。
s1 = '這是中文字符串' s2 = 'this is an English string' print(s1) print(s2)
在python3中,中文字符串和英文字符串無異。
任務
請定義并打印中英文混合的字符串 "這是一句中英文混合的Python字符串:Hello World!"
查看全部 -
Python的字符串format
字符串是Python程序重要的數據類型,到目前為止,我們輸出的字符串的內容都是固定的,但有時候通過字符串輸出的內容不是固定的,這個時候需要使用format來處理字符串,輸出不固定的內容。
字符串format由兩個部分組成,字符串模板和模板數據內容組成,通過大括號{},就可以把模板數據內容嵌到字符串模板對應的位置。# 字符串模板 template = 'Hello {}' # 模板數據內容 world = 'World' result = template.format(world) print(result) # ==> Hello World
如果模板中{}比較多,則容易錯亂,那么在format的時候也可以指定模板數據內容的順序。
# 指定順序 template = 'Hello {0}, Hello {1}, Hello {2}, Hello {3}.' result = template.format('World', 'China', 'Beijing', 'imooc') print(result) # ==> Hello World, Hello China, Hello Beijing, Hello imooc. # 調整順序 template = 'Hello {3}, Hello {2}, Hello {1}, Hello {0}.' result = template.format('World', 'China', 'Beijing', 'imooc') print(result) # ==> Hello imooc, Hello Beijing, Hello China, Hello World.
除了使用順序,還可以指定對應的名字,使得在format過程更加清晰。
# 指定{}的名字w,c,b,i template = 'Hello {w}, Hello {c}, Hello , Hello {i}.' world = 'World' china = 'China' beijing = 'Beijing' imooc = 'imooc' # 指定名字對應的模板數據內容 result = template.format(w = world, c = china, b = beijing, i = imooc) print(result) # ==> Hello World, Hello China, Hello Beijing, Hello imooc.
任務
請使用兩種format的方式打印字符串Life is short, you need Python。
# Enter a code
# coding=utf-8
# 記憶方法:模具,內容,合并了的模具
template = '林 {}'
# 模具
a = '書豪'
# 實體
result = template.format(a)
print(result)
# result由兩個組成,字符串模板,模板數據內容(合并了的模板)
# format括號里邊需要引號,除非上面已經定義
print('指定順序')
template = 'hello {0},hello {1},hello {2},hello {3}'
result = template.format('world', 'china', 'beijing', 'imooc')
print(result)
# template='林[0],林[1],林[2],林[3].'
# result=template.format('書豪','國豪','俊杰','妙可')
# print(result)
print('指定順序中變量設置為中文運行不了,什么原因呢')
# 發現原因了,原來是筆記本沒有{}符號,換其他鍵盤可以打出
template = '林 {1},林 {2},林 {3},林 {0}.'
result = template.format('書豪', '國豪', '俊杰', '妙可')
print(result)
print('調整順序')
template = 'hello {0},hello {1},hello {2},hello {3}.'
# template后面加不加點都可以
# 元素之間逗號后有沒有空格都可以,一般建議有空格
result = template.format('beijing', 'shanghai', 'guangdong', 'hunan')
print(result)
# 1.等號兩邊需要空格
# 2.hello和數字之間需要空格
# 3.beijing的逗號后面需要空格
# 4.result變量前面需要空格
# 5.代碼結束需要下一空行
# 6.#的后面需要空格
print('指定對應的名字')
template = 'hello {m}, hello {w},hello {h}, hello {y}.'
meixi = 'meixi'
wujiayu = 'wujiayu'
huangshang = 'huangshang'
yazi = 'yazi'
result = template.format(m=meixi, w=wujiayu, h=huangshang, y=yazi)
# 這行的等號兩邊不需要空格
print(result)
print('指定對應名字 測試')
template = '3 {w}, 0 {c}, 2 , 1 {i}.'
c = 'www'
w = 'ccc'
b = 'bbb'
i = 'iii'
result = template.format(b=c, c=w, w=i, i=w)
print(result)
#template規定了3021順序,{c}對應c=w再對應w = 'ccc',也就是跳了兩次
# result后面是合體版本
# 模板數據內容有三條:
# 變量
# (如果有指定名字,則這行需要指定)
# result
# print
print('任務')
print('第一種方式,普通方式')
template = 'life is short,{}.'
a = 'you nide python'
result = template.format(a)
print(result)
print('第二種方式,指定順序')
template = 'life {0} short,{1} nide {2}.'
result = template.format('is', 'you', 'python')
print(result)
print('第三種方式,調整順序')
template = 'life {2} short,{0} nide {1}.'
result = template.format('you', 'python', 'is')
print(result)
print('第四種方法,指定名字')
template = 'life {i} short,{y} nide {p}.'
i = 'is'
y = 'you'
p = 'python'
result = template.format(i=i, y=y, p=p)
print(result)
print('第五種方法,自創最簡')
template = 'life {i} short,{y} nide {p}.'
result = template.format(i='is', y='you', p='python')
print(result)
查看全部 -
Python中raw字符串與多行字符串
如果一個字符串包含很多需要轉義的字符,對每一個字符都進行轉義會很麻煩。為了避免這種情況,我們可以在字符串前面加個前綴r,表示這是一個?raw?字符串,里面的字符就不需要轉義了。例如:
r'\(~_~)/ \(~_~)/'
但是r'...'表示法不能表示多行字符串,也不能表示包含'和?"的字符串。
如果要表示多行字符串,可以用'''...'''表示:
'''Line 1 Line 2 Line 3'''
上面這個字符串的表示方法和下面的是完全一樣的:
'Line 1\nLine 2\nLine 3'
還可以在多行字符串前面添加r,把這個多行字符串也變成一個raw字符串:
r'''Python is created by "Guido". It is free and easy to learn. Let's start learn Python in imooc!'''
任務
請把下面的字符串用r'''...'''的形式改寫,并用print打印出來:
'\"To be, or not to be\": that is the question.\nWhether it\'s nobler in the mind to suffer.'
查看全部 -
Python的字符串
前面我們講解了什么是字符串。字符串可以用' '或者" "括起來表示。
如果字符串本身包含'怎么辦?比如我們要表示字符串?I'm OK?,這時,可以用" "括起來表示:
"I'm OK"
類似的,如果字符串包含",我們就可以用' '括起來表示:
'Learn "Python" in imooc'
但是,如果字符串既包含'又包含"怎么辦?
這個時候,就需要對字符串中的某些特殊字符進行“轉義”,Python字符串用\進行轉義。
要表示字符串Bob said "I'm OK"
由于'和"會引起歧義,因此,我們在它前面插入一個\表示這是一個普通字符,不代表字符串的起始,因此,這個字符串又可以表示為'Bob said \"I\'m OK\".'
注意:轉義字符?\不計入字符串的內容中。
常用的轉義字符還有:
\n表示換行
\t?表示一個制表符
\\表示?\?字符本身任務
請在Python中輸出以下字符串special string: ', ", \, \\, \n, \t
查看全部 -
Python的布爾類型
前面我們了解到,布爾類型是Python的基礎數據類型,布爾類型只有True和False兩種值,本節課我們學習布爾類型的集中運算。
與運算
只有兩個布爾值都為 True 時,計算結果才為 True。
True and True # ==> True True and False # ==> False False and True # ==> False False and False # ==> False
或運算
只要有一個布爾值為 True,計算結果就是 True。
True or True # ==> True True or False # ==> True False or True # ==> True False or False # ==> False
非運算
把True變為False,或者把False變為True:
not True # ==> False not False # ==> True
這些運算有什么用呢?計算機程序是由無數的邏輯分支組成的,通過布爾運算,可以在計算機中實現條件判斷,根據計算結果為True或者False,計算機可以自動執行不同的后續代碼,因此學習布爾運算也是非常有必要的。
在Python中,布爾類型還可以與其他數據類型(字符串,數字等)做 and、or和not運算,請看下面的代碼:
a = True print(a and 0 or 99) # ==> 99
得到的計算結果不是布爾類型,而是數字99,這是為什么呢?
因為Python把0、空字符串和None看成False,其他數值和非空字符串都看成True,所以:
True and 0計算結果是0?
繼續計算0 or 99計算結果是 99?
因此,結果是99。
需要注意的是,not計算的優先級是高于and和or的。True and not False # ==> True
在上述布爾計算中,先計算not False = True,然后再計算True and True,因此得到True的結果。
短路計算
在計算a and b時,如果 a 是 False,則根據與運算法則,整個結果必定為 False,因此返回 a;如果 a 是 True,則整個計算結果必定取決與 b,因此返回 b。
在計算a or b時,如果 a 是 True,則根據或運算法則,整個計算結果必定為 True,因此返回 a;如果 a 是 False,則整個計算結果必定取決于 b,因此返回 b。
所以Python解釋器在做布爾運算時,只要能提前確定計算結果,它就不會往后算了,直接返回結果。
查看全部 -
Python的整數與浮點數
在Python中,整數和浮點數雖然屬于不同的數值類型,但是在運算上是可以一起運算的,這從生活經驗出發,也是可以理解的。
四則運算
整數、浮點數可以直接進行四則運算。
# 加法 num1 = 10 num2 = 0.5 result = num1 + num2 print(result) # ==> 10.5 # 減法 result = num1 - num2 print(result) # ==> 9.5 # 乘法 result = num1 * num2 print(result) # ==> 5.0 # 除法 result = num1 / num2 print(result) # ==>20.0
從上面可以發現一個規律,整數和浮點數運算后 ,得到的結果不管小數點后是否有值,結果都變成浮點數了,這是合理的,浮點數可以表達整數的結果,但是整數不能表達浮點數的結果。
注意:在Python2使用除法可能和Python3得到不一樣的結果# python2 num1 = 10 num2 = 3 result = num1 / num2 print(result) # ==> 3 # python3 num1 = 10 num2 = 3 result = num1 / num2 print(result) # ==> 3.3333333333333335
可以看到在python2,得到的是一個整數的結果,這是因為除數和被除數都是整數時,得到的結果也默認保存為整數了,這是非常不科學的,因此在python3,改進了這一點。
取模運算
Python數字支持取模運算,使用百分號%表示取模。
print(3 % 2) # ==> 1 print(33 % 10) # ==> 3 print(99 % 30) # ==> 9
恰當使用取模運算,可以判斷一個數是否為偶數,當一個數對2取模結果為0時,則這個數為偶數,否則為奇數。
print(3 % 2) # ==> 1 因此3為奇數 print(33 % 2) # ==> 1 因此33為奇數 print(100 % 2) # ==> 0 因此100為偶數
地板除
Python除了普通除法以外,還有一個特殊的除法被稱為地板除,對于地板除,得到的結果會忽略純小數的部分,得到整數的部分,地板除使用//進行。
10//4 # ==> 2 10//2.5 # ==> 4.0 10//3 # ==> 3
小數點位數
使用Python計算小數的時候,經常需要保留小數點后若干位,可以使用round()函數來處理,這里先了解round的調用方式,使用兩個參數,第一個是需要保留小數點位數的數值,第二個是保留的位數。
num = 10 / 3 print(num) # ==> 3.3333333333333335 # 使用round保留兩位小數 round(num, 2) # ==> 3.33
任務
一個長方形的長為3.14cm,寬為1.57cm,請計算這個長方形的面積,保留小數點后兩位。
length = 3.14
width = 1.57
result = round(length * width, 2)
print(result)查看全部 -
Python定義變量的方法
什么是變量
在Python中,變量的概念基本上和初中代數的方程變量是一致的。例如,對于方程式 y=x*x ,x就是變量。當x=2時,計算結果是4,當x=5時,計算結果是25。
合法的變量名
只是在計算機程序中,變量不僅可以是數字,還可以是任意數據類型(字符串、布爾值、空值、字典等)。在Python中,定義一個變量需要遵循一定的約束,否則,Python可能識別不出它是一個變量。
變量名由大小寫英文字母、數字和下劃線_組成
變量不能用數字開頭
變量盡量不要和Python關鍵字重合(比如前面學習過的:and、or、not,否則可能導致Python原有關鍵字發揮不出作用)
以下這些變量的定義都是合法的。
num, count, _none, min_value
他們都滿足上面的三個條件。
以下這些變量的定義都是不合法的。
1num, 666, 1_cd, and
定義變量
定義變量的方式很簡單,通過變量名?=?數據,即可定義一個變量。
舉個例子:a = 1
在這個例子里面,a就是變量,它的值是一個整數1。
hello = 'Hello'
在這個例子里面,hello就是變量,它的值是一個字符串'Hello'。
在Python里面,一個變量可以先后存儲多種不同類型的數據。a = 1 # 這個時候a存儲的是整數類型 print(a) a = 'ABC' # 這個時候a存儲的是字符串類型 print(a)
這是Python這類語言特有的特性,我們稱之為動態語言,與之對應的是靜態語言,Python、Javascript等等都是動態語言,Java、C、C++等等屬于靜態語言。
任務
前面我們寫了第一個Python程序,向屏幕打印了'Hello World',請通過定義多個變量的方式,把相同的字符串打印出來。
查看全部 -
Python基礎數據類型
計算機顧名思義就是可以做數學計算的機器,因此,計算機程序理所當然地可以處理各種數值。但是,計算機能處理的遠不止數值,還可以處理文本、圖形、音頻、視頻、網頁等各種各樣的數據,不同的數據,需要定義不同的數據類型。
學習編程,認識不同編程中的數據類型是必要的,在Python中,能夠直接處理的數據類型有以下幾種:
整數
整數和我們生活中定義的整數是一個概念,例如:1,2,3,10,100,1000,-1000?等等,都是整數,Python可以處理任意大小的整數。
對于整數,除了生活中常用的十進制以外,計算機由于使用二進制,所以,在計算機中也常用二進制或者十六進制表示整數。相比十進制數,在Python中使用以下方式表示二進制數和十六進制數。
二進制數只使用數字0、1表示,在Python中,二進制整數使用前綴0b表示,比如:0b0110,0b1100。
十六進制數除了0~9十個數字以外,還使用a、b、c、d、e、f,在Python中,十六進制使用前綴0x,比如:0x12ef,0xde2431af。
十進制數、二進制數和十六進制數之間是可以相互轉換的,如果感興趣的同學,可以學習《編程必備基礎知識》了解更多轉換的細節。
浮點數
浮點數對應我們生活的是小數,例如:0.1,0.5,?12.34,?3.1415926等,都是浮點數。
為什么小數在計算機領域被稱為浮點數呢?這是因為按照科學記數法表示時,一個浮點數的小數點位置是可變的(浮動的),比如,1.23x10^9和12.3x10^8是相等的,因此稱為浮點數。
浮點數可以用數學寫法,如1.23,3.14,-9.01。但是對于很大或很小的浮點數,就必須用科學計數法表示,在Python中,把10用e替代,比如:1.23x10^9就是1.23e9,或者12.3e8,0.000012可以寫成1.2e-5,同學可以自行舉出更多的例子。
這里有必要提醒一點就是,整數和浮點數在計算機內部存儲的方式是不同的,整數運算永遠是精確的,而浮點數運算則可能會有四舍五入的誤差,如何檢驗,可以在Python終端中輸入以下內容0.1 + 0.2,看看可以得到你期望的結果0.3嗎?真實結果可能讓你失望了。
同樣的,這里涉及的原理同學也可以學習上面提到的課程進行進一步原理層面的理解。字符串
字符串對應生活中的就是非數字類型的內容,比如一個句子,一段話,在Python中就是字符串,在Python中,字符串是以''或""括起來的任意文本,比如'abc',"xyz"等等。請注意,''或""本身只是一種表示方式,不是字符串的一部分,因此,字符串'abc'只有a,b,c這3個字符。
比如之前練習過的第一個Python程序:print('Hello World'),其中的Hello World就是字符串。
布爾值
布爾值對應于生活中的就是對和錯,在計算機的世界里,大部分判斷都是非錯則對的,布爾值和布爾代數的表示完全一致,一個布爾值只有True、False兩種值,要么是True,要么是False,在Python中,可以直接用True、False表示布爾值(請注意大小寫,不需要使用字符串符號括起來),也可以通過布爾運算計算出來。
布爾值可以用and、or和not運算(注意and,or,not都是Python語言本身的關鍵字)。
and運算是與運算,只有所有都為 True,and運算結果才是 True。
or運算是或運算,只要其中有一個為 True,or 運算結果就是 True。
not運算是非運算,它是一個單目運算符,把 True 變成 False,False 變成 True。
空值
空值是Python里一個特殊的值,用None表示。
注意,None和0是不一樣的,None不能理解為0,因為0是有意義的,比如我有0個蘋果表示我沒有蘋果,0表達的是數值0的意思,而不能表示為我有None個蘋果,None是一個特殊的空值。
此外,Python還提供了列表、字典等多種數據類型,還允許創建自定義數據類型,我們后面會展開介紹。
任務
請判斷以下數據分別屬于什么數據類型:
3.1415926 'Learn Python in imooc.' 100 0b1101
查看全部 -
Python之if-elif-else語句
在100分的考試當中,分數達到或超過90分是頂尖的,達到或超過80分是優秀的,如果想對達到或者超過60分的學生進行不同的分類,使用if-else進行判斷,代碼如下:
score = 59 if score < 60: ? ? print('抱歉,考試不及格') else: ? ? if score >= 90: ? ? ? ? print('恭喜你,拿到卓越的成績') ? ? else: ? ? ? ? if score >= 80: ? ? ? ? ? ? print('恭喜你,拿到優秀的成績') ? ? ? ? else: ? ? ? ? ? ? print('恭喜你,考試及格')
在這個程序里,我們做了多次分類,第一次,我們把低于60分和大于等于60分的分開,第二次,我們把大于等于90分和小于90分的分開,第三次,我們把大于等于80分和小于80分的分開。
這樣寫,我們得到一個兩層嵌套的if-else語句,這樣的實現可以滿足我們的要求,但是如果繼續增加條件,比如繼續判斷高于70分和低于70分的話,那么這個代碼將會縮進越來越多,代碼邏輯看起來也不夠清晰。
我們可以使用if-elif-else語句來簡化以上的邏輯。其中elif就是else if的意思。score = 59 if score < 60: ? ? print('抱歉,考試不及格') elif score >= 90: ? ? print('恭喜你,拿到卓越的成績') elif score >= 80: ? ? print('恭喜你,拿到優秀的成績') else: ? ? print('恭喜你,考試及格')
這樣,我們就可以寫出代碼結構非常清晰的一系列條件判斷了。
特別注意: 這一系列條件判斷會從上到下依次判斷,如果某個判斷為 True,執行完對應的代碼塊,后面的條件判斷就直接忽略,不再執行了。
請思考以下代碼將會輸出什么?為什么不輸出恭喜你,拿到卓越的成績。score = 95 if score < 60: ? ? print('抱歉,考試不及格') elif score >= 80: ? ? print('恭喜你,拿到優秀的成績') elif score >= 90: ? ? print('恭喜你,拿到卓越的成績') else: ? ? print('恭喜你,考試及格')
任務
如果年齡達到18歲,則是成年人,如果年齡6歲到18歲,則是青少年,如果年齡3歲到6歲,則是小孩子,如果年齡在3歲以下,則是嬰兒,請使用if-elif-else語句實現邏輯,如果成年,輸出'adult',如果是青少年,輸出'teenager',如果是小孩子,輸出kid,如果是嬰兒,輸出baby。
#-*- coding: utf-8 -*-
score=80
if score<60:
? ? print('考試不及格')
elif score>=90:
? ? print('獲得獎金')
elif score>=80:
? ? print('考試優異')
else:
? ? print('考試及格')
? ??
#判斷是否成年
#-*- coding: utf-8 -*-
age=5
if age>18:
? ? print('成年')
elif age>12:
? ? print('青少年')
elif age>=6:
? ? print('小孩')
else:
? ? print('baby')
查看全部
舉報