1. 程式人生 > >python基礎數據類型-練習

python基礎數據類型-練習

程序 行修改 def 服務器 註意 字符串 功能 鍵值對 序列

1,有如下變量(tu是個元祖),請實現要求的功能

tu = ("alex", [11, 22, {"k1": ‘v1‘, "k2": ["age", "name"], "k3": (11,22,33)}, 44])

a. 講述元祖的特性

1)元祖tuple是一個只讀列表,只可以查看,不可以修改增加和刪除;
2)在定義只有一個元素的元祖時,要加上逗號以示和小括號的區別,如 age = (18, )

b. 請問tu變量中的第一個元素 “alex” 是否可被修改?

答:不可以,它直接屬於元組tu的元素。

c. 請問tu變量中的"k2"對應的值是什麽類型?是否可以被修改?如果可以,請在其中添加一個元素 “Seven”

答:"k2"對應的值是列表類型;列表裏面的元素可以被修改。

tu[1][2][‘k2‘].append(‘Seven‘)
print(tu)

效果:
(‘alex‘, [11, 22, {‘k2‘: [‘age‘, ‘name‘, ‘Seven‘], ‘k1‘: ‘v1‘, ‘k3‘: (11, 22, 33)}, 44])

d. 請問tu變量中的"k3"對應的值是什麽類型?是否可以被修改?如果可以,請在其中添加一個元素 “Seven”

答:"k3"對應的值是元組類型,不可以被修改。
強行修改會報錯,告訴你元祖類型的對象沒有append的方法。
如:

tu[1][2][‘k3‘].append(‘Seven‘)
AttributeError: ‘tuple‘ object has no attribute ‘append‘
# 不過作為鍵值,k3對應的值倒可以被直接替換成另一個元祖數據,例如:
# tu[1][2][‘k3‘] = (11, 22, 33, ‘Seven‘ )
# print(tu)
# 會顯示出有Seven在的新元祖。

2, 字典dic,dic = {‘k1‘: "v1", "k2": "v2", "k3": [11,22,33]}

a. 請循環輸出所有的key
dic = {‘k1‘: "v1", "k2": "v2", "k3": [11, 22, 33]}
for i in dic:print(i)

b. 請循環輸出所有的value
for i in dic.values():
    print(i)

c. 請循環輸出所有的key和value
for i in dic.items():
    print(i)

d. 請在字典中添加一個鍵值對,"k4": "v4",輸出添加後的字典
dic[‘k4‘] =‘v4‘
print(dic)

效果:
{‘k2‘: ‘v2‘, ‘k3‘: [11, 22, 33], ‘k4‘: ‘v4‘, ‘k1‘: ‘v1‘}

e. 請在修改字典中 “k1” 對應的值為 “alex”,輸出修改後的字典
dic[‘k1‘] = ‘alex‘
print(dic)

效果:
{‘k2‘: ‘v2‘, ‘k1‘: ‘alex‘, ‘k3‘: [11, 22, 33]}

f. 請在k3對應的值中追加一個元素 44,輸出修改後的字典
dic[‘k3‘].append(44)
print(dic)

效果:
{‘k2‘: ‘v2‘, ‘k3‘: [11, 22, 33, 44], ‘k1‘: ‘v1‘}

g. 請在k3對應的值的第 1 個位置插入個元素 18,輸出修改後的字典
dic[‘k3‘].insert(0, 18)
print(dic)

