Python基础
数据类型和变量
数据类型
- 整数:Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样。
Python允许在数字中间以_分隔,因此,写成10_000_000_000和10000000000是完全一样的。
- 浮点数:小数
- 字符串:字符串是以单引号’或双引号"括起来的任意文本。如果字符串内部既包含’又包含"可以用转义字符\来标识
- 布尔值:一个布尔值只有True、False两种值,在Python中,可以直接用True、False表示布尔值(请注意大小写),也可以通过布尔运算计算出来。
- 空值:None
python还提供列表、字典等多种数据类型,还允许自定义数据类型
变量
变量可以是任意数字类型
变量在程序中使用一个变量名进行表示,变量名由大小写字母、数字和下划线组成,数字不能开头。
这种变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言。静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错。例如Java是静态语言。
常量
常量就是不能改变的变量,Python中使用大写变量名来表示常量
两种除法
# / 除法计算结果是浮点数,即使是两个整数运算
# // 称为地板除,除法结果只取整数部分
字符串和编码
字符串编码
- Python3中是以Unicode编码的,支持多语言。
- Python提供ord()函数,用于获取字符的整数表示,chr()函数反之。
ord("A")
# 输出65
chr(66)
# 输出B
- python中的字符串类型是str,一个字符对应若干个字节。
- 若要存储或者网络传输,则要将其变为以字节为单位的bytes
# python用带有字母“b”前缀的单引号或双引号表示bytes类型的数据
# 有无前缀的区别是字符占的字节数
x = b"ABC"
- 以Unicode表示的str,通过encode()方法可以编码为指定的bytes类型
'ABC'.encode('ascii')
# 输出b'ABC'
- 通过decode()方法可以将bytes类型转化为str类型
b'ABC'.decode('ascii')
# 输出'ABC'
- 要计算str包含多少个字符,可以使用len()函数
- 对于bytes类型,len()函数则是计算字节数
中文显示问题,当源代码中包含有中文时,一定要保存为UTF-8编码
字符串格式化
%占位符
- 在python中,格式化输出的方法和C语言是一样的,使用%实现
- 在字符串内部有几个占位符,后面就跟几个变量或者值,顺序一一对应,单个变量括号可以省略
占位符 | 替换内容 |
---|---|
%d | 整数 |
%f | 浮点数 |
%s | 字符串 |
%x | 十六进制整数 |
其中,格式化整数和浮点数还可以指定是否补0和整数与小数的位数。
如果你不太确定应该用什么,%s永远起作用,它会把任何数据类型转换为字符串
print('%2d-%02d' % (3, 1))
print('%.2f' % 3.1415926)
# 输出
# 3-01
#3.14
format()方法
- 另一种格式化字符串的方法是使用字符串的format()方法,它会用传入的参数依次替换字符串内的占位符{0}、{1}
'Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.125)
# 输出
# 'Hello, 小明, 成绩提升了 17.1%'
f-string
使用以f开头的字符串,称之为f-string,字符串如果包含{xxx},就会以对应的变量替换
>>> r = 2.5
>>> s = 3.14 * r ** 2
>>> print(f'The area of a circle with radius {r} is {s:.2f}')
The area of a circle with radius 2.5 is 19.62
练习
- 小明的成绩从去年的72分提升到了今年的85分,请计算小明成绩提升的百分点,并用字符串格式化显示出’xx.x%',只保留小数点后2位
s1=72
s2=85
up=(s2-s1)/s1*100
# %占位符
print("小明成绩变化的百分点是%.2f%%"%up)
# format方法
print("小明成绩变化的百分点是{0:.2f}%".format(up))
# f-string
print(f"小明成绩变化的百分点是{up:.2f}%")
list和tuple
list和tuple是python内置的有序集合,一个可变,一个不可变。
list 列表
- python一种数据类型,有序集合,可以随时操作其中的元素
- 用len()函数获取列表元素的个数
- 用索引访问列表的具体元素,索引从0开始,也可以从后往前(索引从-1开始)
- 列表元素的数据类型可以不同,也可以是嵌套列表
#定义列表
list = [1,2,3,"木头人"]
# 列表末尾增加元素
list.append('元素')
# 列表指定位置i处插入元素
list.insert(i,'元素')
# 删除列表末尾元素
list.pop()
# 删除列表指定位置i处元素
list.pop(i)
# 列表某个位置替换元素,直接赋值进行覆盖
# 列表索引从0开始
L = [
['Apple', 'Google', 'Microsoft'],
['Java', 'Python', 'Ruby', 'PHP'],
['Adam', 'Bart', 'Lisa']
]
# 打印Apple
print(L[0][0])
# 打印Python
print(L[1][1])
# 打印Lisa
print(L[2][2])
tuple 元组
- 元组,与list相似,但是元组一经初始化就不能修改,使得代码安全性增加
- 理解元组的不可修改为“指向不可修改”,当列表作为元组的元素时,列表内元素可以修改,但是元组指向的仍然是一个列表,实际上是不变的
# 定义元组
tuple = (1,2,3,"木头人")
# 定义只有一个元素的元组时,要加逗号,避免歧义
tuple = (1,)
条件判断
根据Python的缩进原则,if和else进行匹配,自上而下进行判断,当满足条件时,后面的elif和else都不再执行。
age = 3
if age >= 18:
print('adult')
elif age >= 6:
print('teenager')
else:
print('kid')
循环
Python的循环有两种,一种是for…in循环,依次把list或tuple中的每个元素迭代出来。第二种循环是while循环,只要条件满足,就不断循环,条件不满足时退出循环。
- break:直接结束循环
- continue:结束本轮循环,进入下一次循环
for in 循环
L = list(range(1,10))
sum = 0
for x in L:
sum = sum + x
print(sum)
while 循环
只要满足条件,就一直循环。条件不满足时退出循环。
# 计算100以内所有奇数的和
sum = 0
n = 99
while n > 0:
sum = sum + n
n = n - 2
print(sum)
# 依次打印出“Hello,xxx”
L = ['Bart', 'Lisa', 'Adam']
while len(L) != 0:
print("Hello,%s!" % L.pop(-len(L)))
dict和set
dict 字典
python内置了字典,在其他语言中成为map,使用键值对存储,具有极快的查找速度,dict内部存放的顺序和key放入的顺序没有关系。
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95
- 数据放入字典,除了初始化时指定外,还可以通过key放入
>>> d['Adam'] = 67
>>> d['Adam']
67
- key和value对应,多次赋值会覆盖之前的值
- 如果key不存在,dict就会报错
# 要避免key不存在的错误,有两种办法
# 1.通过in判断key是否存在:
>>> 'Thomas' in d
False
# 2.通过get()方法,如果key不存在,可以返回None或者指定的value
>>> d.get('Thomas')
>>> d.get('Thomas', -1)
-1
- 要删除一个key,用pop(key)方法,对应的value也会从dict中删除:
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d.pop('Bob')
75
>>> d
{'Michael': 95, 'Tracy': 85}
- dict是用空间来换取时间的一种方法
list | dict |
---|---|
查找和插入的时间随着元素的增加而增加 | 查找和插入的速度极快,不会随着key的增加而变慢 |
占用空间小,浪费内存很少 | 需要占用大量的内存,内存浪费多 |
key一定是不可变对象,在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key。
set
- set和dict类似,也是一组key的集合,但不存储value
- 由于key不能重复,所以,在set中,没有重复的key,重复元素会被set自动过滤掉
# 要创建一个set,需要提供一个list作为输入集合:
>>> s = set([1, 2, 3])
>>> s
{1, 2, 3}
- add(key)方法可以添加元素到set中
- remove(key)方法可以删除元素
set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作:
>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s1 & s2
{2, 3}
>>> s1 | s2
{1, 2, 3, 4}