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中两个整数相除得到的结果是浮点数

算术运算符在字符串中的使用

字符串里有限度的支持加法和乘法运算符。

  1. 加法运算符:只能用于两个字符串类型的数据,用来拼接两个字符串。
print('hello'+'world') # helloworld
# Python不支持数字和字符串做加法运算
  1. 乘法运算符:用于数字和字符串之间,将一个字符串重复多次。
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里,字符串是不可变的。所有字符串相关方法,都不会改变原有的字符串,都是返回一个结果,在这个新的返回值里,保留了执行后的结果。

字符串的运算符

  1. 字符串和字符串之间可以使用加法运算,作用是拼接两个字符串
  2. 字符串和数字之间可以使用乘法运算,目的是将指定的字符串重复多次
  3. 字符串和数字之间做 == 运算结果是False,做 != 运算,结果是True
  4. 字符串之间做比较运算,会逐个比较字符串的编码值
  5. 不支持其他的运算符

字符的编码

  • 计算机里只能识别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

最后修改:2021 年 09 月 01 日 06 : 15 PM
如果觉得我的文章对你有用,请随意赞赏