day6 編碼

01昨日內容回顧

dict: dic = {'name':'alex'}
增:dic['age'] = 21 存在就覆蓋
dic.setdefault() 沒有就增長

刪除:pop()按照key刪除,有返回值
    clear
    del dic['name']
    popitem()隨機刪除 返回的是元祖

改  update

查
dic.keys()
dic.values()
dic.items()

for k,v in dic.items():
    print(k,v)

dic.get(key,None)

 02做業講解

# 將全部大於66的值保存到字典的第一個key中,將全部小於66的保存到字典的第二個key中
# 即:{"k1":大於66的全部值的列表,'k2':小於66的全部值的列表}
li=[11,22,33,44,55,66,77,88,90]
k1=[]      #建立一個保存大於66的值空列表
k2=[]
dic={}
for  i in li:
    if i == 66:
        continue
    if i>66:
        k1.append(i)

    else:
        k2.append(i)
dic["k1"]=k1
dic["k2"]=k2
print(dic)

<<<
{'k1': [77, 88, 90], 'k2': [11, 22, 33, 44, 55]}
"""輸出商品列表,用戶輸入序號,顯示用戶選擇的商品。
商品li=["手機","電腦","鼠標墊","遊艇"]
要求:1.頁面顯示序號加商品名稱 如:1 手機
      2.用戶輸入選擇的商品序號,而後打印商品名稱
      3.若是用戶輸入的商品序號有誤,提示輸入有誤,並從新輸入
      4.用戶輸入q或者Q退出程序
"""
flag = True
while flag:
    li=["手機","電腦","鼠標墊","遊艇"]
    for i in li:
        # print("%s,\t%s" %(li.index(i)+1,i))
        print("{},\t{}".format(li.index(i)+1,i))
    a=input("請輸入商品序號:")

    if a.isdigit():
        if int(a)>0 and int(a)<len(li):
            print(li[int(a) - 1])
        else:
            print("請從新輸入")
    elif a.upper()=='Q':
        break
    else:
        print("請輸入正確的數字")

<<<
1,    手機
2,    電腦
3,    鼠標墊
4,    遊艇
請輸入商品序號:1
手機
1,    手機
2,    電腦
3,    鼠標墊
4,    遊艇
請輸入商品序號:

python2 python3

'''
#python2
#print()  print 'abc'
#range()   xrange() 生成器
# raw_input()

#python3
#print('abc')
#range()
# input()
li1 = [1,2,3]
li2 = li1
li3 = li2
print(id(li1),id(li2))

代碼塊的緩存機制的適用範圍: int(float),str,bool。python

 
 

int(float):任何數字在同一代碼塊下都會複用。git

 
 

bool:True和False在字典中會以1,0方式存在,而且複用。緩存

 

大前提:小數據池也是隻針對 int(float),str,bool。app

小數據池是針對不一樣代碼塊之間的緩存機制!!!函數

 

代碼塊:一個模塊,一個函數,一個類,一個文件等都是一個代碼塊。編碼

而做爲交互方式輸入的每一個命令都是一個代碼塊spa

若是在同一代碼塊下,則採用同一代碼塊下的緩存機制。code

若是是不一樣代碼塊,則採用小數據池的駐留機制orm

#數字,字符串 小數據池
#數字的範圍 -5 -- 256
#字符串:1,不能有特殊字符
#        2,s*20 仍是同一個地址,s*21之後都是兩個地址
i1 = 6
i2 = 6
print(id(i1),id(i2))
i1 = 300
i2 = 300
print(id(i1),id(i2))

<<<
1711899107912 1711899107912
140723552564208 140723552564208
1711899334704 1711899334704
# 剩下的 list dict tuple set
l1 = [1,]
l2 = [1,]
print(l1 is l2)

s = '中國'
print(s,type(s))
s1 = '中國'
s1=s1.encode()
print(s1,type(s1))

s1 = 'alex'
# encode 編碼,如何將str --> bytes, ()
s11 = s1.encode('utf-8')
s12 = s1.encode('gbk')
print(s11)
s2 = '中國'
s22 = s2.encode('utf-8')
s23 = s2.encode('gbk')
print(s22)

<<<
False
中國 <class 'str'>
b'\xe4\xb8\xad\xe5\x9b\xbd' <class 'bytes'>
b'alex'
b'\xe4\xb8\xad\xe5\x9b\xbd'

03 小知識點總結(以上)

04 編碼總結

ascii
            A : 00000010  8位 一個字節

unicode     A : 00000000 00000001 00000010 00000100 32位  四個字節
            中:00000000 00000001 00000010 00000110 32位  四個字節


utf-8      A :  00100000 8位 一個字節
          中 :  00000001 00000010 00000110 24位 三個字節


gbk        A : 00000110  8位 一個字節
         中  : 00000010 00000110 16位 兩個字節
1,各個編碼之間的二進制,是不能互相識別的,會產生亂碼。
2,文件的儲存,傳輸,不能是unicode(只能是utf-8 utf-16 gbk,gb2312,asciid等)

py3:
    str 在內存中是用unicode編碼。
        bytes類型
        對於英文:
             str  :表現形式:s = 'alex'
                    編碼方式: 010101010  unicode
            bytes :表現形式:s = b'alex'
                    編碼方式: 000101010  utf-8 gbk。。。。

        對於中文:
             str  :表現形式:s = '中國'
                    編碼方式: 010101010  unicode
            bytes :表現形式:s = b'x\e91\e91\e01\e21\e31\e32'
                    編碼方式: 000101010  utf-8 gbk。。。。
相關文章
相關標籤/搜索