第二課 python基礎2(列表,字串,集合,字典,檔案),
1.列表,元祖操作
2.字串操作
3.字典操作
4.集合操作
5.檔案操作
6.字元編碼與轉碼
7.內建函數
1.列表,元祖操作
列表操作:
COPY:
結果:
可以看出,copy是個淺copy,它copy的是這個列表指標指向的地址,把每一個元素看成一個地址,所以'lzx‘ 改變了以後,list;b 也跟著改變了,所以’lz’沒有改變
結果:
這個結果表示了a 和 b 這兩個列表,其實指向的都是同一個地址,並沒有又重新複製一列表給 b ,如果要複製一份單獨的列表給 b ,就需要 import copy ,用這個庫裡的 deepcopy() 這個函數。
寫一個小程式:
1.啟動程式後,讓使用者輸入工資,然後列印商品列表
2.允許使用者根據商品編號購買商品
3.使用者選擇商品後,檢測餘額是否足夠,夠就直接扣款,不夠就提醒
4.可隨時退出,退出時,列印已購買的商品和餘額
commodity = [ ('Iphone',5800), ('Mac_Pro',9800), ('bike',800), ('watch',10600), ('coffee',60), ('kola',10),]shopping_list = []salary = input('input your salary:')if salary.isdigit():#判斷輸入的是否是一個整數 salary = int(salary) while True: for index,item in enumerate(commodity): print(index,item)#列印出商品和下標 user_choice = input('please choose your commodity:') if user_choice.isdigit():#判斷輸入的是否是一個整數 user_choice = int(user_choice)#把輸入的字串轉化成一個整數 if user_choice < len(commodity) and user_choice > -1: #判斷商品 p_item = commodity[user_choice] if p_item[1] <= salary:#買得起 shopping_list.append(p_item) salary -= p_item[1] print('added %s in shopping car,your current balance is\033[31;1m%s\033[0m'%(p_item,salary)) else: print('\033[41;1m你的餘額只剩[%s]啦,還買個毛線\033[0m'%salary) else: print('product code [%s] is not exist'%user_choice) elif user_choice == 'q': print('------shopping list------------') for p in shopping_list: print(p) print('your current balance:',salary) exit() else: print('invalid optiob')購物車小程式
2.字串操作:
常用的為例:
3.字典操作
字典:無序的,沒有下標,可以嵌套多層,多級操作
常用操作:
小程式:三級菜單:
data = { '北京':{ "昌平":{ "沙河":["oldboy","test"], "天通苑":["鏈家地產","我愛我家"] }, "朝陽":{ "望京":["平治","陌陌"], "國貿":{"CICC","HP"}, "東直門":{"Advent","飛信"}, }, "海澱":{}, }, '山東':{ "德州":{}, "青島":{}, "濟南":{} }, '廣東':{ "東莞":{}, "常熟":{}, "佛山":{}, },}enit_flag = Falsewhile not enit_flag: for i in data: print(i) choice1 = input('choice1:') if choice1 in data: while not enit_flag: for i2 in data[choice1]: print(i2) choice2 = input('choice2') if choice2 in data[choice1]: while not enit_flag: for i3 in data[choice1][choice2]: print(i3) choice3 = input('choice3:') if choice3 in data[choice1][choice2]: while not enit_flag: for i4 in data[choice1][choice2][choice3]: print(i4) choice4 = input('這是最後一層,返回請按b') if choice4 == 'b': break elif choice4 == 'q': enit_flag = True if choice3 == 'b': break elif choice3 == 'q': enit_flag = True if choice2 == 'b': break elif choice2 == 'q': enit_flag = True省 市 縣三級菜單
後面學了函數以後可以用函數將重複的代碼封裝成一個函數,然後調用,看起來就會簡潔很多了。
4.集合(set)
在集合中,所有的元素都是唯一的,無序的,主要操做:去重,關係測試
print(a.intersection(b))#求交集print(a & b)
求交集(intersection)
print(a.union(b))#求並集print(a | b)
求並集(union)
print(a.difference(b))#求差集,取a裡有,b裡沒有的print(a - b)
求差集(difference)
print(a.symmetric_difference(b))#對稱差集,去除兩邊共有的,剩下的元素的集合print(a ^ b)
對稱差集(symmetric_difference)
print(a.issubset(b))#a是b的子集嗎?返回t/fprint(a.issuperset(b))#a是b的父集嗎?
父集子集
c.add((10))#在c的集合裡添加一個10print(c)
添加(add)
c.update([11,12,13])#在c的集合裡添加多項print(c)
添加多項 (epdate)
c.discard(12)#在集合c裡刪除一個12,如果12沒有在C中,則返回None,不報錯print(c)
刪除(discard)
c.remove(11)#在集合c裡刪除一個11,如果11沒有在c中,則會報錯print(c)
刪除(remove)
print(len(a))#返回的a的長度
len()
1.檔案儲存體
(1)檔案
我們大多數人可能都有相似的經曆:在編寫代碼寫的正起勁時,系統突然藍屏崩潰,重啟電腦後發現之前寫過的代碼全部不見了,這時候就會吐槽這破系統或者後悔之前沒儲存等等。
在你編寫代碼的時候,作業系統為了更快的做出響應,把當前所有的資料都放在記憶體中,因為記憶體和CPU的傳輸速度要比硬碟和CPU之間的傳輸速度快很多倍,但記憶體有一個天生的不足,就是一旦斷電,沒儲存的資料就沒有了,因此我們在編寫代碼時,應養成一個隨時用快速鍵Ctrl+S儲存資料。
Windows是以副檔名來指出檔案的類型的,一般比較常見的類型有: .exe,是可執行檔;.txt 是文字檔,還有.ppt ; .jpg ; .avi 等等,這些都被稱為檔案。
(2) 開啟檔案
Python中,用open()這個函數來開啟檔案並返迴文件對象:
open(file , mode = 'r' , buffering = -1 , encoding = None , newline = None , closefd = True , opener = None )
open()有很多參數,除了第一個參數,後面的都有預設值,我們現在先只看第一個和第二個參數。第一個是傳入檔案名稱,要帶路徑,若不帶路徑,那麼Python就會在當前檔案夾去開啟,第二個參數指定開啟模式:
開啟一個E盤下的 test.txt檔案:
f = open(E: \\ test.txt )
沒有訊息說明檔案已經被開啟,可以對其進行操作,沒有註明操作,預設是以唯讀模式開啟。
執行個體:
此段代碼,就將“你好啊”寫入了E盤 測試檔案 檔案夾中的a.txt檔案中了。
檔案對象方法:
close()方法用於關閉檔案,檔案的關閉非常重要,在對檔案的操作之後定要記得關閉檔案。
seek(offset,from) 方法有兩個參數,表示從from(0代表檔案的起始位置,1代表當前位置,2代表檔案的末尾)位移offset位元組。
檔案的讀取和定位:
檔案對象自身是可迭代的,可以直接用 for 迭代讀取出來。
檔案的寫入:
如要寫入檔案,要確保檔案的開啟模式中有‘r’ 或 ‘a’ ,否則會出錯。