09字符編碼


字典與集合練習題實操

字符編碼

  • 字符編碼發展史

  • 字符編碼實操

 

字典與集合練習題詳解

1.字典練習題
   1.將列表中大於等於66的元素放入字典k1鍵對應的列表中
  將列表中小於66的元素放入字典k2鍵對應的列表中
       nums = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90]
       dic = {
           'k1': [],
           'k2': []
      }

       for i in nums:
           if i >= 66:
               dic['k1'].append(i)
           else:
               dic['k2'].append(i)

       print(dic)
       
   2.s='hello jason jason say hello sb sb sb'
統計字符串中每個單詞出現的次數
      {'jason':2,...}
       # 第一種方法
       s = 'hello jason jason say hello sb sb sb'
       res = s.split()
       dic = {}
       for i in res:
           dic[i] = res.count(i)
       print(dic)
       
       # 第二種方法
       s = 'hello jason jason say hello sb sb sb'
       res = s.split()
       dic = {}
       for i in res:
           if i not in dic:
               dic[i] = 1
           else:
               dic[i] += 1
       print(dic)
       
       #第三種方法
       s = 'hello jason jason say hello sb sb sb'
       res = s.split()
       dic = {}
       for i in res:
           if dic.get(i) == None:
               dic[i] = 1
           else:
               dic[i] += 1

       print(dic)
       
2.集合練習題
 一.關系運算
     有如下兩個集合,pythons是報名python課程的學員名字集合,linuxs是報名linux課程的學員名字集合
     pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
     linuxs={'wupeiqi','oldboy','gangdan'}
     1. 求出即報名python又報名linux課程的學員名字集合
     2. 求出所有報名的學生名字集合
     3. 求出只報名python課程的學員名字
     4. 求出沒有同時這兩門課程的學員名字集合
     去重並且保留原來的順序
  l = [11,22,33,22,22,33,11,22,55,66,66,77,77]
       1.去重不保留順序
       2.去重並且保留順序
       
       
       pythons = {'alex', 'egon', 'yuanhao', 'wupeiqi', 'gangdan', 'biubiu'}
       linuxs = {'wupeiqi', 'oldboy', 'gangdan'}

       print('兩個班都報名的人員集合為:', pythons & linuxs)
       print('所有報名人員的集合為:', pythons | linuxs)
       print('只報名python的人員的集合為:', pythons - linuxs)
       print('沒有同時報兩個班的人員的集合為:', pythons ^ linuxs)

       l = [11, 22, 33, 22, 22, 33, 11, 22, 55, 66, 66, 77, 77]
       se = list(set(l))
       print('去重不保留順序:', se)

       l2 = []
       for i in l:
           if i not in l2:
               l2.append(i)

       print('去重保留順序:', l2)

字符編碼

計算機內部存儲數據都是以二進制數字的形式存儲
計算機基於電工作 而電信號只有高低電平兩種狀態
   也就意味着計算機的世界里只能識別兩種狀態
   我們人為的將高電平定義為數字1
   低電平定義為數字0
  0
   1    
   
   00
   01
   10
   11
   
   000
  ...
   
單位換算(重要)
比特位bit(二進制數的個數)
   8bit = 1bytes(字節)
   1024bytes = 1KB
   1024KB = 1MB
   1024MB = 1GB
   1024GB = 1TB
   1024TB = 1PB
 
字符編碼的研究僅限於文本文件(******)


為什么我們人類在使用計算機輸入字符的時候電腦展示是人類能夠看懂的字符
而計算機內部只識別01二進制
00001010
   00001101              
   計算機二進制 設定好的對應關系 人類的字符
   
字符編碼表
規定了人類的字符與數字之間的對應關系

字符編碼發展史

一家獨大
計算機是由美國人發明的 美國人需要計算機能夠識別英文
   所以發明了ASCII碼(字符編碼表)
  記錄了英文與數字的對應關系
      1bytes來表示所有的英文及符號
  8bit 256
                # 所有的英文字母及符號加起來其實也不會超過128種可能
群雄割據
中國
  中國人為了計算機能夠識別中文發明了GBK碼
       GBK碼表
      記錄了中文、英文與數字的對應關系
          2bytes來表示中文及符號
              16bit       65535
               1bytes來表示所有的英文及符號
                   # 生僻字可能會使用更多的bytes來表示
       
   日本
  日本人為了計算機能識別日文發明了shift_JIS碼
       shift_JIS碼表
      記錄了日文、英文與數字的對應關系
           1bytes來表示所有的英文及符號
         
   韓國
韓國人為了計算機能識別韓文發明了Euc_kr碼
       Euc_kr碼表
      記錄了韓文、英文與數字的對應關系
           1bytes來表示所有的英文及符號
天下一統
群雄割據導致數據交互不通暢(亂碼)
   unicode萬國碼
  兼容萬國字符
       所有的字符同意使用2bytes表示 不夠增加更多bytes
   utf8
  unicode transformation format
       英文還是用1bytes
       中文改用3bytes
  # 內存使用的編碼表是unicode 硬盤使用的是utf8
'''已經你們只需要記住文本文件編碼統一使用utf8即可'''

字符編碼實操

1.解決文件亂碼的核心
文件以什么編碼存的就以什么編碼取
2.編碼與解碼(重要)
編碼
  將人類的字符按照指定的編碼轉換成計算機能夠識別的數據
       encode()
   解碼
  將計算機能否識別的數據按照指定的編碼轉換成人類能夠讀懂的字符
       decode()
3.python解釋器默認編碼
python2默認的是ASCII碼
  在python2中定義字符串在前面加一個字母u
       文件頭指定編碼
      # -*- coding:utf8 -*-
           name = u'jason'
   python3默認的是utf8碼

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM