输入输出
- 输出
- 普通输出
print('hello,world')
- 多个输出,用
,
隔开
print('First','Second','Third')
- 打印整数,计算结果
print(300)
print(100+300)
- 输入
- 无提示输入
name = input()
- 有提示输入
name = input('please enter your name:')
数据类型和变量
- 整数
Python可以处理任意大小的整数,当然包括负整数。同数学写法:
1
,100
,-8080
Python整数没有大小限制
- 浮点数
数学写法:
1.23
,3.14
;科学计数法,把10用e代替,0.000012写成1.2e-5
Python的浮点数也没有大小限制,但是超出一定范围就直接表示为inf
(无限大)
- 字符串
以单引号
''
或双引号""
括起来的任意文本。
- 如果
'
本身也是一个字符,就可以用""
括起来文本- 支持转义字符
- 若很多字符需要转义,就需要加很多
\
,为了简化,允许用r''
表示''
内部字符串默认不转义- 若字符串内部有很多换行,为了简化,允许使用
'''...'''
的格式表示多行内容:print('''line1...line2...line3''')
- 布尔值
- 用
True
、False
表示布尔值,注意大小写- 通过布尔运算计算出来
布尔值可以用
and
,or
,not
运算
- 空值
空值在Python中是一个特殊值,用
None
表示
None
不能理解为0
,0
是有意义的。
- 变量
- 变量名:大小写应为、数字和
_
的组合,且不能用数字开头- 动态语言:在Python中,等号
=
是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量。
- 常量
在Python中,通常用全部大写的变量名表示常量:
PI
除法
/
:除法计算结果是浮点数,即使是两个整数恰好整除,结果也是浮点数//
地板除:除法只取结果整数部分%
:余数运算,可以得到两个整数相除的余数
字符串和编码
- 字符编码
在计算机内存中,统一使用Unicode编码;当需要保存到硬盘或需要传输的时候,就转换为UTF-8编码
- 用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件。
- 浏览网页时,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器。
- Python的字符串
- 字符串是以Unicode编码,支持多语言
- 单个字符的编码:
ord()
函数获取字符的整数表示,chr()
函数把编码转换为对应的字符
a = ord('A')
b = chr(25991)
print(a,b)
66 文
- Python的字符串类型是
str
,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或保存到磁盘上,就需要把str
变为以字节为单位的bytes
。bytes
类型的数据用带b
前缀的单引号或双引号表示
a = b'ABC'
- `ABC`和b'ABC'内容一样,但`bytes`的每个字符都只占一个字节
- 在`bytes`中,无法显示为ASCII字符的字节,用`\x##`表示
- 以Unicode表示的
str
通过encode()
方法可以编码为指定的bytes
a = 'ABC'.encode('ascii')
b = '中文'.encode('utf-8')
print(a,b)
b'ABC' b'\xe4\xb8\xad\xe6\x96\x87'
- 纯英文`str`可以用`ASCII`编码为`bytes`,内容一样的。
- 含中文的`str`可以用`UTF-8`编码为`bytes`。无法用`ASCII`编码,因为中文编码超出`ASCII`编码范围。
- 从网络或磁盘上读取了字节流,那么读到的数据就是
bytes
。要把bytes
变为str
,就需要用decode()
方法。
a = b'ABC'.decode('ascii')
b = b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
print(a,b)
- 若`bytes`包含无法解码的字节,`decode()`方法会报错
- 若`bytes`中只有一小部分无效的字节,可以传入`errors='ignore'`忽略错误字节
b = b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8',errors='ignore')
- 计算
str
包含多少个字符,用len()
函数。如果换成bytes
,就是计算字节数 - 在操作字符串是,为了避免
str
和bytes
互相转换乱码问题,应始终坚持UTF-8编码 - 由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,需要指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按照UTF-8编码读取,在文件开头写上这两行
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
第一行:告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释
第二行:告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输入可能会有乱码。
- 格式化
Python中,采用的格式化方式和C语言是一致的,用%
实现
- 不确定用什么,
%s
永远起作用,它会把任何数据类型转换为字符串 - 转义:
%%
表示%
%d 整数
%f 浮点数
%s 字符串
%x 十六进制整数
- format()
a = 'Hello, {0}, 成绩提升了{1:.1f}%'.format('小明',17.125)
print(a)
Hello, 小明, 成绩提升了17.1%
format()方法,会用传入的参数依次替换字符串内的占位符`{0}、{1}……`
使用list和tuple
- list
内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
classmates = ['Michael','Bob','Tracy']
print(classmates)
# 获取list元素个数
print(len(classmates))
# 用索引来访问list中每一个位置的元素,索引从0开始.确保索引不越界
print(classmates[0])
'''
要取最后一个元素,除了计算索引外,还可以用-1做索引,直接获取最后一个元素.
依次类推,可以获取倒数第二个,倒数第三个
'''
print(classmates[-1])
# 在末尾添加元素
classmates.append('Tom')
print(classmates)
# 在指定位置添加元素
classmates.insert(1,'Jack')
print(classmates)
# 删除末尾的数据
classmates.pop()
print(classmates)
# 删除指定位置数据
classmates.pop(1)
print(classmates)
# 替换元素
classmates[1] = 'Alex'
print(classmates)
# list里面的元素类型可以不同
a = [123,True,'Tom']
print(a)
# list中也可以有另一个list
b = ['pop', 123, ['app','iOS']]
print(b)
# 多维数组
c = ['app','iOS']
d = ['pop', c, 'push']
print(c[1],d[1][1])
# 如果list中一个元素没有,就是一个空的list,它的长度为0
f = []
print(len(f))
- tuple
另一种有序列表叫元祖:tuple。一旦初始化就不能修改
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
a = ('Michael', 'Bob', 'Tracy')
print(a)
# 当定义一个tuple时,在定义的时候,tuple的元素就必须确定下来
b = (1,2)
print(b)
# 定义一个空的tuple
c = ()
print(c)
'''
定义一个只有1个元素的tuple
()既可以表示tuple,又可以表示数学公式的小括号。
为了避免歧义,定义一个元素时,必须加一个逗号
'''
d = (1,)
print(d)
# 指向不变
f = ('a', 'b', ['c','d'])
f[2][0] = 'X'
f[2][1] = 'Y'
print(f)
条件判断
- 条件判断
- 注意冒号
- 如果
if
语句判断是True
,就把缩进的语句执行 -
elif
是else if
的缩写
if <条件判断1>:
<执行1>
elif <条件判断2>:
<执行2>
elif <条件判断3>:
<执行3>
else:
<执行4>
- 类型变换
str不能直接和整数比较,必须先把str转换成整数
s = '1234'
n = int(s)
print(n)
循环
只有两种循环
- for...in
- while
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# for...in
names = ['Michael','Bob','Tracy']
for name in names :
print(name)
sum = 0
for x in [1,2,3,4,5,6,7,8,9]:
sum = sum + x
print(sum)
# range()函数可以生成一个整数序列,再通过list()函数可以转换为list.
# range(5)生成的序列是从0开始小于5的整数
num = list(range(5))
print(num)
# while循环
sum_w = 0
n = 99
while n > 0:
sum_w = sum_w + n
n = n - 2
print(sum_w)
# break:提前结束,跳出循环
b = 1
while b < 100:
if b > 10:
break
print(b)
b = b + 1
print('End')
# continue:跳过当前循环,开始下一次循环
c = 0
while c < 10:
c = c + 1
if c % 2 == 0 :
continue # 会直接继续下一轮循环,后续的print()不会执行
print(c)
使用dict和set
- dict
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# dict
'''
字典:dict,键值存储,无序。用空间换时间的一种方法
1. 查找和插入速度极快,不会随着key的增加而变慢
2. 需要占用大量的内存,内存浪费多
注意:
1. dict的key必须是不可变对象。通过key计算位置的算法交哈希算法(Hash)
2. 字符串和整型是不可变的,可以用作key。list是可变的,不可以。
'''
d = {'Mick':95, 'Tom':90}
print(d['Mick'])
# 增加键值
d['Bob'] = 60
print(d['Bob'])
# 修改key对应的value
d['Mick'] = 20
print(d['Mick'])
# 判断key是否存在 通过in判断,True or False
print('Jack' in d)
# 通过get()方法,不存在返回None
print(d.get('Thomas'))
print(d.get('Thomas',-1))
# 删除key,对应的value也会删除
print(d.pop('Bob'))
print(d)
- set
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# set
'''
set:一组key的集合,由于key不能重复。所以在set中,没有重复的key。无序
要创建set,需要提供一个list作为输入集合
'''
# 创建
a = set([1,2,3])
print(a)
# 重复数据自动被过滤
b = set([5,6,7,5,6,7])
print(b)
# 通过add(key)添加元素,可以重复添加,但不会有效果
b.add(8)
print(b)
# 通过remove(key)删除元素
b.remove(5)
print(b)
# 交集和并集
print(a & b)
print(a | b)
网友评论