——淺copy的補(bǔ)充內(nèi)容——
淺copy的意思就是說,第二個(gè)列表的每個(gè)元素是第一個(gè)列表的每個(gè)元素的一個(gè)引用而已。
總結(jié)一下淺copy的三種方法:
①用copy模塊中的copy函數(shù),即copy.copy(x)。
②完全切片,即列表名[ : ]纺棺。
③利用工廠函數(shù)list函數(shù)。
我們來實(shí)踐一下:
那么淺copy到底有什么用呢邪狞?
淺copy可以用來創(chuàng)建聯(lián)合賬號(hào)祷蝌。
舉個(gè)例子:我們現(xiàn)在有這樣一個(gè)模板,person=["names",["saving",100]]帆卓,然后通過淺copy可以復(fù)制兩個(gè)列表person1和person2巨朦,假設(shè)這個(gè)模板是一個(gè)夫妻共同創(chuàng)建的銀行聯(lián)合賬號(hào),我們通過修改列表person1和person2中的第0個(gè)元素剑令,可以將這兩個(gè)列表歸為兩人各自所屬賬號(hào)罪郊,即person1的持有人為“張三”,person2的持有人為“李四”尚洽,但是你想一下悔橄,比如張三從賬上取了30元之后,李四會(huì)同樣收到短信賬上減少30元腺毫,也就是說癣疟,這個(gè)賬號(hào)存款的數(shù)目變化是一致的,即修改列表的第1個(gè)元素中的第一個(gè)元素時(shí)潮酒,person1和person2兩個(gè)賬號(hào)要發(fā)生同樣的變化睛挚,在這里就用到了淺copy的性質(zhì),修改第一層的時(shí)候是互不影響的急黎,但是修改第二層的時(shí)候是發(fā)生相同變化的扎狱。
——元組——
元組是不能增刪改,只能查和切片的列表勃教。
元組其實(shí)跟列表差不多淤击,也是存一組數(shù),只不是它一旦創(chuàng)建故源,便不能再修改污抬,所以又叫只讀列表。
語(yǔ)法:names=("anqila","daji","diaochan","wangzhaojun")? ?注意:元組是單括號(hào)绳军。
元組只有2個(gè)方法印机,一個(gè)是count,一個(gè)是index矢腻。
——購(gòu)物車程序——
需求:
1.啟動(dòng)程序后,讓用戶輸入工資射赛,然后打印商品列表多柑;
2.允許用戶根據(jù)商品編號(hào)購(gòu)買商品;
3.用戶選擇商品后楣责,檢測(cè)余額是否夠顷蟆,夠就直接扣款,不夠就提醒腐魂;
4.可隨時(shí)退出,退出時(shí)逐纬,打印已購(gòu)買的商品和余額蛔屹。
接下來我們就一步步來實(shí)現(xiàn)這個(gè)程序:
首先我們要存儲(chǔ)這些商品信息,商品列表是動(dòng)態(tài)的豁生,不是固定不變的兔毒,所以要存儲(chǔ)這些商品信息,考慮選擇用列表進(jìn)行存儲(chǔ)甸箱,而非字符串等等育叁。商品的信息包括商品名稱和商品的價(jià)格,所以列表里面要再進(jìn)行嵌套列表芍殖。
接下來豪嗽,就是輸入你的工資,工資只在啟動(dòng)程序后輸入一次豌骏,并不是每次循環(huán)都要輸入工資龟梦,所以輸入工資的語(yǔ)句應(yīng)該放在循環(huán)外面。這里注意一個(gè)問題窃躲,你輸入的工資默認(rèn)為字符串的格式计贰,如果你輸入的為數(shù)字,例如3000等蒂窒,進(jìn)行強(qiáng)制轉(zhuǎn)換為整型躁倒,沒有任何問題;但是如果你輸入的為類似“hdui”這樣的字符串洒琢,如果強(qiáng)制進(jìn)行類型轉(zhuǎn)換秧秉,轉(zhuǎn)換為整型,則會(huì)報(bào)錯(cuò)衰抑。解決辦法是福贞,在這里作一個(gè)判斷,如果你輸入的為數(shù)字停士,才會(huì)轉(zhuǎn)換為整型挖帘,用if salary.isdigit():完丽,這個(gè)語(yǔ)句的意思是,雖然默認(rèn)你輸入的為字符串格式拇舀,但是如果你輸入的為數(shù)字的類型逻族,則這個(gè)if語(yǔ)句就判斷為真,這時(shí)候再進(jìn)行類型轉(zhuǎn)換操作骄崩,salary=int(salary)聘鳞。
輸入工資之后就要進(jìn)入循環(huán),打印商品列表要拂,那么怎么打印商品列表呢抠璃?我們可以考慮用for循環(huán)打印商品列表:
但是這樣存在的一個(gè)問題是,沒有商品的編號(hào)脱惰,怎樣才能加上商品的編號(hào)呢搏嗡?我們想到用輸出商品的下標(biāo)的方式作為商品編號(hào),將商品的下標(biāo)和商品的信息同時(shí)進(jìn)行打永弧:
除此之外采盒,還有一種方法是這樣的:
enumerate是枚舉的意思,對(duì)一個(gè)列表進(jìn)行枚舉蔚润,會(huì)輸出(下標(biāo)磅氨,列表內(nèi)容)這樣的一組元組。如下圖:
打印了商品列表之后嫡纠,接下來的一步是烦租,用戶根據(jù)商品編號(hào)選擇商品。這里就要分情況討論了:①用戶輸入的是數(shù)字除盏,接下來判斷是否可以購(gòu)買所選定的商品左权;②用戶輸入的是"Q",則退出循環(huán)痴颊,打印所選的商品和余額赏迟;③用戶輸入的是其他的字符串,這時(shí)候就要顯示 “非法輸入”蠢棱。
接下來锌杀,我們?cè)敿?xì)說明第一種情況,即用戶輸入的是數(shù)字的情況:
首先還是要先進(jìn)行一個(gè)判斷泻仙,判斷輸入的字符串是否為數(shù)字的類型糕再,若是,則強(qiáng)制轉(zhuǎn)換為整型玉转。轉(zhuǎn)換為整型之后突想,要再進(jìn)行一個(gè)判斷,這個(gè)判斷所做的工作是,判斷這個(gè)數(shù)字是否在商品編號(hào)的范圍內(nèi)猾担,有可能輸入的是商品編號(hào)范圍以外的數(shù)字袭灯,若是這種情況,就要顯示“沒有找到您所選的商品”绑嘹。若是商品編號(hào)范圍內(nèi)的數(shù)字稽荧,這時(shí)候就要進(jìn)行價(jià)格的比較,首先你要獲取到商品編號(hào)所指定商品的價(jià)格工腋,然后這個(gè)價(jià)格跟你的工資進(jìn)行比較姨丈,此時(shí)又分為兩種情況:一種是買的起,此時(shí)就要將你的工資進(jìn)行扣除擅腰,并且顯示“已將某某商品加入購(gòu)物車”蟋恬,另一種情況是買不起,此時(shí)就要顯示“您的余額已不足”趁冈。這部分的程序如下:
說明幾點(diǎn):①在判斷所輸入的數(shù)字是否在商品編號(hào)范圍內(nèi)是歼争,最好不要寫xxx<8類似的寫成是數(shù)字,這樣就寫死了箱歧,后期不好進(jìn)行修改,最好是獲取到這個(gè)列表的長(zhǎng)度一膨,然后什么什么小于列表長(zhǎng)度呀邢,獲取列表長(zhǎng)度的方法:len()。②買得起的情況下豹绪,要把所買的商品信息加入到所購(gòu)買的商品列表里价淌,所以要建一個(gè)空列表來存所購(gòu)買的商品,這個(gè)空列表要建在程序一開始的時(shí)候瞒津,不能建在循環(huán)內(nèi)蝉衣。
下面我們來說當(dāng)輸入為"Q"時(shí)的情況:
在這種情況下,只需要打印輸出所購(gòu)買的商品和余額即可巷蚪,然后退出病毡,退出的方法為:exit()。
最后一種情況就是屁柏,當(dāng)你輸入的是其他字符串時(shí)啦膜,只需要顯示“非法輸入”即可。
最后完整的程序?yàn)椋?/p>