一.输入和输出, 以及格式控制
输出print()
print 遇到逗号','会输出一个空格
>>> print('hello', 'python', 'world')
hello python world
输入input()
可以将输入的值赋给一个变量
# 声明变量名name
>>> name = input()
james
>>> name
'james'
格式控制符
这一点和c语言基本一致:
-
'%s': 表示字符串类型输出控制 -
'%d': 表示整数类型 -
'%f': 表示浮点类型 -
'%%':表示 %,相当于转义
当然也可以对输出的类容进行进一步的控制:
-
'%2d': 如果只有1位数,前面用空格补齐 -
'%02d': 如果只有1位数,前面用0补齐 -
%.2f: 保留2位小数 -
float('{0:.2f}'.format(x)): 保留2位小数
示例:
>>> '%2d-%02d' % (3, 1)
' 3-01'
>>> '%.2f' % 3.14156
'3.14'
>>> float('{0:.2f}'.format(3.141569))
3.14
二.代码规范
python中使用 # 作为注释的标志
当语句以: 结尾时, 使用缩进表示代码块,一般采用4个空格作为规范,不要混用Tab和空格,否则在不同的编辑器中可能结果不一样
a = -12
if a >= 0:
print(a)
else:
print(-a)
三.数据类型
1.布尔值
python中bool值使用 True 和 False 表示, 注意首字母大写!!!
>>> True
True
>>> 3 < 2
False
2.list 类型 (相当于数组)
定义方式:
>>> names = ['kobe', 'durant']
>>> len(names)
2
元素类型和js一样,可以是不同类型的:
>>> things = ['apple', 4, ['great'], True, None]
索引和javascript的不同,js中访问不在范围内的索引不会报错,给出undefined,而python中会报错;另外python中可以使用 '-1' 表示最后一个元素,倒着取出元素:
>>> names[3]
IndexError: list index out of range
>>> names[-1]
'durant'
>>> names[-2]
'kobe'
# 倒着数超过界限也会报错
>>> names[-2]
IndexError: list index out of range
方法:
- append(): 再后面添加一个元素,js中使用push
- insert(index, element): 在指定的索引位置插入元素,和js中的splice有点像
- pop([index]): 这个删除元素,并且返回被删除的元素, 索引参数可选,即删除指定索引位置的元素,这个和js类似,但是更强大一点
- del: 直接删除该元素,比如 del names[1]
- remove(value): 根据list中的值来删除该元素 names.remove('kobe')
- sort(): 排序(默认为升序)
- reverse(): 反序
# 尾部添加
>>> names.append('james')
['kobe', 'durant', 'james']
# 指定位置插入insert()
>>> names.insert(1, 'harden')
['kobe', 'harden', 'durant', 'james']
# 删除尾部元素
>>> names.pop()
['kobe', 'harden', 'durant']
# 删除指定索引位置上的元素
>>> names.pop(0)
['harden', 'durant']
>>> len(names)
2
# 直接删除该元素
>>> del names[1]
['harden']
# 根据值来删除
>>> names.remove('harden')
[]
# sort()排序
# sort(reverse=False) 可选参数reverse默认值为False
>>> s = ['c', 'a', 'b']
>>> s.sort()
>>> s
['a', 'b', 'c']
3.tuple 元组
这个和list很像,也是有序列表,tuple一旦初始化就不能修改,所以没有list上面的方法,声明方式有点奇怪,使用(), 获取元素还是使用索引[]
>>> names = ('kobe', 'durant')
>>> names[0]
'kobe'
注意陷阱:当元组中只有一个元素时,会和其它的一些声明产生冲突,比如
# 结果声明的是数值类型
>>> numbers = (1)
>>> numbers
1
# 结果声明的是字符串类型
>>> names = ('james')
>>> names
'james'
为了避免冲突,在单个元素声明可以再后面添加一个逗号',':
>>> numbers = (1,)
>>> numbers
(1,)
>>> names = ('james',)
>>> names
('james',)
# 声明一个空的元组
>>> t = ()
>>> t
()
当然不能该表是指的是指向的指针不能改变:
# 元组的第3个元素是list
>>> t = ('a', 'b', ['c', 'd'])
>>> t[2][0] = 'x'
>>> t[2][1] = 'y'
>>> t
('a', 'b', ['x', 'y'])
3.dict: 字典
这个类型相当于js中的Map数据类型,使用键值对,具有很快的查找速度,相应的会占用大量的内存。
值得注意的是
- dict内部的存放顺序跟key的放入顺序是没有关系的
- 存放的key必须是不可变对象,比如数值类型和str类型,list类型则为可变类型,不用作key
>>> dic = {'kobe': 80, 'james': 90}
>>> dic['kobe']
80
如果一个key不在字典里面,直接选取会报错,所以取之前应先判断字典中是否存在该key,有2中方法:
- someKey in dic: 返回布尔值,这点和js中的用法很像
- dic.get(someKey,[selfDefineReturnValue]): 如果key不存在则返回None,或者自定义返回值
# 读取不存在key,会报错
>>> dic['jordan']
KeyError: 'jordan'
# 使用 'in' 判断
if 'jordan' in dic
print(dic['jordan'])
else:
print('there is no jordan in dic')
# 使用 'get()' 方法判断
>>> dic.get('jordan')
None # 当然一般不会显示None
# 自定义返回值
>>> dic.get('jordan', -1)
-1
方法:
- pop(key) 删除某个键值对
- update({key: value}): 添加新的键值对
# 删除某个key
>>> dic.pop('james')
>>> dic
{'kobe': 80}
# 添加新的key-value
# 第一种当然是直接添加
>>> dic['jordan'] = 100
{'kobe': 80, 'jordan': 100}
# 使用update()进行添加
>>> dic.update({'wesbrook': 120})
>>> dic
{'kobe': 80, 'jordan': 100, 'wesbrook': 120}
4.set 类型
这个类型和js中的Set类型一样,存入一组key的集合,set中没有重复的key,创建set:
# 传入list作为参数
s = set(list)
>>> s = set([1, 2, 3, 3])
>>> s
{1, 2, 3} # 除去重复的key
方法:
- add(key): 添加key
- remove(key): 删除key
-
&: 求2个set集合的公共部分 -
|: 求2个set的并集 -
-: 这个是操作符重载的方法,第一个set将2个set中相同的部分去掉
# add(key)
>>> s = set([1, 2, 3])
>>> s.add(4)
>>> s
{1, 2, 3, 4}
# remove(key)
# 当然如果key不存在会报错
>>> s.remove(4)
>>> s
{1, 2, 3}
# 求交集
>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s1 & s2
{2, 3}
# 求并集
>>> s1 | s2
{1, 2, 3, 4}
# 第一个set 去除2个set之间共同的部分
>>> s1 - s2
{1}
逻辑操作符
python中也有3种,使用 and, or, not 表示
>>> 1 > 2 and 3 > 2
False
空值
空值使用 None 表示
四.运算逻辑
除法
除法计算结果为浮点数,即使两个数恰好整除
>>> 9 / 3
3.0
地板除法 //:相当于除完之后再使用'Math.floor()'一样, 得到的永远都是整数
>>> 10 // 3
3
条件语句
python的条件语句和其它语言有所不同,采用下面的格式:
if a:
....
elif b:
....
elif c:
....
else:
....
注意 : 不能省略, else if 简写为 elif
a = 10
if a >= 90:
print('优秀')
elif a >= 80:
print('良好')
elif a >= 60:
print('及格')
else:
print('不及格')
当 x 为 非零数值, 非空字符串, 非空list等,下列判断返回True, 否则false
if x:
print('True')
循环语句 for...in...:
for...in后面不要忘记表示块状语句的 冒号':'
>>> names = ['kobe', 'durant', 'james']
>>> for name in names:
>>> print(name)
'kobe'
'durant'
'james'
range()
这个数学函数表示一个区域,默认起始为0,比如可以将range区域生成一个有序的list
>>> list(range(5))
[0, 1, 2, 3, 4]
计算 0-100的和,可以这样写:
>>> sum = 0
>>> for x in range(101):
>>> sum += x
>>> print(sum) # 5050
另一种循环的方式是使用
while语句
# 求0-99之间奇数的和
sum = 0
n = 99
while n > 0:
sum += n
n = n -2
print(sum) # 2500
和循环一起的还有break, continue
break 表示退出循环, continue表示跳过满足条件的当次循环,这个所有语言都是一致的
# break
n = 1
while n < 10:
if n > 5:
break
print(n)
n += 1
# continue
n = 0
while n < 10:
if n % 2 == 0:
continue
print(n)
n += 1
五.字符编码和格式化
- 最原始的是采用
ASCII编码,1个字节,但是只能表示 '0-127' 之间的字符 -
unicode编码,则将所有编码进行统一,2个字节 -
UTF-8编码,由于英文字符只需要1个字节,使用unicode对全英文字母会造成浪费,'UTF-8'对于英文一般是1个字节,对于中文一般是3个字节,可以说'UTF-8'编码包含了'ASCII'编码
在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者传输时就转换为UTF-8编码;而在浏览网页时,服务器会把动态的Unicode内容转换为UTF-8再传输到浏览器
python的字符串str
对于当个字符,python提供了2个方法:
-
ord(): 获取单个字符,转换为整数表示,相当于js中的 charCodeAt() 方法 -
chr(): 将编码转换为对应的字符,相当于js中的 String.fromCharCode()
>>> ord('A')
65
>>> chr(66)
'B'
其它字符串方法:
-
int(): 将整型数字字符串转换为整型 -
float(): 将浮点数字字符串转换为浮点数 -
str(): 转换为字符串 -
replace(): 将某个值用另一个值取代,纯函数,实际上是生成了一个新的字符串
a = input('enter a integer num: ')
s = int(a)
if a > 10:
print('num greater than 10')
# replace()
>>> a = 'abc'
>>> b = a.replace('a', 'A')
>>> a
'abc'
>>> b
'Abc' # 可以看出来replace()实际上是生成了另一个字符串
bytes 单位
在python中字符串类型是 str, 在内存中以Unicode表示,一个字符由多个字节组成。在网络或者磁盘中保存时,需要把 str 变为以字节为单位
python对 bytes 类型的数据用带 b 前缀的单引号或双引号表示:
x = b'ABC'
注意 'ABC' 和 b'ABC' 的区别:前者为str,后者和前者显示的内容一样,当时bytes的每一个字符只占用1个字节
encode() 和 decode()
编码及解码,可以使用 'encode()'方法编码为指定的bytes
>>> 'ABC'.encode('ascii')
b'ABC'
>>> '中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'
我们从网络或者磁盘上读取的字节流,读到的数据是bytes,将bytes变为str,需要使用 decode()
>>> b'ABC'.decode('ascii')
'ABC'
len() 计算str的字符数或 bytes的字节数
比如:
# 以str计算字符数
>>> len('ABC')
3
# bytes字节数
>>> len(b'ABC')
3
>>> len('中文')
2
# 转换为utf-8编码
>>> len('中文'.encode('utf-8'))
6
一个中文字符经过UTF-8编码后通常占用3个字节,在操作字符串时,我们经常遇到 str 和 bytes 的相互转换,为了避免乱码,应坚持使用 UTF-8对2者进行转换,可以在文本的开头写上下面这句注释:
# -*- coding: utf-8 -*-
总结
本章主要是python的基本语法,学习起来也比较简单,和其它语言差别也不是很大,就是书写规范上有所不同,主要有以下几个方面的内容:
- input(), output()函数,及其格式控制符
- 数据类型:数值类型,布尔类型(True和False),空值类型None 字符串类型str, list(类似array), tuple(元组), dict(字典类型,键值对,类似Map), set(类似Set类型), 以及各数据类型对应的方法
- 逻辑操作:条件语句(if...elif...else), 循环语句(for...in, while, break, continue)
- 逻辑运算符:使用英语 and or not 3个关键词
- 块状语句使用 : 和 缩进表示
- python中字符串编码问题
- 常用函数:len(), ord(), chr(), range()等
本文参考廖雪峰老师python教程的学习总结,更多参考 廖雪峰python