1. 程式人生 > >python 3 day2(下)

python 3 day2(下)

簡單 -h respond bytes rac isalnum 判斷 串操作 find

對一、今天主要講的是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(下)