1. 程式人生 > >04-python基礎知識-資料型別

04-python基礎知識-資料型別

資料型別

進位制轉換

  • 十進位制
    • 基數0~9,逢10進1
    • 示例:123 = 1 * 10^2 + 2 * 10^1 + 3 * 10^0 = 100 + 20 + 3 = 123
  • 二進位制
    • 基數0和1,逢2進1
    • 示例:0b110100 = 2^5 + 2^4 + 2^2 = 32 + 16 + 4 = 52
    • 十進位制轉二進位制:除2取餘,倒序書寫
      • 22 = 0b10110
  • 八進位制
    • 基數0~7,逢8進1
    • 示例:0o123 = 1 * 8^2 + 2 * 8^1 + 3 * 8^0 = 64 + 16 + 3 = 83
    • 八進位制轉二進位制:八進位制的1位可以表示3位二進位制數
      • 0o123 = 0b 001 010 011
  • 十六進位制
    • 基數09、AF,逢16進1
    • 示例:0xAB = 10 * 16^1 + 11 * 16^0 = 160 + 11 = 171
    • 十六進位制轉二進位制:十六進位制的1位可以表示4位二進位制數
      • 0xABC = 0b 1010 1011 1100
  • 計算機中是以哪種進位制儲存資料的,為什麼?
    • 二進位制,因為計算機只識別二進位制。具體原因:
    • 穩定性高(只有0和1)、成本低(技術上容易實現)、與生活中的真假邏輯相吻合(便於解決生活中的實際問題)
  • 原碼反碼補碼
    • 如何儲存負數?
      • 最高位作為符號位:0表示正數、1表示負數
      • 雖然犧牲了最高位,但是解決了負數的表示問題,簡化了硬體設計
    • 原碼反碼和補碼:是針對負數而言的(正數的三碼一致)
      • 負數的反碼等於資料原碼的符號位不變,資料位取反
      • 負數的補碼等於對應的反碼加1
    • 計算機中的資料都是以補碼的形式儲存的

資料型別

  • 說明:程式語言中不同的資料型別都是為了解決生活中的實際問題而出現的,每種型別都有相關的運算。

  • python中常用資料型別:整形、浮點、布林、字串、列表、元組、字典、集合等

  • 整型(int):就是數學中的整數

  • 浮點(float):就是數學中的小數

    # 浮點
    b = 3.14
    print(b, type(b))
    
    # 科學計數法
    c = 3.1415926e-3
    print(c, type(c))
    
  • 複數(complex)

    # 複數:瞭解
    d = 2 + 3j
    print(d, type(d))
    
  • 布林(bool):對應於生活中的真假邏輯,只有兩個值True/False

  • 空(NoneType):空型別,只有一個值None

  • 字串(str):使用引號括起來的一串字元

    • 定義:一對單引號、一對雙引號、三對單引號、三對雙引號
    • 轉義:使用’’,使原來有特殊含義的字元變成普通字元,也可以在定義字串的前面加一個’r’
  • 列表(list):通過[]進行定義,可以存放一系列的任意資料,是一種容器型別

    lt = [1, 2, 'hello', 3.14, True]
    
    print(lt, type(lt))
    # 通過下標獲取元素,有越界問題
    print(lt[1])
    
  • 元組(tuple):通過()進行定義,可以作為容器存放任意資料,雖然不能修改元組的元素,但可以給儲存元組的變數賦值,元素是不可修改的

    tp = (1, 2, [3, 4, 5])
    print(tp, type(tp))
    # 也是通過下標進行訪問
    print(tp[2])
    
    # 定義一個元素的元組後面要新增一個,
    tp2 = (1,)
    print(tp2, type(tp2))
    
  • 集合(set):通過{}進行定義,可以作為容器存放任意資料,但是元素是不能重複的,且是無序的

    s1 = {'李白', '杜甫', '白居易', '王安石', '蘇軾', '李白'}
    s2 = {'李白', '李商隱', '李清照', '李賀', '李煜', '蘇軾'}
    
    # print(s1, type(s1))
    # 交集
    print(s1 & s2)
    # 並集
    print(s1 | s2)
    # 差集
    print(s1 - s2)
    print(s2 - s1)
    
    # 定義空集合不能使用{},這是留給定義空字典使用的
    # 應該使用set()
    # s3 = {}
    # print(type(s3))
    s4 = set()
    print(type(s4))
    

    集合經常用於去重操作

  • 字典(dict):通過{}進行定義

    • 元素是由鍵值對組成的
    • 鍵和值之間是有’:'進行連線
    • 鍵是唯一的,而值可以是任意的
    • 示例:
    d = {'name': 'dahua', 'age': 18}
    print(d, type(d))
    # 可以根據鍵獲取值
    print(d['name'])
    # 當鍵不存在時或報KeyError錯
    # print(d['height'])
    # 可以通過get方法根據鍵獲取值,
    print(d.get('age'))
    # 當鍵不存在時不會報錯,會返回None
    print(d.get('height'))
    # 可以設定預設值,有對應的鍵返回其值,沒有時返回設定的預設值
    print(d.get('weight', 75))
    
    # 統計元素個數,字典統計的是鍵值對個數
    print(len(d))
    print(len(s1))
    print(len(lt))
    print(len('helloworld'))
    

