慕課網Python入門練習題---
Python中資料型別
整數
Python可以處理任意大小的整數,當然包括負整數,在Python程式中,整數的表示方法和數學上的寫法一模一樣,例如:1,100,-8080,0,等等。
計算機由於使用二進位制,所以,有時候用十六進位制表示整數比較方便,十六進位制用0x字首和0-9,a-f表示,例如:0xff00,0xa5b4c3d2,等等。
浮點數
浮點數也就是小數,之所以稱為浮點數,是因為按照科學記數法表示時,一個浮點數的小數點位置是可變的,比如,1.23x10^9和12.3x10^8是相等的。浮點數可以用數學寫法,如1.23,3.14,-9.01,等等。但是對於很大或很小的浮點數,就必須用科學計數法表示,把10用e替代,1.23x10^9就是1.23e9,或者12.3e8,0.000012可以寫成1.2e-5,等等。
整數和浮點數在計算機內部儲存的方式是不同的,整數運算永遠是精確的(除法難道也是精確的?是的!),而浮點數運算則可能會有四捨五入的誤差。
字串
字串是以”或”“括起來的任意文字,比如’abc’,”xyz”等等。請注意,”或”“本身只是一種表示方式,不是字串的一部分,因此,字串’abc’只有a,b,c這3個字元。
布林值
布林值和布林代數的表示完全一致,一個布林值只有True、False兩種值,要麼是True,要麼是False,在Python中,可以直接用True、False表示布林值(請注意大小寫),也可以通過布林運算計算出來。
布林值可以用and、or和not運算。
and運算是與運算,只有所有都為 True,and運算結果才是 True。
or運算是或運算,只要其中有一個為 True,or 運算結果就是 True。
not運算是非運算,它是一個單目運算子,把 True 變成 False,False 變成 True。
空值
空值是Python裡一個特殊的值,用None表示。None不能理解為0,因為0是有意義的,而None是一個特殊的空值。
此外,Python還提供了列表、字典等多種資料型別,還允許建立自定義資料型別,我們後面會繼續講到
任務
試一試,在右邊編輯器中,完成以下任務:
計算十進位制整數 45678 和十六進位制整數 0x12fd2 之和。
請用字串表示出Learn Python in imooc。
請計算以下表示式的布林值(注意==表示判斷是否相等):
100 < 99
0xff == 255
注意:使用print命令
print(45678+0x12fd2)
print("Learn Python in imooc")
print(100<99)
print(0xff == 255)
------------------------------------------
123456
Learn Python in imooc
False
True
Print語句
任務
請用兩種方式列印出 hello, python.
print("hello,python.")
print("hello,"+"python.")
print("hello,","python.")
-----------------------------------------
hello,python.
hello,python.
hello, python.
變數
在計算機程式中,變數不僅可以是數字,還可以是任意資料型別。
在Python程式中,變數是用一個變數名錶示,變數名必須是大小寫英文、數字和下劃線(_)的組合,且不能用數字開頭
任務
等差數列可以定義為每一項與它的前一項的差等於一個常數,可以用變數 x1 表示等差數列的第一項,用 d 表示公差,請計算數列
1 4 7 10 13 16 19 …
前 100 項的和。
x1 = 1
d = 3
s = 0
for i in range(1,101):
s += x1
x1 += d
print(s)
請將下面兩行內容用Python的字串表示並列印出來:
Python was started in 1989 by “Guido”.
Python is free and easy to learn.
s = 'Python was started in 1989 by \"Guido\".\nPython is free and easy to learn.'
print(s)
列表
Python內建的一種資料型別是列表:list。list是一種有序的集合,可以隨時新增和刪除其中的元素。
比如,列出班裡所有同學的名字,就可以用一個list表示:[‘Michael’, ‘Bob’, ‘Tracy’]
[‘Michael’, ‘Bob’, ‘Tracy’]
list是數學意義上的有序集合,也就是說,list中的元素是按照順序排列的。
構造list非常簡單,按照上面的程式碼,直接用 [ ] 把list的所有元素都括起來,就是一個list物件。通常,我們會把list賦值給一個變數,這樣,就可以通過變數來引用list:classmates = [‘Michael’, ‘Bob’, ‘Tracy’]
classmates # 列印classmates變數的內容
[‘Michael’, ‘Bob’, ‘Tracy’]
由於Python是動態語言,所以list中包含的元素並不要求都必須是同一種資料型別,我們完全可以在list中包含各種資料:L = [‘Michael’, 100, True]
一個元素也沒有的list,就是空list:empty_list = []
任務
假設班裡有3名同學:Adam,Lisa和Bart,他們的成績分別是 95.5,85 和 59,請按照 名字, 分數, 名字, 分數… 的順序按照分數從高到低用一個list表示,然後列印出來。
s = ['Adam',95.5,'Lisa',85,'Bart',59]
print(s)
任務
假設新來一名學生Paul,Paul 同學的成績比Bart好,但是比Lisa差,他應該排到第三名的位置,請用程式碼實現。
l = ['Adam','Lisa','Bart']
l.insert(2,'paul')
print(l)
----------------------------------
['Adam', 'Lisa', 'paul', 'Bart']
注意右邊編輯器程式碼中 list 如下:
L = [‘Adam’, ‘Lisa’, ‘Paul’, ‘Bart’]
Paul的索引是2,Bart的索引是3,如果我們要把Paul和Bart都刪掉,請解釋下面的程式碼為什麼不能正確執行:
L.pop(2)
L.pop(3)
怎樣調整程式碼可以把Paul和Bart都正確刪除掉?
L = ['Adam', 'Lisa', 'Paul', 'Bart']
L.pop()
L.pop()
print(L)
任務
班裡的同學按照分數排名是這樣的:
L = [‘Adam’, ‘Lisa’, ‘Bart’]
但是,在一次考試後,Bart同學意外取得第一,而Adam同學考了倒數第一。
請通過對list的索引賦值,生成新的排名。
L = ['Adam', 'Lisa', 'Bart']
L[0]='Bart'
L[-1]='Adam'
print(L)
Tuple
tuple是另一種有序的列表,中文翻譯為“ 元組 ”。tuple 和 list 非常類似,但是,tuple一旦建立完畢,就不能修改了。
Python之“可變”的tuple
前面我們看到了tuple一旦建立就不能修改。現在,我們來看一個“可變”的tuple:
t = (‘a’, ‘b’, [‘A’, ‘B’])
注意到 t 有 3 個元素:’a’,’b’和一個list:[‘A’, ‘B’]。list作為一個整體是tuple的第3個元素。list物件可以通過 t[2] 拿到:L = t[2]
然後,我們把list的兩個元素改一改:L[0] = ‘X’
L[1] = ‘Y’
再看看tuple的內容:print t
(‘a’, ‘b’, [‘X’, ‘Y’])
不是說tuple一旦定義後就不可變了嗎?怎麼現在又變了?
別急,我們先看看定義的時候tuple包含的3個元素:
當我們把list的元素’A’和’B’修改為’X’和’Y’後,tuple變為:
表面上看,tuple的元素確實變了,但其實變的不是 tuple 的元素,而是list的元素。
tuple一開始指向的list並沒有改成別的list,所以,tuple所謂的“不變”是說,tuple的每個元素,指向永遠不變。即指向’a’,就不能改成指向’b’,指向一個list,就不能改成指向其他物件,但指向的這個list本身是可變的!
理解了“指向不變”後,要建立一個內容也不變的tuple怎麼做?那就必須保證tuple的每一個元素本身也不能變。
dict
我們把名字稱為key,對應的成績稱為value,dict就是通過 key 來查詢 value。
花括號 {} 表示這是一個dict,然後按照 key: value, 寫出來即可。最後一個 key: value 的逗號可以省略。
由於dict也是集合,len() 函式可以計算任意集合的大小:len(d)
3
注意: 一個 key-value 算一個,因此,dict大小為3。
任務
新來的Paul同學成績是 75 分,請編寫一個dict,把Paul同學的成績也加進去。
d = {
‘Adam’: 95,
‘Lisa’: 85,
‘Bart’: 59
}
d = {
'Adam': 95,
'Lisa': 85,
'Bart': 59,
'Paul': 75
}
dict的第一個特點是查詢速度快,無論dict有10個元素還是10萬個元素,查詢速度都一樣。而list的查詢速度隨著元素增加而逐漸下降。
dict的第二個特點就是儲存的key-value序對是沒有順序的!
dict的第三個特點是作為 key 的元素必須不可變
set
dict的作用是建立一組 key 和一組 value 的對映關係,dict的key是不能重複的。
有的時候,我們只想要 dict 的 key,不關心 key 對應的 value,目的就是保證這個集合的元素不會重複,這時,set就派上用場了。
set 持有一系列元素,這一點和 list 很像,但是set的元素沒有重複,而且是無序的,這點和 dict 的 key很像。
建立 set 的方式是呼叫 set() 並傳入一個 list,list的元素將作為set的元素:s = set([‘A’, ‘B’, ‘C’])
可以檢視 set 的內容:print s
set([‘A’, ‘C’, ‘B’])
請注意,上述列印的形式類似 list, 但它不是 list,仔細看還可以發現,列印的順序和原始 list 的順序有可能是不同的,因為set內部儲存的元素是無序的。
因為set不能包含重複的元素,所以,當我們傳入包含重複元素的 list 會怎麼樣呢?
s = set([‘A’, ‘B’, ‘C’, ‘C’])
print s
set([‘A’, ‘C’, ‘B’])
len(s)
3
結果顯示,set會自動去掉重複的元素,原來的list有4個元素,但set只有3個元素。
任務
請用set表示班裡的4位同學:
Adam, Lisa, Bart, Paul
s = set(['Adam','Lisa','Bart','Paul'])
由於set儲存的是無序集合,所以我們沒法通過索引來訪問。
訪問 set中的某個元素實際上就是判斷一個元素是否在set中。
例如,儲存了班裡同學名字的set:
s = set([‘Adam’, ‘Lisa’, ‘Bart’, ‘Paul’])
我們可以用 in 操作符判斷:
Bart是該班的同學嗎?
‘Bart’ in s
True
Bill是該班的同學嗎?‘Bill’ in s
False
bart是該班的同學嗎?‘bart’ in s
False
看來大小寫很重要,’Bart’ 和 ‘bart’被認為是兩個不同的元素。
任務
由於上述set不能識別小寫的名字,請改進set,使得 ‘adam’ 和 ‘bart’都能返回True。
s = set([name.lower() for name in ['Adam', 'Lisa', 'Bart', 'Paul']])
set的這些特點,可以應用在哪些地方呢?
星期一到星期日可以用字串’MON’, ‘TUE’, … ‘SUN’表示。
假設我們讓使用者輸入星期一至星期日的某天,如何判斷使用者的輸入是否是一個有效的星期呢?
可以用 if 語句判斷,但這樣做非常繁瑣:
x = ‘???’ # 使用者輸入的字串
if x!= ‘MON’ and x!= ‘TUE’ and x!= ‘WED’ … and x!= ‘SUN’:
print ‘input error’
else:
print ‘input ok’
注意:if 語句中的…表示沒有列出的其它星期名稱,測試時,請輸入完整。
如果事先建立好一個set,包含’MON’ ~ ‘SUN’:
weekdays = set([‘MON’, ‘TUE’, ‘WED’, ‘THU’, ‘FRI’, ‘SAT’, ‘SUN’])
再判斷輸入是否有效,只需要判斷該字串是否在set中:
x = ‘???’ # 使用者輸入的字串
if x in weekdays:
print ‘input ok’
else:
print ‘input error’
這樣一來,程式碼就簡單多了。
任務
請用 for 迴圈遍歷如下的set,列印出 name: score 來。
s = set([(‘Adam’, 95), (‘Lisa’, 85), (‘Bart’, 59)])
s = set([('Adam', 95), ('Lisa', 85), ('Bart', 59)])
for x in s:
print(x[0],':',x[1])
更新set
由於set儲存的是一組不重複的無序元素,因此,更新set主要做兩件事:
一是把新的元素新增到set中,二是把已有元素從set中刪除。
任務
針對下面的set,給定一個list,對list中的每一個元素,如果在set中,就將其刪除,如果不在set中,就新增進去。
s = set([‘Adam’, ‘Lisa’, ‘Paul’])
L = [‘Adam’, ‘Lisa’, ‘Bart’, ‘Paul’]
s = set(['Adam', 'Lisa', 'Paul'])
L = ['Adam', 'Lisa', 'Bart', 'Paul']
for i in L:
if i in s:
s.remove(i)
else:
s.add(i)
print(s)
函式
任務
sum()函式接受一個list作為引數,並返回list所有元素之和。請計算 1*1 + 2*2 + 3*3 + … + 100*100。
def sum(list):
s = 0
for i in list:
s += i
return s
l = []
for i in range(1,101):
l.append(i*i)
print(l)
print(sum(l))
索引迭代
Python中,迭代永遠是取出元素本身,而非元素的索引。
對於有序集合,元素確實是有索引的。有的時候,我們確實想在 for 迴圈中拿到索引,怎麼辦?
方法是使用 enumerate() 函式:
L = [‘Adam’, ‘Lisa’, ‘Bart’, ‘Paul’]
for index, name in enumerate(L):
… print index, ‘-‘, name
…
0 - Adam
1 - Lisa
2 - Bart
3 - Paul
使用 enumerate() 函式,我們可以在for迴圈中同時繫結索引index和元素name。但是,這不是 enumerate() 的特殊語法。實際上,enumerate() 函式把:
[‘Adam’, ‘Lisa’, ‘Bart’, ‘Paul’]
變成了類似:
[(0, ‘Adam’), (1, ‘Lisa’), (2, ‘Bart’), (3, ‘Paul’)]
因此,迭代的每一個元素實際上是一個tuple:
for t in enumerate(L):
index = t[0]
name = t[1]
print index, ‘-‘, name
如果我們知道每個tuple元素都包含兩個元素,for迴圈又可以進一步簡寫為:
for index, name in enumerate(L):
print index, ‘-‘, name
這樣不但程式碼更簡單,而且還少了兩條賦值語句。
可見,索引迭代也不是真的按索引訪問,而是由 enumerate() 函式自動把每個元素變成 (index, element) 這樣的tuple,再迭代,就同時獲得了索引和元素本身。
生成列表
但是迴圈太繁瑣,而列表生成式則可以用一行語句代替迴圈生成上面的list:
[x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
這種寫法就是Python特有的列表生成式。利用列表生成式,可以以非常簡潔的程式碼生成 list。
寫列表生成式時,把要生成的元素 x * x 放到前面,後面跟 for 迴圈,就可以把list建立出來,十分有用,多寫幾次,很快就可以熟悉這種語法。
相關文章
- 慕課網《Netty入門之WebSocket初體驗》學習總結NettyWeb
- 慕課網10小時大資料入門筆記大資料筆記
- 慕課網的中國式線上“慕課”模式模式
- WebView學習的總結————慕課網WebView
- sql查詢入門練習題SQL
- CAD入門級練習題
- 入門練習
- 慕課網《探秘Spring AOP》學習總結Spring
- 系統入門課後習題1
- 慕課網招聘golang講師Golang
- thinkphp開發 網易雲課堂-線上IT學習|視訊教程|慕課網PHP
- U7-11課綜合練習+12課階段測評練習——複習練習題目
- python 實現課堂練習Python
- 新手練習:Python練習題目Python
- 慕課 玩轉資料結構 從入門到進階 (草稿)資料結構
- python從入門到實踐第三章的課後練習作業Python
- Python 練習題Python
- JAVA入門第三季第一章第九節課後練習題!Java
- 慕課網-LinuxC語言結構體-學習筆記LinuxC語言結構體筆記
- 慕課平臺
- Oracle入門查詢練習題及參考答案Oracle
- Python入門必學,用Python練習畫個美隊盾牌Python
- python練習題解析Python
- Java 課下練習題 T1Java
- Python練習題(三)--視訊展示網站Python網站
- python課後習題Python
- 《Python程式設計》第七章部分課後練習題Python程式設計
- 《Python程式設計》第十一章部分課後練習題Python程式設計
- Python快速程式設計入門課後程式題答案Python程式設計
- 課堂練習
- 課後練習
- 慕課網玩轉資料結構課程之陣列資料結構陣列
- 慕課網大資料開發工程師課程大資料工程師
- 慕課網go語言體系課搶先體驗Go
- 三次答題判題程式練習讓你入門Java。Java
- Python 小甲魚教程 課後練習42Python
- 慕課網《前端JavaScript面試技巧》學習筆記(2)-原型和原型鏈前端JavaScript面試筆記原型
- 慕課網_《iOS基礎教程之介面初體驗》學習總結iOS