一、字符串和编码
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 编码的。
==》支持多语言
print('包含中文的 str')
输出结果
包含中文的 str
(1)ord() 与 chr()
对于单个字符的编码,有:
- ord()函数:获取字符的整数表示;
- chr()函数:把编码转换为对应的字符;
print(ord('A'))
print(ord('中'))
print(chr(66))
print(chr(25991))
输出结果
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编码的范围==》报错
print('ABC'.encode('ascii'))
print('中文'.encode('utf-8'))
print('中文'.encode('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包含的字符数
print(len('ABC'))
print(len('中文'))
## str类型
print(len(b'ABC'))
print(len(b'\xe4\xb8\xad\xe6\x96\x87'))
print(len('中文'.encode('utf-8')))
输出结果:
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 -*-
解读:
- 第一行注释是为了告诉 Linux/OS X 系统,这是一个 Python 可执行程序,Windows 系统会忽略这个注释;
- 告诉 Python 解释器,按照 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 和整数与小数的位数:
print('%2d-%02d' % (3, 1))
print('%.2f' % 3.1415926)
输出结果
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']
4
2、tuple
tuple 一旦初始化就不能修改。
也就是,tuple 的每个元素,指向永远不变。
classmates = ('Micjael', 'Bob', 'Tracy')
## 因为初始化之后不能修改,所以没有append()、insert()这样的方法。
## 可以访问
print(classmates[0])
print(classmates[-1])
## 空的 tuple
t = ()
print(t)
## 定义只有 1 个元素的 tuple
# Python 规定:按小括号进行计算,计算结果自然是 1。
t = (1,)
print(t)
## “可变的”tuple
t = ('a', 'b', ['A', 'B'])
t[2][0] = 'X'
t[2][1] = 'Y'
print(t)
输出结果
Micjael
Tracy
()
(1,)
('a', 'b', ['X', 'Y'])
四、条件判断
1、条件判断—— if 语句
注意:
- 不要少写冒号;
- elif 是else if 的缩写;
if <条件判断1>:
<执行1>
elif <条件判断2>:
<执行2>
elif <条件判断3>:
<执行3>
else:
<执行4>
示例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 + n
n = n - 2
print(sum)
==》2500