python 3 day2(下)
對一、今天主要講的是python中淺copy和深copy的用法和區別。如下圖,使用copy可以完整的復制一個列表。
將下標為3的值alex更改為ALEXANDER的方法為 names[3][0] = 更改後的值(註意後面一個下標0為小列表中alex下標位置的意思)
此時的打印結果為:
我們會發現“向鵬”在names和name2中選擇性copy了,但是ALEXANDER在1和2 中都被copy了。說明copy只是淺copy只copy了第一層。
如果我更改了name2的值,names會跟著被copy嗎?答案是會。
如果需要完完全全的復制一份列表應該怎麽操作?
再看看步長切片的應用:
結果如下,隔一個值取一個:
2.元組
元組其實和列表差不多,也是存一組數,只不過它一旦創建,便再也不能修改,所以又叫只讀列表。
語法:
它只有2個方法,一個是count,一個是index,完畢。
程序練習
請閉眼寫出以下程序
程序:購物車程序
需求:
1.啟動程序後,讓用戶輸入工資,然後打印商品列表
2.允許用戶根據商品編號購買商品
3.用戶選擇商品後,檢測余額是否夠,夠就直接付款,不夠就提醒
4.可隨時退出,退出是,打印已購買商品和余額。
先理清一個程序的主要邏輯思路之後,你會發現通過不斷的積累這些邏輯思維,寫起程序來不再是一臉茫然了。
但此時我們會發現,運行結果中沒有產品編號,只能運行一次:
由於這些產品在列表中有下標,我們可以使用下標來當產品編號:
將print改為上圖所示後,運行結果我們可以看出,下標出來了:
還有更為簡便的寫法,即使用enumerate將列表中數據的下標直接取出來:
完善之後的簡易版程序腳本是這樣的:
仔細看會發現,這個程序目前只考慮了買的起的情況,不涉及買不起的情況,如果買不起應該怎樣去寫呢?很簡單,只需在Added那行代碼下面新增一個else:
運行結果顯示如下:
那麽問題又來了,程序不可能無止境的運行下去,如果想退出該程序,應該如何操作呢?
二、字符串操作
name.capitalize() 首字母大寫 name.casefold() 大寫全部變小寫 name.center(50,"-") 輸出 ‘---------------------Alex Li----------------------‘ name.count(‘lex‘) 統計 lex出現次數 name.encode() 將字符串編碼成bytes格式 name.endswith("Li") 判斷字符串是否以 Li結尾 "Alex\tLi".expandtabs(10) 輸出‘Alex Li‘, 將\t轉換成多長的空格 name.find(‘A‘) 查找A,找到返回其索引, 找不到返回-1 format : >>> msg = "my name is {}, and age is {}" >>> msg.format("alex",22) ‘my name is alex, and age is 22‘ >>> msg = "my name is {1}, and age is {0}" >>> msg.format("alex",22) ‘my name is 22, and age is alex‘ >>> msg = "my name is {name}, and age is {age}" >>> msg.format(age=22,name="ale") ‘my name is ale, and age is 22‘ format_map >>> msg.format_map({‘name‘:‘alex‘,‘age‘:22}) ‘my name is alex, and age is 22‘ msg.index(‘a‘) 返回a所在字符串的索引 ‘9aA‘.isalnum() True ‘9‘.isdigit() 是否整數 name.isnumeric name.isprintable name.isspace name.istitle name.isupper "|".join([‘alex‘,‘jack‘,‘rain‘]) ‘alex|jack|rain‘ maketrans >>> intab = "aeiou" #This is the string having actual characters. >>> outtab = "12345" #This is the string having corresponding mapping character >>> trantab = str.maketrans(intab, outtab) >>> >>> str = "this is string example....wow!!!" >>> str.translate(trantab) ‘th3s 3s str3ng 2x1mpl2....w4w!!!‘ msg.partition(‘is‘) 輸出 (‘my name ‘, ‘is‘, ‘ {name}, and age is {age}‘) >>> "alex li, chinese name is lijie".replace("li","LI",1) ‘alex LI, chinese name is lijie‘ msg.swapcase 大小寫互換 >>> msg.zfill(40) ‘00000my name is {name}, and age is {age}‘ >>> n4.ljust(40,"-") ‘Hello 2orld-----------------------------‘ >>> n4.rjust(40,"-") ‘-----------------------------Hello 2orld‘ >>> b="ddefdsdff_哈哈" >>> b.isidentifier() #檢測一段字符串可否被當作標誌符,即是否符合變量命名規則 True
三、字典操作
字典一種key - value 的數據類型,使用就像我們上學用的字典,通過筆劃、字母來查對應頁的詳細內容。
例如我們需要把全國人民的年齡、身高、性別等信息存下來(實際上使用列表的方式也可以進行存儲操作,但是需要記住每一個值的下標信息,這樣就太麻煩了),這裏介紹一種更為簡便實用的方法:
info = {
‘stu1101‘: "TengLan Wu",
‘stu1102‘: "LongZe Luola",
‘stu1103‘: "XiaoZe Maliya",
}
此時我們會發現,print打印之後顯示是無序的,這是因為字典沒有下標的原因導致的。由於字典是無序的,所以我們取值時通過key進行的,print(key名稱)即可。由此發現:
字典的特性:
(1)dict是無序的
(2)key必須是唯一的,so 天生去重。
那現在“查”是可以查詢了,字典中可以進行修改操作嗎?可以的,先來看下 對已存在信息進行修改的操作是怎樣的:
如果對原字典不存在的信息進行修改可以修改成功嗎?例如原字典中本沒有stu1104這個key,現在我們操作將stu1104修改為“宮本武藏”,結果會是怎樣的?
打印之後的結果顯示,對於不存在的字典信息進行修改時,會自動新增該條不存在的信息。
打印出來的結果如下:
本節課課後作業:
購物車
用戶入口:
1.商品信息存在文件裏
2.已購商品、余額記錄(長時間留存)。
商家入口:
1.可以添加商品,修改商品價格
python 3 day2(下)