python学习笔记(持续更新)
www.woldf.top
by Woldf•Swift
感谢@Innocence的帮助
数据类型
number(数字)
int(整型)
long(长整型)#在py3中被移除
float(浮点型)
complex(复数)
complex(x,y) => x+yj
bool(布尔型)
True
False
ltring(字符串)
List(列表)
Tuple(元组)
Dictionary(字典)
Set (集合)
查看数据类型
type() #查看类型
z.real => 获得实数
z.imag => 获得实数
在python中,变量没有数据类型
运算符
高(从右向左)
"**" 幂
"+" 正
"-" 负
中(从左向右)
"*" 乘
"/" 除
"//" 整除
"%" 求余
低(从左向右)
"+" 加
"-" 减
floor除法————》》向负无穷(∞)靠拢 余数=被除数-(整除商*除数)
标识符
标识符:变量、模块名、函数名、类名
命名规则:
1.由数字字母下划线组成(python支持UTF-8编码),不能用数字开头
2.严格区分大小写
3.不能使用关键字 #True、False是常量,不能被赋值
关键字
False
class 类
from 用于导入库
or
None
continue 结束本次循环
global 全局变量
pass
True
def 定义
if
raise
and
del 删除
import 导入库
return 返回
as
elif
in 判断变量是否在序列
try 异常语句
assert 判断表达/值是否为真
else
is
while 循环
async
except 异常语句
lambda
with 简化
await
finally 异常语句
nonlocal
yield 用于返回值
break 跳出/中断
for 循环
not
导入库
1.import 库名
库名.函数(参数) #turtle.fd()
2.from 库名 import # :all
函数(参数) #fd()
3.import 库名 as 别名
别名.库名(参数)
import turtle as T
T.fd()
输出语句
print(value, ..., sep=' ', end=' n', file=sys.stdout, flush=False)
value:内容("...,"表示可以有多个内容)
sep=' ':输出时,每两个值之间使用那种字符作为分隔,' '默认是空格
end='':当执行完print语句,接下来输出的字符,
file=sys.stdout:输出位置,涉及文件读取
flush=False:输出是否被缓存,通常决定于 file,但如果 flush 关键字参数为 True,流会被强制刷新
输入语句
input(prompt=None, /)
input保存的是字符串,需要类型转换
进制
进制表示
0b/0B(二进制)
0o/0O(八进制)
0x/0X(十六进制)
进制转换
转换为二进制:bin()
转换为八进制:oct()
转换为12进制:hex()
数据类型的转换
int() 转换为整型
float() 转换为浮点型
str() 转换为字符串型
bool() 转换为布尔型
数字中,只有0是False,其余都是True
字符串中,只有空字符串是False,其余都是True计算机中,True和False都是使用数字0和1存储的
运算符
算数运算符
# +加 -减 *乘 /除 **幂运算 //整除 %取余
# 在Python3中两个整数相除得到的结果是浮点数
算术运算符在字符串中的使用
字符串里有限度的支持加法和乘法运算符。
- 加法运算符:只能用于两个字符串类型的数据,用来拼接两个字符串。
print('hello'+'world') # helloworld
# Python不支持数字和字符串做加法运算
- 乘法运算符:用于数字和字符串之间,将一个字符串重复多次。
print('hello'*2) # hellohello
赋值运算符
= 等号在计算机编程里,称之为赋值运算符,和数学里的等号有一定区别。
作用是将等号右边的值赋值给等号的左边。
等号的左边一定不能是常量或者表达式。
特殊场景:
a = b = c = d = 'hello'
print(a, b, c, d) # 等号连接的变量可以传递赋值
m, n = 3, 5
print(m, n) # 拆包 3 5
x = 'hello', 'good', 'yes'
print(x) # ('hello', 'good', 'yes')
o, p, q = 4, 2
print(o, p, q) # 会报错,值不够拆包,值和变量个数要一致
o, *p, q = 1, 2, 3, 4, 5, 6 # 星号变量代表可变变量,长度可变
print(o, p, q) # 1 [2, 3, 4, 5] 6
比较运算符
# > , < , >= , <= , != , ==
# 在字符串中的使用,根据各个字符的编码值逐一进行比较(ASCII码表)
print('a'>'b') # False
print('abc'>'b') # Flase
# 数字和字符串之间, 做 == 运算的结果是Flase, 做 != 结果是True,不支持其他的比较运算
位运算符
# 按位与& 按位或| 按位异或^ 按位左移<< 按位右移>> 按位取反~
#按位与:同为1则为1,否则为0
a = 23
b = 15
print(a&b) # 7
# 按位或:只要有一个为1,就为1
# 按位异或:相同为0,不同为1
# 按位左移:右边补两个0,a<<n == a*2**n
x = 5
print(x<<2) # 20
# 按位右移:向右删减
逻辑运算符
逻辑与and, 逻辑或or, 逻辑非not
逻辑运算的结果不一定是布尔值
# 逻辑与运算做取值时,取第一个为False的值,如果所有的运算数都是True,取最后一个值
print(3 and 5 and 0 and 'hello') # 0
# 逻辑或运算做取值时,取第一个为True的值,如果所有的运算数都是False,取最后一个值
运算级的优先级
print(10 - 2 * 3) # 4
'''
**
~ + - (按位取反,正号,负号)
* / % //
+ -
>> <<
&
^ |
<= < > >=
== !=
= %= /= //= -= += *= **=
is is not
in not in
not>and>or
'''
强烈建议:在开发中,使用括号来说明运算符的优先级
print(True or True and False) # True
print(True or (True and False)) # True
字符串
字符串的表示方式
在Python里,可以使用一对单引号、双引号、三单引号、单双引号表示字符串。
a = 'hh'
b = "hh"
c = '''hh'''
d = """hh"""
# 如果字符串里还有双引号,外面就可以使用单引号
m = 'xiaoming said :"I am xiaoming"'
n = "I'm xiaoming"
p = """ xiaoming said :"I am xiaoming" """
# 字符串里的转义字符\
x = 'I\'m xiaoming' # \ 表示的是转义字符,作用是对\后面的字符进行转义
# \' ==> 显示一个普通的单引号
# \" ==> 显示一个普通的双引号
# \n ==> 表示一个换行
# \t ==> 表示显示一个制表符
# \\ ==> 表示一个普通的反斜线
# 在字符串的前面添加r,表示的是原生字符串(Python)
y = r'hello \teather'
字符串常见的操作
- 获取长度和查找内容
x = 'abcdefghijklmn'
# 使用内置函数len可以获取字符串的长度
print(len(x))
# 查找内容相关的方法:find/index/rfind/rindex 可以获取指定字符的下标
print(x.find('l')) # 11
print(x.index('l')) # 11
print(x.find('p')) # -1 如果字符在字符串里不存在,结果是-1
print(x.index('p')) # 使用index,如果字符不存在,会报错
print(x.find('l', 4, 9)) # -1 从第四个到第九个找,找到的值为int类型,寻找最小下标的字符
print(x.rfind('l')) # 找最大的下标,找不到值为-1
print(x.rindex('l')) # 找最大的下标,找不到会报错
- 判断
# startswith,endswith,isalpha,isdigit,isalnum,isspace
# is开头的是判断,结果是一个布尔类型
print('hello'.startswith('he')) # True
print('hello'.endswith('o')) # True
print('he45llo'.isalpha()) # False alpha字母
print('good'.isdigit()) # False
print('123'.isdigit()) # True
print('3.14'.isdigit()) # False
# isalnum()判断是否由数字和字母组成
print('ab12hello'.isalnum()) # True
print('hello'.isalnum()) # True
print('123'.isalnum()) # True
print('4 - 1'.isalnum()) # False
# isspace()判断是否全部由空格组成
print(' '.isspace()) # True
print('12 3'.isspace()) # False
num = input('请输入一个数字:')
if num.isdigit():
num = int(num)
else:
print('您输入的不是一个数字')
- 计算出现次数:
# count(sub[, start[, end]]) ==>int
- 替换内容:
# replace方法:用来替换字符串
word = 'hello'
m = word.replace('l', 'x') # 将字符串里l替换成x
print(word) # hello 字符串是不可变数据类型
print(m) # hexxo 原来的字符串不会变,而是生成一个新的字符串来保存替换后的结果
- 切割字符串:
# split, rsplit, splitlines, partition, rpartition
x = 'zhangsan-lisi-wangwu-jerry'
# 使用split方法,可以将字符串切割成一个列表
y = x.split('-')
print(x) # 不变
print(y) # 变为列表['zhangsan', 'lisi', 'wangwu', 'jerry']
z = x.rsplit('-')
print(z) # 等于y
print(x.split('-', 2)) # 从左边切两刀
print(x.rsplit('-', 2)) # 从右边切
# splitlines() 按照行分隔,返回一个包含各行作为元素的列表(字符串中用\n分隔)
# partition 指定一个字符串作为分隔符,分为三部分:前面 分隔符 后面
# 最终结果是一个元组。'...'.partition('...')
# rpartition 从右边开始算,如果有重复的指定字符
# 获取文件名和后缀名
file_name = '2020.2.14拍摄不要打开.mp4'
print(file_name.rpartition('.'))
- 修改大小写:
# capitalize, title, upper, lower
# capitalize 让第一个单词的首字母大写
print('hello'.capitalize()) # Hello
print('hello world.good morning\nyes'.capitalize()) # 依然仅H大写
# upper 全大写
print('hello'.upper()) # HELLO
# lower 全小写
print('WoRLd'.lower()) # 面向对象里,我们称之为方法
# title 每个单词的首字母大写
print('good morning'.title()) # Good Morning
# 用法
while True:
content = input('请输入内容,输入exit退出:')
print('您输入的是', content)
if content.lower() == 'exit':
break
- 空格处理:
# ljust, rjust, center, lstrip, rstrip, strip
# ljust(width,fillchar) ==> 让字符串以指定长度显示,如果长度不够,默认在右边使用空格补齐 width 长度 fillchar 填充字符,默认是空格
print('Monday'.ljust(10, '+')) # Monday++++
# rjust 与ljust相反,在左侧加空格
# center 字符串居中两边加填充字符达到长度
print('apple'.center(20, '*'))
# lstrip,rstrip,strip 去掉字符串填充字符
print(' apple '.lstrip()) # apple
print(' apple '.rstrip()) # apple
print('+++apple++++'.strip('+')) # apple
- 字符串拼接:
# join(iterable) 放可迭代对象 将列表,字符串,元组转化成用填充字符连接的字符串
fruits = ['apple', 'pear', 'peach', 'banana', 'grape']
print('-'.join(fruits)) # apple-pear-peach-banana-grape
print('*'.join('hello')) # h*e*l*l*o
注意:在Python里,字符串是不可变的。所有字符串相关方法,都不会改变原有的字符串,都是返回一个结果,在这个新的返回值里,保留了执行后的结果。
字符串的运算符
- 字符串和字符串之间可以使用加法运算,作用是拼接两个字符串
- 字符串和数字之间可以使用乘法运算,目的是将指定的字符串重复多次
- 字符串和数字之间做 == 运算结果是False,做 != 运算,结果是True
- 字符串之间做比较运算,会逐个比较字符串的编码值
- 不支持其他的运算符
字符的编码
- 计算机里只能识别0和1
- ASCII码表使用一个字节来表示一个字符,最多表示128个,不使用最高位
- ISO-8859-1 使用了最高位 前0~127和ASCII码表完全兼容,最多表示255个
- Unicode编码 ==> 绝大部分国家的文字都有一个对应的编码
a ==> 97 ==> 0110 0001 ==> 八位一个字节
0000 0000 ~ 0111 1111 0 ~ 127 (128个)
# 使用内置函数 chr 和 ord 能够查看数字和字符的对应关系
# ord 获取字符对应的编码; chr 根据编码获取对应的字符
print(ord('a')) # 字符对应的编码是97
print(chr(65)) # A
print(ord('你')) # 20320
print(chr(12371)) # こ
GBK utf-8 BIG5
# 汉字‘你’的二进制: 1001111 01100000 无法区分是否是一个汉字还是两个Latin1字符
# 假如规定所有的字符都使用16位,2个字节来表示
# 00000000 01001111 ==> Latin
# 00000000 01100000 ==> Latin
# 但是这样做会浪费空间,而且一些字符无法用16位二进制表示
GBK:国标扩,简体中文,汉字占两个字节
BIG5:繁体中文
utf-8:统一编码,汉字占三个字节
# 使用字符串的encode方法,可以将字符串转换成为指定编码集结果
# 如果有一个编码集的结果,想把它转换成为对应的字符,使用decode方法
# GBK编码,一个汉字占两个字节
print('你'.encode('gbk')) # b'\xc4\xe3' 从20320到50403 二进制 11000100 11100011
# utf-8编码,一个汉字占三个字节
print('你'.encode('utf8')) # b'\xe4\xbd\xa0' 二进制 11100100 10111101 10100000
x = b'\xe4\xbd\xa0'
print(x.decode('utf8')) # 你
# 把‘你好’使用gbk编码
y = '你好'.encode('utf8') # utf8一个汉字转换成三个字节
print(y) # b'\xe4\xbd\xa0\xe5\xa5\xbd'
# gbk一个汉字占两个字节
print(y.decode('gbk')) # 乱码 会出现三个字(读写的方法不一致)txt文本乱码,修改字符集
格式化输出字符
# 可以使用 % 占位符来表示格式化一个字符串
# %s ==> 字符串占位符
# %d ==> 整数占位符
# %nd ==> 打印时,显示n位,如果不够,在前面使用空格补齐。与c格式化相同
# %f ==> 浮点数占位符
# %x ==> 十六进制输出
# %% ==> 输出一个%
name = 'zhangsan'
age = 18
print('大家好,我的名字是', name, '我今年', age, '岁了', sep='')
print('大家好,我的名字是%s,我今年%d岁了' % (name, age))
a = 255
print(a) # 255
print('%x' % a) # ff
print('%X' % a) # FF
条件判断语句
if / if else / if elif elif else
不支持switch...case
age = input('请输入你的年龄')
if int(age) < 18:
print('未满十八岁,禁止入内')
age = input('请输入你的年龄')
if int(age) < 18:
print('赌博是不好的呦,好好学习,天天向上')
else:
print('澳门首家赌场上线了')
if 语句里再嵌套 if
Python里使用强制缩进来表示语句之间的结构。
循环语句
Python里没有do while循环。
while语句
Python里没有自增自减运算符。
x = 0
while x < 10:
print('hello world')
x += 1
x = 0
i = 0
while i < 100:
i += 1
if i % 2 == 0:
x += i
print('和为', x)
for...in语句
Python里的for循环指的是for...in。和C语言的for不一样。
格式:for ele in iterable
range 内置类,用来生成指定区间的整数序列。
in 的后面必须是一个可迭代对象!!!
for i in range(1, 11):
print(i)
for y in 'hello':
print(y) # h e l l o 遍历
x = 0
for i in range(1, 11):
x += i
print(x)
break和continue
在Python里只能用在循环语句里。
break:结束整个循环。
continue:结束本轮循环,开启下一轮循环。
for else语句
当循环里的break没有被执行的时候,就会执行else。
j = 2
for i in range(4):
if i == 4:
break
else:
j = 3 + j
print(j)
编辑信息:
2020.10.08
Woldf•Swift
woldf@outlook.com
3 条评论
好耶
好耶