1. 程式人生 > >(三)PYTHON字典 元祖 列表嘗試應用

(三)PYTHON字典 元祖 列表嘗試應用

插入元素 嘗試 想要 可用 .so 輸入 添加內容 控制 劃線

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字典 元祖 列表嘗試應用