型別轉換

  • 隱式型別轉換:混合運算、條件判斷

  • 強制型別轉換:使用專門的函式進行轉換

    int:轉換為整型
    float:轉換為浮點
    str:轉換為字串
    list:轉換為列表
    tuple:轉換為元組
    set:轉換為集合
    dict:轉換為字典
    
  • 示例:

    # 轉換為整數
    # a = int(3.14)
    # 引數1:需要轉換的資料
    # base:資料的進位制型別,預設為十進位制
    # a = int('123', base=8)
    # a = int('abc', base=16)
    
    # 浮點
    # a = float(250)
    
    # 字串
    # a = str(123)
    
    # 列表
    # a = list('hello')
    # a = list((1, 2, 3))
    # a = list({1, 2, 3})
    # 可以轉換不會報錯,但是隻保留了鍵
    # a = list({'name': 'ergou', 'age': 18})
    
    # 元組
    # a = tuple([1, 2, 3])
    
    # 集合
    # a = set([1, 2, 3])
    
    # 字典
    lt = [('name', 'dahua'), ('age', 18)]
    a = dict(lt)
    print(a, type(a))
    

型別相關操作

  • 字串

    s1 = 'hello'
    s2 = 'world'
    # 可以使用'+'將字串拼接在一起
    s3 = s1 + s2
    print(s3)
    
    # '*'可以重複前面的字串若干次
    s4 = 'abc' * 3
    print(s4)
    
    # len函式統計字串長度
    print(len(s1))
    
    s = 'abcdefg'
    # 從開頭進行提取,下標從0開始
    print(s[0])
    # 從末尾進行提取,下標從-1開始
    print(s[-1])
    
    # 切片
    # 格式:s[開始:結束:步進]
    print(s[1:3])
    # 當一邊的邊界省略,則提取到改側的邊緣
    print(s[1:])
    print(s[:4])
    print(s[1:-2])
    print(s[:-3])
    print(s[-3:])
    
    # 指定步進值,預設為1
    print(s[::2])
    # 逆序提取
    print(s[::-1])
    
    # 格式化
    # %s:字串
    # %d:整型
    # %f:浮點
    # %c:字元
    name = '二狗'
    like = '大花'
    age = 18
    print('俺叫%s,暗戀%s,她今年%d歲' % (name, like, age))
    
    # python中特有的解決方案
    print('俺叫{},暗戀{},她今年{}歲'.format(name, like, age))
    print('俺叫{2},暗戀{1},她今年{0}歲'.format(name, like, age))
    print('俺叫{l},暗戀{n},她今年{a}歲'.format(n=name, l=like, a=age))
    
  • 列表

    lt = [1, 2, 3, 4, 5]
    
    print(lt[0])
    print(lt[-1])
    print(lt[1:3])
    print(len(lt))
    
    # 修改元素
    lt[0] = 100
    
    # 追加元素,將傳遞的元素作為一個整體(一個元素)追加到列表尾部
    lt.append(200)
    # lt.append([300, 400])
    # 將可迭代物件的元素展開新增到列表中
    lt.extend([300, 400])
    
    # 插入元素,在指定位置插入元素
    lt.insert(2, 250)
    lt.insert(4, 250)
    
    # 刪除元素
    # 根據索引號刪除
    del lt[0]
    # 根據值進行刪除,只會刪除第一個
    lt.remove(250)
    # 返回並刪除:返回並刪除指定下標的元素,預設是最後一個(把元素取出並繼續使用)
    ele = lt.pop(2)
    # print(ele)
    # print(lt)
    
    lt = [1, 2, 3, 4, 5, 3]
    # 查詢元組在列表中的索引號
    # 找到就會返回其索引號,即第一個出現的位置
    # 若不在列表中則會報錯
    print(lt.index(3))
    # 統計元素在列表中出現的次數
    print(lt.count(3))
    
    # 逆序
    lt.reverse()
    
    # 排序
    # reverse=True表示降序排序
    lt.sort(reverse=True)
    print(lt)
    

ASCII

  • 說明:美國資訊交換標準程式碼,就是用一個數字表示一個字元的規範

  • 轉換函式:

    # 字元 => ASCII
    print(ord('A'))
    # ASCII => 字元
    print(chr(97))