目录
1、前言
吕同学买了蓝桥云课的课程,下面就对课程的内容进行笔记记录。
2、变量和常量
1)Python对象模型
- Python中的一切都是对象
- 内置对象:各种数据、内置函数
- 需要导入后才能使用的对象
2)Python变量
【python变量命名规则】
- 字母或下划线开头 (下划线开头的变量有特殊含义,不能以数字开头)
- 不能有空格或标点符号
- 不能与关键字同名
- 尽量不要与内置名称相同
- 大小写敏感
- 取有意义的名称
【数字】
- 不可变对象
- 整数、浮点数、复数
- 整数可以任意大
【例题】
进制转换,Python 语言支持 4 种机制:
十进制:0-9
十六进制:0-9、A-F
除了十进制外,其他进制数字最前面都是0
二进制:0b
八进制:0o
十六进制:0x
从其他进制转换到十进制,要使用 int 函数,该函数有两个参数
参数1:字符串类型,表示待转换的数
参数2:数值类型
>>> print(int("0b11010101",2))
213
>>> print(int("0o43124",8))
18004
>>> print(int("0xFF12E",16))
1044782
>>> print(bin(432))
0b110110000
>>> print(oct(432))
0o660
>>> print(hex(432))
0x1b0
>>> print(bin(0xFF12E))
0b11111111000100101110
>>> print(hex(0o43124))
0x4654
>>> print(0b1011101)
93
>>> print(0o532)
346
>>> print(0xF0ld)
SyntaxError: invalid syntax
>>> print(0xF01d)
61469
>>>
>>> x=1234.56789
>>> print(format(x,'0.2f')) #保留小数点后2位
1234.57
>>> print(format(x,'>12.1f')) #保留小数点后1位,在12个字符长度的区域内右对齐,左侧空格
1234.6
>>> print(format(x,'<12,2f'),12)
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
print(format(x,'<12,2f'),12)
ValueError: Invalid format specifier
>>> print(format(x,'<12.2f'),12) #保留小数点后2位,在12个字符长度的区域内左对齐,后面紧跟12
1234.57 12
>>> print(format(x,'0>12.1f')) #保留小数点后1位,在12个字符长度的区域内右对齐,左侧补0
0000001234.6
>>> print(format(x,'0<12.2f')) #保留小数点后2位,在12个字符长度的区域内左对齐,右补0
1234.5700000
>>> print(format(x,'0^12.1f')) #保留小数点后1位,在12个字符长度的区域内中心对齐,前后补0
0001234.6000
>>> print(format(x,',.2f')) #加上千分位逗号
1,234.57
>>> print(format(x,'e')) #科学计数法
1.234568e+03
>>> print(format(x,'0.2E'))
1.23E+03
>>>
【字符串】
- 字符串属于不可变序列,一般使用单引号、双引号或三引号进行界定,可以互相嵌套,用来表示复杂字符串
- 一对三单引号或三双引号表示的字符串支持换行,支持排版格式较为复杂的字符串,也可以在程序中表示较长的注释
二、运算符和表达式
【运算符和表达式】
>>> print(1+2-3*4/6)
1.0
>>> print(6%4+6//4+6/4+2**4)
20.5
>>> print((2+3j)*(4+5j)) #复数
(-7+22j)
>>> print("ab"*3)
ababab
>>> print([1,2,3]*3)
[1, 2, 3, 1, 2, 3, 1, 2, 3]
>>> print((1,2,3)*3)
(1, 2, 3, 1, 2, 3, 1, 2, 3)
>>> print([1,2,3]+[3,4,5])
[1, 2, 3, 3, 4, 5]
>>> print("Hello"+" "+"world")
Hello world
>>>
- 在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。
- 正码:最高位表示符号位,0表示正数,1表示负数,其余位表示为整数的二进制数。
- 反码:正数的反码与正码相同,负数的反码是在正码的基础上对除符号位之外的位取反,0变1, 1变0。
- 补码:正数的反码与正码相同,负数的补码是在反码的基础上,对最低位+1。
取反和求一个数的负数是不一样的。
【位运算符】
>>> a=0b00111100
>>> b=0b00001101
>>> print(bin(a&b))
0b1100
>>> print(bin(a|b))
0b111101
>>> print(bin(a^b))
0b110001
>>> print(bin(~a))
-0b111101
>>> print(bin(a<<2))
0b11110000
>>> print(bin(a>>2))
0b1111
【逻辑运算符】
>>> a=1
>>> b=-1
>>> print(a and b)
-1
>>> print(a or b)
1
>>> print(not a)
False
>>>
【成员运算符】
>>> a=3
>>> b=20
>>> list=[1,2,3,4,5]
>>> if(a in list): print("true")
true
>>> if(b not in list): print("true")
true
>>> t='true'
>>> f='false'
>>> print(t if (a in list) else f)
true
>>> print(t if (b not in list) else f)
true
>>>
【身份运算符】
>>> a=3
>>> b=20
>>> c=3
>>> if(a is not b): print('true')
true
>>> if(a is c): print('true')
true
>>> t='true'
>>> f='false'
>>> print(f if (a is b) else t)
true
>>> print(f if (a is not c) else t)
true
>>>
【常用内置函数】
>>> print(pow(2,3))
8
>>> print(abs(-33))
33
>>> print(round(3.7))
4
>>> print(round(3.3))
3
>>> from cmath import sin
>>> print(sin(3.14))
(0.0015926529164868282-0j)
>>> print(-3.2)
-3.2
>>> print(float('3.5'))
3.5
>>> print(ord('a'))
97
>>> print(chr(65))
A
>>> print(max(2,7))
7
>>> print(sum([1,2,3,4]))
10
>>> print(len("love you"))
8
>>> print(bin(5))
0b101
>>> print(oct(55))
0o67
>>> print(hex(555))
0x22b
>>>
【基本输入输出】
- 使用内置函数input()可以接受用户的键盘输入,返回结果为字符串
- 使用内置函数print()可以输出数据到IDLE或者标准控制台,也可以重定向到指定文件等
>>> x=input("Please input:")
Please input:la
>>> print(type(x))
<class 'str'>
>>> name=input("请输入你的名字:")
请输入你的名字:Leo
>>> age=int(input("请输入你的年龄:"))
请输入你的年龄:20
>>> salay=float(input("请输入你的收入:"))
请输入你的收入:100
>>> print("姓名:",name)
SyntaxError: invalid character in identifier
>>> print("姓名:",name)
姓名: Leo
>>> print("年龄:",age)
年龄: 20
>>> print("收入:",format(salary,'0.1f'))
Traceback (most recent call last):
File "<pyshell#75>", line 1, in <module>
print("收入:",format(salary,'0.1f'))
NameError: name 'salary' is not defined
>>> print("收入:",format(salay,'0.1f'))
收入: 100.0
>>>
【模块导入与使用】
- import <模块名> [as <别名>]
- from <模块名> import <对象名> [as <别名>]
>>> import math
>>> import random as rd
>>> from math import sqrt
>>> print(math.sin(0.5))
0.479425538604203
>>> x=rd.random() # 求 [0,1) 内的随机小数
>>> print(x)
0.3340959892878713
>>> y=rd.random(1,100) # [1,100] 区间上的随机整数
>>> print(y) # 之前忘记限定范围了
0.6597740789130799
>>> print(sqrt(3))
1.7320508075688772
【Python代码编写规范】
- 缩进即语法
- 每个import语句只导入一个模块
- 如果一行语句太长,行尾使用续行符“\”来表示下面紧接的一行仍属于当前语句,一般建议使用括号来包含多行内容
- 使用必要的空格与空行增加代码的可读性
- 适当使用异常处理结构提高程序容错性和健壮性
- 软件应具有较强的可测试性,测试与开发齐头并进
三、选择与循环
1、条件表达式
- 在Python中,单个常量、变量或者任意合法表达式都可以作为条件表达式
- 条件表达式的值为False、 0 (包括0.0、 0j等)、空值None、空列表、空元组、空集合、空字典、空字符串、空range对象或其他空迭代对象,则表示条件不成立,否则表示条件成立。x<y<z → x<y and y<z
2、选择结构
- 选择结构通过判断某些特定条件是否满足来决定下一步的执行流程
- 有单分支选择结构、双分支选择结构、多分支选择结构
3、循环结构
- 循环结构通过判断某些特定条件是否满足来决定是否继续循环体的执行
- 有while循环与for循环
四、列表
【python序列】
- 所谓序列,指的是一块可存放多个值的连续内存空间,这些值按一定顺序排列,可通过每个值所在位置的编号 (称为索引) 访问它们。序列中的每个值都有对应的位置值,称之为索引,第一个索引是0。第二个索引是 1,依此类推。
- 序列是 Python 中最基本的数据结构。
- 常用的序列结构:列表、元组、字典、集合、字符串
- 序列通用的操作包括:索引、长度、组合(序列相加)、重复 (乘法) 、分片、检查成员、遍历、最小值和最大值。
- 列表、元组、字符串支持双向索引,字典和集合属于无序序列,不支持索引、切片、相加和相乘操作
【列表】
>>> a=[1,3,1,4]
>>> print(a)
[1, 3, 1, 4]
>>> b=['A','man','can','be','defeated']
>>> print(b)
['A', 'man', 'can', 'be', 'defeated']
>>> c=['iloveyou',9421,20184]
>>> print(c)
['iloveyou', 9421, 20184]
>>> d=[['ai',147],['qing',2627],609]
>>> print(d)
[['ai', 147], ['qing', 2627], 609]
>>>
【列表创建与删除】
使用赋值运算符直接将一个列表赋值给变量
a_list=[10, 20, 30, 40]
a_list=[]
使用list()函数将元组、range对象、字符串或其他类型的可迭代对象类型的数据转换为列表
a_list=list ((3, 5, 7,9)
b_list=list(range (1, 10, 2))
c_list=list('All things come to those who wait.')
d_list=list()
【列表元素访问】
- 创建列表之后,可以使用整数作为下标来访问其中的元素。
- 支持双向索引
>>> a_list=['A','be','yes','is','start']
>>> print(a_list)
['A', 'be', 'yes', 'is', 'start']
>>> print(a_list[0])
A
>>> print(a_list[2])
yes
>>> print(a_list[-1])
start
>>> print(a_list[-4])
be
>>> a_list[1]=1000
>>> print(a_list)
['A', 1000, 'yes', 'is', 'start']
>>> a_list[-2]='1'
>>> print(a_list)
['A', 1000, 'yes', '1', 'start']
>>>
【列表对象常用方法】
>>> a=['tree','tree2','till','you']
>>> a.insert(7,'.')
>>> print(a)
['tree', 'tree2', 'till', 'you', '.']
>>> a.extend(['put','down'])
>>> print(a)
['tree', 'tree2', 'till', 'you', '.', 'put', 'down']
>>> a.pop()
'down'
>>> print(a)
['tree', 'tree2', 'till', 'you', '.', 'put']
>>> a[1]='tree'
>>> print(a)
['tree', 'tree', 'till', 'you', '.', 'put']
>>> a.remove('tree')
>>> print(a)
['tree', 'till', 'you', '.', 'put']
>>> a.clear()
>>> print(a)
[]
>>>
>>> a=['be','give','you','a','be','that']
>>> b=a.count('be')
>>> print(b)
2
>>> c=a.index('be')
>>> print(c)
0
>>> a.sort()
>>> print(a)
['a', 'be', 'be', 'give', 'that', 'you']
>>> a.reverse()
>>> print(a)
['you', 'that', 'give', 'be', 'be', 'a']
>>> d=a.copy()
>>> print(d)
['you', 'that', 'give', 'be', 'be', 'a']
>>>
【列表对象支持的运算符】
>>> a=[5,2,0]+[1,3,1,4] #非原地操作,效率低
>>> print(a)
[5, 2, 0, 1, 3, 1, 4]
>>> a=[5,2,0]
>>> a+=[1,3,1,4] #原地操作,效率高(元组也支持,非原地)
>>> print(a)
[5, 2, 0, 1, 3, 1, 4]
>>> a=[5,2,0]*3 #非原地操作,效率低
>>> print(a)
[5, 2, 0, 5, 2, 0, 5, 2, 0]
>>> a=[5,2,0]
>>> a*=3 #原地操作,效率高(元组也支持,非原地)
>>> print(a)
[5, 2, 0, 5, 2, 0, 5, 2, 0]
>>>
【成员资格判断】
>>> a_list=[1,2,3,4,5,6,7,8,9,0]
>>> b=3 in a_list
>>> print(b)
True
>>> c=11 in a_list
>>> print(c)
False
>>> d=11 not in a_list
>>> print(d)
True
>>> a_list=[[1],[2],[3]]
>>> e=2 in a_list
>>> print(e)
False
>>> f=[2] in a_list
>>> print(f)
True
>>>
【切片操作】
- 切片是Python序列的重要操作之一,适用于列表、元组、字符串、range对象等类型,用于截取序列中的任何部分,得到一个新序列,也可以用于修改和删除列表中部分元素,或增加元素
- 切片由2个冒号分隔的3个数字组成:第一个数字表示切片开始位置 (默认为0),第二个数字表示切片截止 (但不包含) 位置 (默认为列表长度),第三个数字表示切片的步长 (默认为1),当步长省略时可以省略后一个冒号
>>> a_list=[1,2,3,4,5,6,7,8,9,0]
>>> a=a_list[::]
>>> print(a)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
>>> b_list=[1,2,3,4,5,6,7,8]
>>> b=b_list[::2]
>>> print(b)
[1, 3, 5, 7]
>>> c_list=[1,2,3,4,5,6]
>>> c=c_list[::-1]
>>> print(c)
[6, 5, 4, 3, 2, 1]
>>> d_list=[6,5,4,3,2,1]
>>> d=d_list[:4:]
>>> print(d)
[6, 5, 4, 3]
>>> e=d_list[:4]
>>> print(e)
[6, 5, 4, 3]
>>>
【复制与排序】
>>> from copy import *
>>> a=[1,3,1,4,['i','love']]
>>> b=a #赋值,传对象的引用
>>> c=copy(a) #对象拷贝,浅拷贝
>>> d=deepcopy(a) #对象拷贝,深拷贝
>>> a.append(520) #修改对象a
>>> a[4].append('you') #修改对象a中的['a','b']数组对象
>>> print('a = ',a)
a = [1, 3, 1, 4, ['i', 'love', 'you'], 520]
>>> print('b = ',b)
b = [1, 3, 1, 4, ['i', 'love', 'you'], 520]
>>> print('c = ',c)
c = [1, 3, 1, 4, ['i', 'love', 'you']]
>>> print('d = ',d)
d = [1, 3, 1, 4, ['i', 'love']]
>>>
>>> from random import *
>>> a=list(range(10))
>>> print(a)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> shuffle(a) #打乱顺序,原地
>>> print(a)
[8, 3, 0, 5, 4, 2, 9, 6, 1, 7]
>>> a.sort() #升序排序,原地
>>> print(a)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a.sort(reverse=True) #降序排序,原地
>>> print(a)
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> b=sorted(a) #产生一个新列表,升序排序
>>> print(b)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> c=sorted(a,reverse=True) #产生一个新列表,降序排序
>>> print(c)
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> a.reverse() #原地逆序
>>> print(a)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>
【用于序列操作的常用内置函数】
>>> a_list=[1,3,1,4]
>>> a=len(a_list)
>>> b=max(a_list)
>>> c=min(a_list)
>>> d=sum(a_list)
>>> print('a = ',a)
a = 4
>>> print('b =',b)
b = 4
>>> print('c =',c)
c = 1
>>> print('d =',d)
d = 9
>>>
>>> a_list=[5,2,0,9,9]
>>> a=sorted(a_list,reverse=True)
>>> print(a)
[9, 9, 5, 2, 0]
>>> a_tuple=(5,2,0,9,9)
>>> b=sorted(a_tuple)
>>> print(b)
[0, 2, 5, 9, 9]
>>> a_str='iloveyou'
>>> c=sorted(a_str)
>>> print(c)
['e', 'i', 'l', 'o', 'o', 'u', 'v', 'y']
>>>
五、元组
内置、有序、不可变序列;一个元组中元素的类型可以不同
>>> a=(96,97,98,99)
>>> print(a)
(96, 97, 98, 99)
>>> b=('i','love','you')
>>> print(b)
('i', 'love', 'you')
>>> c=('i',520,1314)
>>> print(c)
('i', 520, 1314)
>>> d=(['i',520,1314],['love',99],2)
>>> print(d)
(['i', 520, 1314], ['love', 99], 2)
>>> d[0][1]=250
>>> print(d)
(['i', 250, 1314], ['love', 99], 2)
>>>
【元组创建与删除】
使用赋值运算符直接将一个元组赋值给变量
>>> a=(96,97,98,99)
>>> print(a)
(96, 97, 98, 99)
>>> b=96,97,98,99
>>> print(b)
(96, 97, 98, 99)
>>> c=()
>>> print(c)
()
>>> d=('i')
>>> print(d)
i
>>> e='i'
>>> print(e)
i
>>>
使用 tuple() 函数将列表、range 对象、字符串或其他类型的可迭代对象类型的数据转换为元组
>>> a=tuple([96,97,98,99])
>>> print(a)
(96, 97, 98, 99)
>>> b=tuple(range(1,10,2))
>>> print(b)
(1, 3, 5, 7, 9)
>>> c=tuple('iloveyou')
>>> print(c)
('i', 'l', 'o', 'v', 'e', 'y', 'o', 'u')
>>> d=tuple()
>>> print(d)
()
>>>
使用 del 命令可以删除整个元组对象,不能只删除元组中的部分元素
>>> a=tuple([96,97,98,99])
>>> print(a)
(96, 97, 98, 99)
>>> del a
>>> print(a)
Traceback (most recent call last):
File "<pyshell#148>", line 1, in <module>
print(a)
NameError: name 'a' is not defined
>>> b=tuple(range(1,10,2))
>>> del b[2]
Traceback (most recent call last):
File "<pyshell#150>", line 1, in <module>
del b[2]
TypeError: 'tuple' object doesn't support item deletion
>>> print(b)
(1, 3, 5, 7, 9)
>>>
【元组与列表的区别】
- 列表可变,元组不可变
- 通过切片可以访问元组中的元素而无法修改元组中元素的值,也无法为元组增加或删除元素
- tuple 函数可以冻结列表, list 函数可以融化元组
- 元组的访问和处理速度比列表快
- 元组可用作字典的键,而列表不可
如果元组中包含可变序列,此序列照样可变
>>> x=([97,98],99)
>>> x[0][0]=96
>>> print(x)
([96, 98], 99)
>>> x[0].append(95)
>>> print(x)
([96, 98, 95], 99)
>>>
六、集合
内置、无序、可变序列,每个元素的类型可以不同,一个集合中的元素不能重复
>>> a_set={96,97,98,99}
>>> print(a)
Traceback (most recent call last):
File "<pyshell#172>", line 1, in <module>
print(a)
NameError: name 'a' is not defined
>>> print(a_set)
{96, 97, 98, 99}
>>> b_set={'i','love','you'}
>>> print(b_set)
{'love', 'you', 'i'}
>>> print(b_set)
{'love', 'you', 'i'}
>>> c_set={'i',520,1314}
>>> print(c_set)
{520, 1314, 'i'}
>>> d_set={('i',520,1314),('love',97,98),99}
>>> print(d_set)
{('love', 97, 98), 99, ('i', 520, 1314)}
>>>
【集合创建与删除】
>>> a_set={'i','love','you'}
>>> a_set.add('99')
>>> print(a_set)
{'99', 'love', 'you', 'i'}
>>> b_set=set((5,2,0))
>>> b_set.add(1314)
>>> b_set.add(2)
>>> b_set.add(99)
>>> print(b_set)
{0, 2, 99, 1314, 5}
>>> b_set.pop()
0
>>> print(b_set)
{2, 99, 1314, 5}
>>> b_set.remove(99)
>>> b_set.add(0)
>>> print(b_set)
{0, 2, 1314, 5}
>>> b_set.clear()
>>> print(b_set)
set()
>>> del b_set
>>>
以上,Python语言快速入门上
祝好