【Python】编程笔记2
一、字符串和編碼
1、字符編碼
過程:ASCII ==》Unicode ==》utf-8
- ASCII編碼:一個字節,127個字符;
 - Unicode將所有語言都統一到一套編碼中,解決了亂碼的問題。Unicode最常用的用 2 個字節表示一個字符(若要用到非常偏僻的字符,就需要4個字節);
 - UTF-8 解決了Unicode編碼空間浪費問題,將Unicode轉換為”可變長編碼“。具體來說,UTF-8 編碼把一個 Unicode 字符根據不同的數字大小編碼成 1-6 個字節,常用的英文字母被編碼成 1 個字節,漢字通常是 3 個字節,只有很生僻的字符才會被編碼成 4-6 個字節。
 
在計算機內存中,統一使用 Unicode 編碼,當需要保存到硬盤或者需要傳輸的時候,就轉換為 UTF-8 編碼。
2、字符串
Python3中字符產是以 Unicode 編碼的。
 ==》支持多語言
輸出結果
包含中文的 str(1)ord() 與 chr()
對于單個字符的編碼,有:
- ord()函數:獲取字符的整數表示;
 - chr()函數:把編碼轉換為對應的字符;
 
輸出結果
65 20013 B 文(2)str類型 ==》bytes類型
bytes類型的數據用帶 b前綴 的單引號或雙引號表示:
# 區分'ABC'和 b'ABC',前者是 str, # 后者雖然內容顯示得和前者一樣, # 但 bytes 的每個字符都只占用一個字節。 x = b'ABC'(3)encode()
以 Unicode 表示的 str 通過 encode()方法可以編碼為指定的 bytes。
- 純英文 str 可用ASCII編碼為bytes;
 - 含有中文的 str 可用 UTF-8 編碼為bytes;
 - 含有中文的 str 不能用ASCII編碼,因為中文編碼超出了ASCII編碼的范圍==》報錯
 
輸出結果
b'ABC' b'\xe4\xb8\xad\xe6\x96\x87' UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)(4)decode()
bytes ==》str
print(b'ABC'.decode('ascii')) print(b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8'))輸出結果:
ABC 中文- len()函數:計算str包含的字符數
 
輸出結果:
3 2 3 6 6==》1 個中文字符經過 UTF-8 編碼后通常會占用 3 個字節,而 1 個英文字符只占用 1 個字節。
==》為了避免亂碼問題,應當始終堅持使用 UTF-8 編碼對 str 和 bytes 進行轉換。
3、utf-8編碼讀取
#! /usr/bin/env python3 # -*- coding:utf-8 -*-解讀:
二、格式化
print('Hello, %s' % 'world') print('Hi, %s, you have $%d.' % ('Michael', 1000000))輸出結果
Hello, world Hi, Michael, you have $1000000.如果只有一個 %? ,括號可以省略。
1、常用的占位符
| %d | 整數 | 
| %f | 浮點數 | 
| %s | 字符串 | 
| %x | 十六進制整數 | 
2、格式控制
- 格式化整數和浮點數還可以指定是否補 0 和整數與小數的位數:
 
輸出結果
3-01 3.15若不確定用什么==》使用%s,轉化為字符串
三、list 和 tuple
1、list 列表
list 是一種有序的集合,可以隨時添加和刪除其中的元素。
classmates = ['Michael','Bob','Tracy'] print(classmates)## len() 函數獲取list print(len(classmates))## 用索引進行元素的訪問 print(classmates[0]) print(classmates[1]) print(classmates[2]) # # 當索引超出了范圍時, Python 會報一個 IndexError 錯誤 # print(classmates[3]) print(classmates[-1]) # 取最后一個元素 print(classmates[-2]) # 取倒數第 2 個## 添加元素 classmates.append('Adam') # 添加元素到末尾 print(classmates) classmates.insert(1, 'Jack') # 在指定位置插入元素,eg:索引號為 1 的位置 print(classmates)## 刪除元素 classmates.pop() # 刪除末尾元素 print(classmates) # 刪除指定位置的元素,pop(i),i為索引位置 classmates.pop(1) print(classmates)## 元素替換 classmates[1] = 'Sarah' print(classmates)## list中元素的數據類型可以不同,可以嵌套 L = ['Apple', 123, True] s = ['python', 'java', ['asp', 'php'], 'scheme'] print(len(s))輸出結果
['Michael', 'Bob', 'Tracy'] 3 Michael Bob Tracy Tracy Bob ['Michael', 'Bob', 'Tracy', 'Adam'] ['Michael', 'Jack', 'Bob', 'Tracy', 'Adam'] ['Michael', 'Jack', 'Bob', 'Tracy'] ['Michael', 'Bob', 'Tracy'] ['Michael', 'Sarah', 'Tracy'] 42、tuple
tuple 一旦初始化就不能修改。
 也就是,tuple 的每個元素,指向永遠不變。
輸出結果
Micjael Tracy () (1,) ('a', 'b', ['X', 'Y'])四、條件判斷
1、條件判斷—— if 語句
注意:
- 不要少寫冒號;
 - elif 是else if 的縮寫;
 
示例1
age = 20 if age <= 6:print('kid') elif age <= 18:print('teenager') else:print('adult')輸出結果
adult示例2
if x:print('True') else:print('Fasle')分析:只要 x 是非零數值、非空字符串、非空 list 等,就判斷為 True,否則為 False。
注意:input() 函數
birth = input('birth:') if birth < 2000:print('00前') else:print('00后')報錯
TypeError: '<' not supported between instances of 'str' and 'int'input()返回的數據類型是 str, str 不能直接和整數比較,必須先把 str 轉換成整數。
修改版本:str類型轉換為int類型
birth = input('birth:') if int(birth) < 2000:print('00前') else:print('00后')2、循環
(1)for … in 循環
依次把 list 或 tuple 中的每個元素迭代出來。
names = ['Michael', 'Bob', 'Tracy'] for name in names:print(name)輸出結果
Michael Bob Tracy常用:range() 函數
sum = 0 # range(101):生成 0-100 的整數序列 for x in range(101):sum = sum + x print(sum)輸出結果
5050(2)while 循環
只要條件滿足,就不斷循環,條件不滿足時退出循環。
sum = 0 n = 99 while n > 0:sum = sum + nn = n - 2 print(sum)==》2500
總結
以上是生活随笔為你收集整理的【Python】编程笔记2的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 【Python】编程笔记1
 - 下一篇: 金融贷款逾期的模型构建1