(三)PYTHON字典 元祖 列表嘗試應用
1、 使用 join 方法將下劃線添加到列表的每一個元素拼接成字符串,li = [‘alex‘, ‘eric‘, ‘rain‘]
li = [‘boom‘, ‘TNT‘, ‘zhadan‘] daying = "_".join(li) print(daying)
2、 查找列表中元素,移除每個元素的空格,並查找以 a 或 A 開頭 並且以 c 結尾的所有元素。
li = ["alec", " aric", "Alex", "Tony", "rain"]
tu = ("alec", " aric", "Alex", "Tony", "rain")
dic = {‘k1‘: "alex", ‘k2‘: ‘ aric‘,"k3": "Alex", "k4": "Tony"}
將三個字段合並到一起 然後進行判斷可節省代碼量:
txts=li+list(tu)+list(dic.values) for txt in txts: print(txt.strip()) for txt in txts: txt.lower() if txt.startswith("a") and txt.endswith("c"): print(tu)
列表: []
li = [‘alex‘, ‘eric‘, ‘rain‘]
a.計算列表長度並輸出 使用 len 函數即可
long =len(li)
b. 列表中追加元素 “seven”,並輸出添加後的列表 使用 append 函數即可
li.append("seven")
c. 請在列表的第 1 個位置插入元素 “Tony”,並輸出添加後的列表 使用 insert 函數即可
li.insert(0,"Tony")
d. 請修改列表第 2 個位置的元素為 “Kelly”,並輸出修改後的列表 使用切片器修改
li[1]="kelly"
e. 請刪除列表中的元素 “eric”,並輸出修改後的列表 使用remove 專門查找刪除
li.remove("eric")
f. 請刪除列表中的第 2 個元素,並輸出刪除的元素的值和刪除元素後的列表 使用 pop 函數
daying=li.pop(1) print(daying,li)
g. 請將列表所有的元素反轉,並輸出反轉後的列表 使用 reverse 轉置
li.reverse() print(li)
h. 請使用 enumrate 輸出列表元素和序號(序號從 100 開始) 使用 enumerate 來導出序號
i=enumerate(li) print(i)
元組 ()
元組的大部分可用函數和列表並沒有什麽,主要的區別在於 元組的第一層元素不可變動,不可添加,不可刪除。
字典{}
字典當中可使用的大部分函數也相同, 但是和元組、列表不一樣的特點是 字典裏面的內容是無序的,其他兩個確是有序的。
dic = {‘k1‘: "v1", "k2": "v2", "k3": [11,22,33]}
使用 keys()、values() items() 可以分別輸出 字典的 key、值和整個元素
使用 update 可以更新字典 如字典中無,則添加進去
dic.update(k4="v4") print(dic)
setdefault 也可以添加
dic.setdefault("k1","hah") print(dic)
使用 list() 、 tuple() 、dict() 、 可分別轉換為 列表 元組 字典
布爾值是false的值的有:
0 {} [] () none “”
3、元素分類
有如下值集合 [11,22,33,44,55,66,77,88,99,90],將所有大於 66 的值保存至字典的第一個 key 中,將小於 66 的值保存至第二個key 的值中。
這個是將數值保存到同一個位置中
lis=[11,22,33,44,55,66,77,88,99,90] dic={‘k1‘:0 ,‘k2‘:0 } for li in lis: if li > 66 : dic[‘k1‘]+=li if li <= 66 : dic[‘k2‘]+=li print(dic.items())
這個是將所有字段保存到同一個位置當中
lis=[11,22,33,44,55,66,77,88,99,90] dic={‘k1‘:"" ,‘k2‘:"" } for li in lis: if li > 66 : dic[‘k1‘]+=str(li) if li <= 66 : dic[‘k2‘]+=str(li) print(dic.items())
還有使用sort() 方法可以更加簡潔
li = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90] li.sort() #排序 z = li.index(66) l = len(li) dic = {"k1": li[z + 1:l], "k2": li[0:z]} print(dic)
4、輸出商品列表,用戶輸入序號,顯示用戶選中的商品商品 li = ["手機", "電腦", ‘鼠標墊‘, ‘遊艇‘]
a. 允許用戶添加商品
b. 用戶輸入序號顯示內容
li = ["手機", "電腦", ‘鼠標墊‘, ‘遊艇‘] dic={} for i,v in enumerate(li,1): dic[i]=v while True: print(dic) xuanzeqi = input("添加商品請按+,精確顯示商品請按*,退出請按q") if xuanzeqi == "+": shangping=input("請添加商品名稱") i+=1 dic[i]=shangping elif xuanzeqi=="*": shangpinghaoma=int(input("請輸入你想要精確顯示的商品號碼")) print(dic[shangpinghaoma]) elif xuanzeqi=="q": break
5、購物車
功能要求:
要求用戶輸入總資產,例如: 2000
顯示商品列表,讓用戶根據序號選擇商品,加入購物車
購買,如果商品總額大於總資產,提示賬戶余額不足,否則,購買成功。
goods = [ {"name": "電腦", "price": 1999}, {"name": "鼠標", "price": 10}, {"name": "遊艇", "price": 20}, {"name": "美女", "price": 998}, ] zongjiager=2000 while True: print(goods) goumaizongjia = 0 shangping=input("請輸入你想購買的商品名稱,輸入q退出購物") for good in goods: if good["name"] == shangping : pannduanzhi = zongjiager - good["price"] if pannduanzhi < 0 : print("您的余額不足,購買不成功您剩余金額為"+str(zongjiager)) else: goumaizongjia += good["price"] zongjiager-=goumaizongjia print("成功購買,您剩余金額為"+str(zongjiager)) if shangping == "q": print("謝謝光臨") break
6、
用 Python 開發程序自動計算方案:
公雞 5 文錢一只,母雞 3 文錢一只,小雞 3 只一文錢,用 100 文錢買 100 只雞,其中公雞,母雞,小雞都必須要有,問公雞,母
雞,小雞要買多少只剛好湊足 100 文錢
gongji_jiage=5 gongji_zuidashuliangs = range(1,21) muji_jiage = 3 muji_zuidashuliangs = range(1,34) xiaoji_jiage = 3 xiaoji_zhuidashuliangs = range(1,101) ls=[] for gongji_shuliang in gongji_zuidashuliangs: for muji_shuliang in muji_zuidashuliangs: for xiaoji_shuliang in xiaoji_zhuidashuliangs: if gongji_shuliang*gongji_jiage+muji_shuliang*muji_jiage+xiaoji_shuliang/xiaoji_jiage==100 and gongji_shuliang+ muji_shuliang+xiaoji_shuliang == 100: ls.append(("公雞",gongji_shuliang,"母雞",muji_shuliang,"小雞",xiaoji_shuliang)) print(len(ls)) print(ls)
有一個大問題就是變量名稱以後不能設置太長,不然這讓既不方便閱讀代碼 也不方便 編寫代碼
7、用戶交互顯示 三級列表制作
a. 允許用戶增加內容
b. 允許用戶選擇查看某一個級別內容
dic = {
"植物":
{"草本植物":
["牽牛花", "瓜葉菊", "葫蘆", "翠菊", "冬小麥", "甜菜"],
"木本植物":
["喬木", "灌木", "半灌木", "如松", "杉", "樟"],
"水生植物":
["荷花", "千屈菜", "菖蒲", "黃菖蒲", "水蔥", "再力花", "梭魚草"]},
"動物":
{"兩棲動物":
["山龜", "山鱉", "石蛙", "娃娃魚", "蟾蜍", "龜", "鱷魚", "蜥蜴", "蛇"],
"禽類":
["雉雞", "原雞", "長鳴雞", "昌國雞", "鬥雞", "長尾雞", "烏骨雞"],
"哺乳類動物":
["虎", "狼", "鼠", "鹿", "貂", "猴", "貘", "樹懶", "斑馬", "狗"]}}
kongzhiqi = True while kongzhiqi == True : print(dic.keys()) #一級菜單欄 panduan=input("請輸入你想要進行的操作,\n1:精確查看列表內容請輸入c,\n2:添加列表內容請輸入b,\n3:推出模塊請輸入q") #二級菜單欄 if panduan == "c": lb1=input("輸入你要查看的列表名") while kongzhiqi == True : print(dic[lb1].keys()) panduan1 = input("請輸入你想要進行的操作,\n1:精確查看列表內容請輸入c,\n2:添加列表內容請輸入b,\n3:推出模塊請輸入q\n4:輸入h返回上級菜單") #三級菜單 if panduan1 == "c": lb2 = input("輸入你要查看的列表名") while kongzhiqi == True : print(dic[lb1][lb2]) panduan2=input("請輸入你想要進行的操作,\n1:添加列表內容請輸入b,\n3:推出模塊請輸入q\n4:輸入h返回上級菜單") # 添加內容 if panduan2 == "b": txt = input("請輸入你要添加的名稱") dic[lb1][lb2].append(txt) # 返回上級列表 elif panduan2 == "h": break # 退出模塊 elif panduan2 == "q": kongzhiqi = False print("成功退出") # 錯誤指令 else: print("請輸入正確的指令") #添加內容 elif panduan1 =="b": txt = input("請輸入你要添加的名稱") dic[lb1].setdefault(txt) #返回上級列表 elif panduan1 == "h": break #退出模塊 elif panduan1 == "q": kongzhiqi = False print("成功退出") #錯誤指令 else: print("請輸入正確的指令") #添加內容 elif panduan == "b": txt= input("請輸入你要添加的名稱") dic.setdefault(txt) #退出模塊 elif panduan == "q": kongzhiqi = False print("成功退出") #輸入錯誤 else: print("請輸入正確的指令")
上面這種三級列表的編輯方式知識單純使用 if語句 和 while循環,但是代碼的數量很大 基本上在每一成績的列表下面都建立的對應的功能判斷,這樣對於代碼的使用率太低。
如何解決這個問題,首先就是考慮如何將三級列表的功能選項 集合到一起, 讓功能選擇在深入到各級列表中都能使用。
這邊有如下方法,由於查詢的列表是一個字典,編輯查詢時使用的是key屬性,那麽將key編成一個列表,並存儲到一個新建的字段當中,並進行不斷疊加,代碼如下:
kongzhiqi = True key_case =[] while kongzhiqi : #解決三層控制器想要在同一段代碼中實現而不沖突,最重要的就是 在不斷循環選擇過程中對文本字典當中的 Key 的疊加。 diejia = dic for key in key_case: diejia = diejia[key] print("當前所有子節點:",list(diejia.keys()),"\n") choice = input("請輸入你想要進行的操作,\n1:精確查看列表內容請輸入c,\n2:添加列表內容請輸入b,\n3:推出模塊請輸入q,\n4:返回上一級請輸入d") if choice.lower() == "c": chazhao = input("請輸入要查看的列表名稱") if chazhao in diejia: key_case.append(chazhao) else: print("該列表名不存在") elif choice.lower()== "b" : tianjia = input("請輸入你要在此列表中添加的內容") if tianjia in diejia: print("該列表名已存在") else: diejia[tianjia] = {} elif choice.lower() == "d": if key_case : key_case.pop() else: print("已經是最高級了") elif choice.lower() == "q": kongzhiqi = False print("成功退出") else: print("請輸入正確的指令")
經過了這麽多題目的嘗試過後,對於python編輯篇幅也越來越長, 在編輯過程中體驗最深刻的就是python的一個代碼縮進量的問題,python是靠縮進量來判斷代碼的層級等等,一開始還不熟悉 在縮進這個問題上耗費了許多時間,
還有就是代碼註釋問題,一定要添加註釋,方便於自己檢查代碼和識別代碼, 還有就是變量的名稱問題,不太過於太長,這樣對於變量的查看不利。
(三)PYTHON字典 元祖 列表嘗試應用