效果:
{‘k3‘: [18, 11, 22, 33], ‘k2‘: ‘v2‘, ‘k1‘: ‘v1‘}
3,av_catalog = {
    "歐美":{
        "www.youporn.com": ["很多免費的,世界最大的","質量一般"],
        "www.pornhub.com": ["很多免費的,也很大","質量比yourporn高點"],
        "letmedothistoyou.com": ["多是自拍,高質量圖片很多","資源不多,更新慢"],
        "x-art.com":["質量很高,真的很高","全部收費,屌絲請繞過"]
    },
    "日韓":{
        "tokyo-hot":["質量怎樣不清楚,個人已經不喜歡日韓範了","verygood"]
    },
    "大陸":{
        "1024":["全部免費,真好,好人一生平安","服務器在國外,慢"]
    }
}

    # 1,給此 ["很多免費的,世界最大的","質量一般"]列表第二個位置插入一個元素:‘量很大‘。
  print(av_catalog[‘歐美‘][‘www.youporn.com‘])
  av_catalog[‘歐美‘][‘www.youporn.com‘].insert(1,‘量很大‘)
  print(av_catalog[‘歐美‘][‘www.youporn.com‘])

  效果對比:
  [‘很多免費的,世界最大的‘, ‘質量一般‘]
  [‘很多免費的,世界最大的‘, ‘量很大‘, ‘質量一般‘]

    # 2,將此 ["質量很高,真的很高","全部收費,屌絲請繞過"]列表的 "全部收費,屌絲請繞過" 刪除。
    print(av_catalog[‘歐美‘][‘x-art.com‘])
  av_catalog[‘歐美‘][‘x-art.com‘].pop()
  print(av_catalog[‘歐美‘][‘x-art.com‘])
  
  效果對比:
  [‘質量很高,真的很高‘, ‘全部收費,屌絲請繞過‘]
  [‘質量很高,真的很高‘]

    # 3,將此 ["質量很高,真的很高","全部收費,屌絲請繞過"]列表的 "全部收費,屌絲請繞過" 刪除。
  同上

    # 4,將此["質量怎樣不清楚,個人已經不喜歡日韓範了","verygood"]列表的 "verygood"全部變成大寫。
  print(av_catalog[‘日韓‘][‘tokyo-hot‘])
  av_catalog[‘日韓‘][‘tokyo-hot‘][1] = av_catalog[‘日韓‘][‘tokyo-hot‘][1].upper()
  print(av_catalog[‘日韓‘][‘tokyo-hot‘])
  
  效果對比:
  [‘質量怎樣不清楚,個人已經不喜歡日韓範了‘, ‘verygood‘]
  [‘質量怎樣不清楚,個人已經不喜歡日韓範了‘, ‘VERYGOOD‘]

    # 5,給 ‘大陸‘ 對應的字典添加一個鍵值對 ‘1048‘ :[‘一天就封了‘]
    print(av_catalog[‘大陸‘])
  av_catalog[‘大陸‘].setdefault(‘1048‘,[‘一天就封了‘])
  print(av_catalog[‘大陸‘])
  
  效果對比:
  {‘1024‘: [‘全部免費,真好,好人一生平安‘, ‘服務器在國外,慢‘]}
  {‘1048‘: [‘一天就封了‘], ‘1024‘: [‘全部免費,真好,好人一生平安‘, ‘服務器在國外,慢‘]}

    # 6,刪除此"letmedothistoyou.com": ["多是自拍,高質量圖片很多","資源不多,更新慢"]鍵值對。
  av_catalog[‘歐美‘].pop(‘letmedothistoyou.com‘)
  print(‘letmedothistoyou.com‘ in av_catalog[‘歐美‘])
  返回的值是False,證明刪除了。

    # 7,給此["全部免費,真好,好人一生平安","服務器在國外,慢"]列表的第一個元素,加上一句話:‘可以爬下來‘
    print(av_catalog[‘大陸‘][‘1024‘][0])
  av_catalog[‘大陸‘][‘1024‘][0] = av_catalog[‘大陸‘][‘1024‘][0] + ‘可以爬下來‘
  可以簡寫成 av_catalog[‘大陸‘][‘1024‘][0] += ‘可以爬下來‘ (和count += 1,自增一樣)
  print(av_catalog[‘大陸‘][‘1024‘][0])
  
  顯示對比:
  全部免費,真好,好人一生平安
  全部免費,真好,好人一生平安可以爬下來

