廖雪峰Python之Python基础
数据类型和变量
转义字符
\n表示换行
\t表示制表符
\表示的字符就是
r’‘表示’‘内部的字符串默认不转义
‘’’…’’'表示多行内容
>>> print('''line1
... line2
... line3''')
一个布尔值只有True、False两种值
布尔值可以用and、or和not运算。
>>> if age >= 18:
print('adult')
else:
print('teenager')
None不能理解为0,因为0是有意义的,而None是一个特殊的空值
字符串和编码
ord()函数获取字符的整数表示
chr()函数把编码转换为对应的字符
>>> ord('A')
65
‘ABC’和b’ABC’,前者是str,后者虽然内容显示得和前者一样,但bytes的每个字符都只占用一个字节
纯英文的str可以用ASCII编码为bytes,内容是一样的
含有中文的str可以用UTF-8编码为bytes(不能用ASCII)
str通过encode()方法可以编码为指定的bytes
>>> 'ABC'.encode('ascii')
b'ABC'
要把bytes变为str,就需要用decode()方法
>>> b'ABC'.decode('ascii')
'ABC'
bytes中只有一小部分无效的字节,可以传入errors='ignore’忽略错误的字节:
>>> b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore')
'中'
len()函数计算的是str的字符数,如果换成bytes,len()函数就计算字节数
格式化
%d 整数
%f 浮点数
%s 字符串
%x 十六进制整数
>>> 'Hello, %s' % 'world'
'Hello, world'
format()方法,它会用传入的参数依次替换字符串内的占位符{0}、{1}……
>>> 'Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.125)
'Hello, 小明, 成绩提升了 17.1%'
使用list和tuple
list是一种有序的集合,下例classmates就是一个list
>>> classmates = ['Michael', 'Bob', 'Tracy']
classmates
['Michael', 'Bob', 'Tracy']
用索引来访问list中每一个位置的元素,记得索引是从0开始的
>>> classmates[0]
'Michael'
最后一个元素:
>>> classmates[-1]
'Tracy'
可以往list中追加元素到末尾
>>> classmates.append('Adam')
也可以把元素插入到指定的位置,比如索引号为1的位置
>>> classmates.insert(1, 'Jack')
要删除list末尾的元素,用pop()方法:
>>> classmates.pop()
'Adam'
要删除指定位置的元素,用pop(i)方法,比如删掉第二位:
>>> classmates.pop(1)
替换:
>>> classmates[1] = 'Sarah'
tuple和list非常类似,但是tuple一旦初始化就不能修改
>>> classmates = ('Michael', 'Bob', 'Tracy')
只有1个元素的tuple定义时必须加一个逗号
>>> t = (1,)
特例:
>>> t = ('a', 'b', ['A', 'B'])
t[2][0] = 'X'
t[2][1] = 'Y'
则输出
>>> t
('a', 'b', ['X', 'Y'])
因为变的是list的元素,而不是list本身(作为tuple的元素)
条件判断
if语句
if age >= 18:
...
else:
...
还可以用elif做更细致的判断
if <条件判断1>:
<执行1>
elif <条件判断2>:
<执行2>
elif <条件判断3>:
<执行3>
else:
<执行4>
再议 input
input里要先把str转换成整数
s = input('birth: ')
birth = int(s)
循环
for…in循环——依次打印
names = ['Michael', 'Bob', 'Tracy']
for name in names:
print(name)
range()函数,可以生成一个整数序列
>>> list(range(5))
[0, 1, 2, 3, 4]
while循环——只要条件满足,就不断循环,比如一百以内的和
sum = 0
n = 99
while n > 0:
sum = sum + n
n = n - 2
print(sum)
break语句可以提前退出循环
n = 1
while n <= 100:
if n > 10: # 当n = 11时,条件满足,执行break语句
break # break语句会结束当前循环
print(n)
n = n + 1
print('END')
continue语句,跳过当前的这次循环,直接开始下一次循环,比如只打印奇数
n = 0
while n < 10:
n = n + 1
if n % 2 == 0: # 如果n是偶数,执行continue语句
continue # continue语句会直接继续下一轮循环,后续的print()语句不会执行
print(n)
不要滥用break和continue语句
使用dict和set
用dict实现,只需要一个“名字”-“成绩”的对照表,直接根据名字查找成绩
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95
把数据放入dict的方法,除了初始化时指定外,还可以通过key放入
>>> d['Adam'] = 67
>>> d['Adam']
67
多次对一个key放入value,后面的值会把前面的值冲掉
要避免key不存在的错误,有两种办法,通过in判断key是否存在:
>>> 'Thomas' in d
False
二是通过dict提供的get()方法,如果key不存在,可以返回None,或者自己指定的value:
>>> d.get('Thomas')
>>> d.get('Thomas', -1)
-1
要删除一个key,用pop(key)方法,对应的value也会从dict中删除:
>>> d.pop('Bob')
75
>>> d
{'Michael': 95, 'Tracy': 85}
创建一个set(集合性,不重、无序),需要提供一个list作为输入集合
> s = set([1, 2, 3])
通过add(key)方法可以添加元素到set中
> s.add(4)
通过remove(key)方法可以删除元素
交: s1 & s2
并:s1 | s2
str是不变对象,而list是可变对象。
>>> a = 'abc'
>>> a.replace('a', 'A')
'Abc'
>>> a
'abc'