4、有字符串"k:1|k1:2|k2:3|k3:4" 處理成字典 {‘k‘:1,‘k1‘:2....}

k = "k:1|k1:2|k2:3|k3:4"
dk = { }
for i in k.strip().split(‘|‘):
    i = i.stsrip().split(‘:‘)
    # print(i) 調試用,
    # i[0]之類己經是直接指代字符串了,不需要再加‘‘引住。i[1]註意要int轉換成整數型。
    dk.setdefault(i[0], int(i[1]))
print(dk)

參考
s = ‘k:1|k1:2|k2:3|k3:4‘
dic = {}
for i in s.strip().split(‘|‘):
    i = i.stsrip().split(‘:‘)
dic[i[0].strip()] = int(i[1])
print(dic) 

結果:
{‘k2‘: 3, ‘k1‘: 2, ‘k3‘: 4, ‘k‘: 1}

5、元素分類

有如下值li= [11,22,33,44,55,66,77,88,99,90],將所有大於 66 的值保存至字典的第一個key中,將小於 66 的值保存至第二個key的值中。
即: {‘k1‘: 大於66的所有值列表, ‘k2‘: 小於66的所有值列表}

li = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90]
dic = { }
l1 = [ ]
l2 = [ ]
for i in li:
    if i > 66:
        l1.append(i)
    if i < 66:
        l2.append(i)
#print(l1, l2)
dic.setdefault(‘k1‘, l1)
dic.setdefault(‘k2‘, l2)
print(dic)

效果:
{‘k2‘: [11, 22, 33, 44, 55], ‘k1‘: [77, 88, 99, 90]}

參考:
li = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90]
dic = {‘k1‘:[ ], ‘k2‘:[ ]}
for i in li:
    if i > 66:
        dic[‘k1‘].append(i)
    if i < 66:
        dic[‘k2‘].append(i)
print(dic)

擴展:(直接在for循環裏實施添加,而不是提前生成了一個字典)
li = [11, 22, 33, 44, 55, 77, 88, 99, 90]
result = {}
for row in li:
    result.setdefault(‘k1‘, [])
    result.setdefault(‘k2‘, [])
    if row > 66:
        result[‘k1‘].append(row)
    if row < 66:
        result[‘k2‘].append(row)
print(result)

6、輸出商品列表,用戶輸入序號,顯示用戶選中的商品
商品 li = ["手機", "電腦", ‘鼠標墊‘, ‘遊艇‘]
要求:1:頁面顯示 序號 + 商品名稱,如:
1 手機
2 電腦

2: 用戶輸入選擇的商品序號,然後打印商品名稱
3:如果用戶輸入的商品序號有誤,則提示輸入有誤,並重新輸入。
4:用戶輸入Q或者q,退出程序。

li = ["手機", "電腦", ‘鼠標墊‘, ‘遊艇‘]
while True:
for i in range(len(li)):
           print(str(i+1) + ‘ ‘ + li[i])
    sn = input(‘選擇商品序號(按Q/q回車退出):‘).strip().upper()
    if sn == ‘Q‘:
        print("請慢走")
        break
    if not sn.isdigit() or int(sn) > len(li):
        print(‘請重新輸入正確的商品序列號:‘)
        continue
    print(li[int(sn)-1])

上面的考慮還不夠周全,沒有考慮到輸入0的情況。
參考:
li = ["手機", "電腦", ‘鼠標墊‘, ‘遊艇‘]
while True:
    for i in li:
        print(‘{}\t{}‘.format(li.index(i)+1, i)) #格式化輸出,中間多了個空格符
    num = input(‘請輸入商品序號:q/Q退出‘ ).strip()
    if num.isdigit():
        num = int(num)
        if num > 0 and num <= len(li):
            print(li[num - 1])
        else:
            print(‘你輸入的選項超出範圍,請重新輸入‘)
    elif num.upper() == ‘Q‘:break
    else:
        print(‘輸入的有非法數字,請重新輸入‘)

python基礎數據類型-練習