Python(上)

Python

下载:Welcome to Python.org

  • step1:勾选(Add Python 3.10 to PATH)

  • step2:点击Customize installation(自定义安装)

  • step3:选择安装路径

  • step4:close

  • step5:验证(cmd>>python)

Python开发工具——PyCharm

网站:PyCharm:JetBrains为专业开发者提供的Python IDE

注释

单行注释:#(快捷键——Ctrl+/)

多行注释:三个双引号“”“ ”“”


一、数据类型

类型描述实例说明
整数(int)1234
数字 (Number)浮点数(float)3.14,1.3e5
复数(complex)3+4i
布尔型boolTrue、False
字符串(String)描述文本的一种数据类型不可变‘hello world’ "hello word" "'hello word'"1.字符串可以用‘+’连接起来,也可用‘*’重复; 2.字符串有两种索引方式:1)从左往右0开始,2)从右往左-1开始 3.反斜杠可以用来转义,使用 r 可以让反斜杠不发生转义。
列表(List)有序的可变序列[1,2,3] ['a','b'],['c',2]1.List 可以被索引和切片。 2.List 可以使用 + 操作符进行拼接。
元组(Tuple)有序的不可变序列(2,-5,6) (3,)1.如果元组中只有一个元素的话,后面的逗号不能省略 2.元组也可以被索引和切片 3.元组也可以使用 + 操作符进行拼接。
集合(Set)无序不重复可变集合{'a','b','c'}1.创建一个空集合: set() 2.不支持下标索引
字典(Dictionary)无序Key-Value不重复可变集合{1:‘food’,2:'taste',3:'import'}1.元素形式为:“键:值” 2.字典的关键字必须为不可变类型 3.创建一个空字典:{ } 4.不支持下标索引
type()函数
#方式一
print(type("黑马程序员"))
print(type(3.4))
#方式二
string_type=type("黑马程序员")
print(string_type)
#方式三
money=50
money_type=type(money)
print(money_type)
注:变量没有类型,变量存储的数据是有类型的。
1.数字
1.1数字函数
函数返回值 ( 描述 )
abs(x)返回数字的绝对值,如abs(-10) 返回 10
ceil(x)返回数字的上入整数,如math.ceil(4.1) 返回 5
exp(x)返回e的x次幂(ex),如math.exp(1) 返回2.718281828459045
fabs(x)返回数字的绝对值,如math.fabs(-10) 返回10.
floor(x)返回数字的下舍整数,如math.floor(4.9)返回 4
log(x)如math.log(math.e)返回1.0,math.log(100,10)返回10
log10(x)返回以10为基数的x的对数,如math.log10(100)返回 10
max(x1, x2,...)返回给定参数的最大值,参数可以为序列。
min(x1, x2,...)返回给定参数的最小值,参数可以为序列。
modf(x)返回x的整数部分与小数部分,两部分的数值符号与x相同,整数部分以浮点型表示。
pow(x, y)x**y 运算后的值。
round(x [,n])返回浮点数 x 的四舍五入值,如给出 n 值,则代表舍入到小数点后的位数。其实准确的说是保留值将保留到离上一位更近的一端。
sqrt(x)返回数字x的平方根。
1.2随机数函数
函数描述
choice(seq)从序列的元素中随机挑选一个元素,比如random.choice(range(10)),从0到9中随机挑选一个整数。
randrange ([start,] stop [,step])从指定范围内,按指定基数递增的集合中获取一个随机数,基数默认值为 1
random()随机生成下一个实数,它在[0,1)范围内。
seed([x])改变随机数生成器的种子seed。如果你不了解其原理,你不必特别去设定seed,Python会帮你选择seed。
shuffle(lst)将序列的所有元素随机排序
uniform(x, y)随机生成下一个实数,它在[x,y]范围内。
1.3三角函数
函数描述
acos(x)返回x的反余弦弧度值。
asin(x)返回x的反正弦弧度值。
atan(x)返回x的反正切弧度值。
atan2(y, x)返回给定的 X 及 Y 坐标值的反正切值。
cos(x)返回x的弧度的余弦值。
hypot(x, y)返回欧几里德范数 sqrt(xx + yy)。
sin(x)返回的x弧度的正弦值。
tan(x)返回x弧度的正切值。
degrees(x)将弧度转换为角度,如degrees(math.pi/2) , 返回90.0
radians(x)将角度转换为弧度
1.4数学常量
常量描述
pi数学常量 pi(圆周率,一般以π来表示)
e数学常量 e,e即自然常数(自然常数)。
2.序列

序列类型包括字符串、列表、元组、集合和字典,这些序列支持以下几种通用的操作,但比较特殊的是,集合和字典不支持索引、切片、相加和相乘操作。

是否支持下标索引

  • 支持:列表、元组、字符串——序列类型

  • 不支持:集合、字典——非序列类型(不能用while遍历)

是否支持重复元素

  • 支持:列表、元组、字符串

  • 不支持:集合、字典

是否可以修改

  • 支持:列表、集合、字典

  • 不支持:元组、字符串

2.1序列索引
  • 正索引(左——右)

  • 负索引(右——左)

2.2序列切片

语法:序列[起始下标:结束下标:步长]

(表示从序列中,从指定位置开始,依次取出元素,到指定位置结束,得到一个新序列)

1)起始下标表示从何处开始,可以留空,留空视作从头开始

2)结束下标表示何处结束,可以留空,留空视作截取到结尾

3)步长表示,依次取元素的间隔

步长1表示,一个个取元素

步长为负数表示,反向取(注意:起始下标和结束下标也要反向标记)

(进行切片操作不会影响序列本身,原因是元组、字符串不允许修改)

#对list进行切片,从1开始,4结束,步长1[1,2,3]
list_01=[0,1,2,3,4,5,6]
result1=list_01[1:4]
print(f"结果1:{result1}")
​
#对tuple进行切片,从头开始,到最后结束,步长1(0, 1, 2, 3, 4, 5, 6)
tuple_01=(0,1,2,3,4,5,6)
result2=tuple_01[:]
print(f"结果2:{result2}")
​
#对str进行切片,从头到尾,步长-1:543210->432
str_01="012345"
result3=str_01[::-1][1:3]
print(f"结果3:{result3}")
2.3序列相加+

拼接

2.4序列相乘*

重复

2.5检查元素是否包含在序列中
str="W3Cschool"
print('C'in str)
2.6和序列相关的内置函数
函数(方法)功能
len()计算序列的长度,即返回序列中包含多少个元素。
max()找出序列中的最大元素。注意,对序列使用 sum() 函数时,做加和操作的必须都是数字,不能是字符或字符串,否则该函数将抛出异常,因为解释器无法判定是要做连接操作(+ 运算符可以连接两个序列),还是做加和操作。
min()找出序列中的最小元素。
list()将序列转换为列表。
str()将序列转换为字符串。
sum()计算元素和。
sorted()对元素进行排序。
reversed()反向序列中的元素。
enumerate()将序列组合为一个索引序列,多用在 for 循环中。
3.字符串
  • 单引号定义法:name='Python'

  • 双引号定义法:name="Python"

  • 三引号定义法:name="""Python"""

3.1字符串的拼接

字符串字面量之间的拼接

print("好好学习"+"天天向上")

字符串字面量和字符串变量的拼接

name1="好好学习"
name2="天天向上"
print(name1+name2)
3.2字符串格式化
eg1:
name1="好好学习"
name2="天天向上%s" % name1
print(name2)
​
eg2:
class_num=57
avg_salary=16781
message="Python大数据学科,北京%s期,毕业平均工资:%s" % (class_num,avg_salary)
print(message)
​
其中%s
- %表示:我要占位
- s表示:将变量变成字符串放入占位的地方
格式符号转化
%s将内容转换成字符串,放入占位位置
%d将内容转换成整数,放入占位位置
%f将内容转换成浮点型,放入占位位置

精度控制

m.n(%5.2f)

  • m:控制宽度,要求是数字(设置的宽度小于数字自身,不生效)

  • n:控制小数点精度,要求是数字(四舍五入)

3.3字符串格式化——快速写法
name="Tom"
set_up_year=1997
stock_price=32
print(f"我是{name},我出生于:{set_up_year},我今天的花费为:{stock_price}")
3.4字符串格式化——表达式的格式化
print("1*1的结果是:%d" % (1*1)
print(f"1*1的结果是:{1*1}")
print("字符串在Python中的类型是:%s" % type('字符串'))
3.5Python 的字符串内建常用函数
函数(方法)描述
capitalize()将字符串的第一个字符转换为大写
count(str, beg= 0,end=len(string))返回str在string里面出现的次数,如果指定beg或者end,则返回指定范围内str出现的次数
find(str, beg=0, end=len(string))检测 str 是否包含在字符串中,如果指定范围 beg 和 end ,则检查是否包含在指定范围内,如果包含,返回开始的索引值,否则返回-1
index(str, beg=0, end=len(string))跟find()方法一样,只不过如果str不在字符串中会报一个异常
len(string)返回字符串长度
lower()转换字符串中所有大写字符为小写
split(str=",", num=string.count(str))以“,”为分隔符截取字符串,如果 num 有指定值,则仅截取 num+1 个子字符串,并存放入列表中。语法:字符串.split(分隔符字符串)(注意:字符串本身不变,而是得到了一个列表对象)
strip()字符串的规整操作,去前后空格以及回车。语法:字符串.strip()
my_str="hello word"
my_str_list=my_str.split(" ")
print(f"字符串:{my_str},将字符串分隔后得到:{my_str_list},类型:{type(my_str_list)}")
#字符串:hello word,将字符串分隔后得到:['hello', 'word'],类型:<class 'list'>
my_str="   hello word "
print(my_str.strip())
​
#去前后指定字符串
#语法:字符串.strip(字符串)(只能从前往后按顺序去掉)
my_str="hello word "
my_str_new=my_str.strip("h")
print(my_str_new)
my_str="hello word21   "
count=my_str.count("o")
print(count)
my_str="hello word21   "
print(len(my_str))
3.6字符串进行遍历
方式一:
my_str="hello word21   "
for i in my_str:
    print(i)
​
方式二:
my_str="hello word21   "
index=0
while index<len(my_str):
    print(my_str[index])
    index=index+1
4.list(列表)
4.1列表的定义

列表使用小括号”[ ]“,且使用逗号”,“隔开各个数据,数据可以是不同的数据类型。

#字面量
[元素1,元素2,元素3,元素4,...]
​
#定义变量
变量名称=[元素1,元素2,元素3,元素4,...]
​
#定义空列表
变量名称=[]
变量名称=list()
4.2列表的下标(索引)

列表[下标索引]

0、1、2、...
反向-1、-2、-3、...
​
name_list=['Tom','Lily','Rose']
print(name_list[0]) #Tom
​
name_list1[[1,2,3],[4,5,6]]
print(name_list[1][0]) #4
4.3嵌套列表
a = ['a', 'b', 'c'] 
n = [1, 2, 3] 
x = [a, n] 
x [['a', 'b', 'c'], [1, 2, 3]] 
x[0] ['a', 'b', 'c'] 
x[0][1] 'b'
4.4列表的常用操作
操作函数(方法)说明
查找元素下标index(元素)查找某元素的下标(语法:列表名.index(元素))
插入元素append(x)将元素x添加至列表尾部(语法:列表名.append(7))
使用+运算符aList=[3,4,5],aList=aList+[7]
extend(iterable)将可迭代对象iterable中所有元素添加至列表尾部(语法:列表名.extend([7,8,9]))
insert(index,x)在列表指定位置index处添加元素x(语法:列表名.insert(index,x))
删除元素del aList[1]
remove(x)在列表中删除首次出现的指定元素x(语法:列表名.remove(x))
pop([index])删除并返回列表对象指定位置的元素,默认最后一个元素(语法:列表名.pop())
清空列表clear()删除列表中所有元素,但保留列表对象
修改元素aList=[3,4,5],aList[0]=1 (#[1,4,5])
统计元素个数count(x)返回指定元素x在列表中的出现次数(语法:列表名.count(x))
reverse(x)对列表元素进行原地翻转
sort(key=None,reverse=False)对列表元素进行原地排序
copy()返回列表对象的浅复制
#删除
方法一:
x=[1,2,1,2,3,1,1,1]
for i in x[::]:
    if i==1:
        x.remove(i)
print(x)
​
方法二(从后往前删除):
for i in range(len(x)-1,-1,-1):
    if x[i]==1:
        del x[i]
print(x)
5.tuple(元组)
5.1定义元组

元组使用小括号”()“,且使用逗号”,“隔开各个数据,数据可以是不同的数据类型。

#定义元组字面量
(元素,元素,......,元素)
(元素,)#单个元素的元组最后要写逗号
#定义元组变量
变量名=(元素,元素,......,元素)
#定义空元组
变量名称=()     #方式一
变量名称=tuple()  #方式二
#元组的嵌套
((元素,元素),())
#下标索引取出内容(同列表)
5.2元组内置函数

operator(tuple1,tuple2) 较两个元组元素

import operator
dict1 = (1, 2, 3) 
dict2 = ('a', 'b', 'c')  
operator.eq(dict1, dict2) 
>>>False
#index()、count()、len(元组)
t=(1,2,3,4,1)
index=t.index(1) #0
num=t.count(1) #2
num=len(t) #5
注:不可以修改(增加或删除元素等)
6.set(集合)

集合:无序可变的容器对象,与字典一样使用一对大括号作为界定符,同一个集合的元素之间不允许重复,集合中每个元素都是唯一的。

6.1集合的定义
基本语法
#定义集合字面量
{元素,元素,......,元素}
#定义集合变量
变量名称={元素,元素,......,元素}
#定义空集合
变量名称=set()
6.2添加新元素

语法:集合.add(元素)——将指定元素添加到集合内

my_set={1,2,2,3}
print(my_set)
my_set.add(4)
print(my_set)

语法:集合.update(x)——参数可以是列表,元组,字典等

thisset = set(("Google", "w3Cschool", "Taobao"))
thisset.update({1,3})
print(thisset)
thisset.update([1,4],[5,6])  
print(thisset)
6.3移除元素
my_set={1,2,2,3}
my_set.remove(2)
print(my_set)
6.4从集合中随机取出元素

语法:集合.pop()(功能:从集合中随机取出一个元素)

结果:会得到一个元素的结果。同时集合本身被修改,元素被移除

my_set={1,2,2,3}
element=my_set.pop()
print(element)
6.5清空集合

语法:集合.clear()(功能:清空集合)

结果:结合本身被清空

my_set={1,2,2,3}
print(my_set.clear())
6.6取出两个集合的差集

语法:集合1.difference(集合2)(功能:取出集合1和集合2的差集(集合1有而集合2没有的元素))

结果:得到一个新集合,集合1和集合2不变

set1={1,2,3,4}
set2={3,4,8,9}
set3=set1.difference(set2)
print(set3) #{1, 2}
print(set1) #{1,2,3,4}不变
print(set2) #{3,4,8,9}不变
6.7消除两个集合的差集

语法:集合1.difference_update(集合2)

功能:对比集合1和集合2,在集合1内,删除和集合2相同的元素。

结果:集合1被修改,集合2不变

set1={1,2,3,4}
set2={3,4,8,9}
set1.difference_update(set2)
print(set1) #{1, 2}
print(set2) #{8, 9, 3, 4}
6.8两个集合合并

语法:集合1.unior(集合2)

功能:将集合1和集合2组合成新集合

结果:得到新集合,集合1和集合2不变

set1={1,2,3,4}
set2={3,4,8,9}
set3=set1.union(set2)
print(set3)
print(set1)
print(set2)
# {1, 2, 3, 4, 8, 9}
# {1, 2, 3, 4}
# {8, 9, 3, 4}
6.9统计元素个数

语法:len(集合)

set1={1,2,3,4}
num=len(set1)
print(num) #4
6.10集合的遍历
set1={1,2,3,4}
for i in set1:
    print(i)
list1=[1,2,3,4,5]
set1=set()
for i in list1:
    print(i)
    set1.add(i)
print(set1)
6.11集合内置方法完整列表
函数(方法)描述
add()为集合添加元素
clear()移除集合中的所有元素
copy()拷贝一个集合
difference()返回多个集合的差集
difference_update()移除集合中的元素,该元素在指定的集合也存在
discard()删除集合中指定的元素
intersection()返回集合的交集
intersection_update()返回集合的交集
isdisjoint()判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False
issubset()判断指定集合是否为该方法参数集合的子集
issuperset()判断该方法的参数集合是否为指定集合的子集
pop()随机移除元素
remove()移除指定元素
symmetric_difference()返回两个集合中不重复的元素集合。
symmetric_difference_update()移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中
union()返回两个集合的并集
update()给集合添加元素
7.dict(字典)
7.1字典的定义

使用{},存储的元素是一个个的:键值对。(不允许key重复,新的会覆盖老的)

#定义字典字面量
{key:value,key:value,......,key:value}
#定义字典变量
my_dict={key:value,key:value,......,key:value}
#定义空字典
my_dict={} #方式一
my_dict=dict() #方式二
​
dict1={"张三":23,"李四":34,"赵五":21}
dict2={}
dict3=dict()
print(dict1)
print(dict2)
print(dict3)
#通过key来取对应的value
dict1={"张三":23,"李四":34,"赵五":21}
age=dict1["李四"]
print(age)
7.2字典的嵌套
dict2={
    "王力鸿":{
        "语文":77,"数学":66,"英语":33
    },
    "周杰伦":{
        "语文":97,"数学":76,"英语":93
    }
}
print(dict2)
print(dict2["周杰伦"]["语文"])
7.3新增元素

语法:字典[key]=Value

结果:字典被修改,新增了元素

dict1={"张三":23,"李四":34,"赵五":21}
dict1["小六"]=33
print(dict1)
7.4更新元素

语法:字典[key]=Value

结果:字典被修改,元素被更新

(注:字典key不可以重复,所以对已存在的key执行上述操作,就是更新Value值)

dict1={"张三":23,"李四":34,"赵五":21}
dict1["张三"]=44
print(dict1)
7.5删除元素

语法:字典.pop(key)

结果:获得指定key的Value,同时字典被修改,指定key的数据被删除

dict1={"张三":23,"李四":34,"赵五":21}
dict1.pop("张三")
print(dict1)
7.6清空元素

语法:字典.clear()

结果:字典被修改,元素被清空

dict1={"张三":23,"李四":34,"赵五":21}
dict1.clear()
print(dict1)
7.7获取全部的key

语法:字典.keys()

结果:得到字典中的全部key

dict1={"张三":23,"李四":34,"赵五":21}
dict_key=dict1.keys()
print(dict_key)
7.8遍历字典(不可以使用while)
方法一:
dict1={"张三":23,"李四":34,"赵五":21}
for key in dict1:
    print(key)
    value=dict1[key]
    print(value)
​
方法二:(通过获取全部的key,然后再遍历)
dict1={"张三":23,"李四":34,"赵五":21}
keys=dict1.keys()
for key in keys:
    print(key)
    value=dict1[key]
    print(value)
7.9统计字典内的元素数量——len
方法一:
count=0
dict1={"张三":23,"李四":34,"赵五":21}
for i in dict1:
    print(i)
    value=dict1[i]
    print(value)
    count+=1
print(count)
​
方法二:
dict1={"张三":23,"李四":34,"赵五":21}
print(len(dict1))
7.10Python 字典包含了以下内置方法
函数(方法)描述
radiansdict.clear()删除字典内所有元素
radiansdict.copy()返回一个字典的浅复制
radiansdict.fromkeys()创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
radiansdict.get(key, default=None)返回指定键的值,如果值不在字典中返回default值
key in dict如果键在字典dict里返回true,否则返回false
radiansdict.items()以列表返回可遍历的(键, 值) 元组数组
radiansdict.keys()以列表返回一个字典所有的键
radiansdict.setdefault(key, default=None)和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
radiansdict.update(dict2)把字典dict2的键/值对更新到dict里
radiansdict.values()以列表返回字典中的所有值
8.数据类型转换
语句(函数)说明
int(x)将x转换为一个整数
float(x)将x转换为一个浮点数
str(x)将对象x转换为字符串
num_str=str(11)
print(type(num_str),num_str)
​
float_str=str(11.334)
print(type(float_str),float_str)
​
num=int("11")
print(type(num),num)
​
num1=float("11.24")
print(type(num1),num1)
​
float_num=float(11)
print(type(float_num),float_num)
​
int_num=int(11.2)
print(type(int_num),int_num)
list1=[1,6,3,5,4,2]
set1={1,2,5,4,3}
tuple1=(1,3,2,4)
str1="abcd"
dict1={"key3":1,"key2":2,"key1":0}
#len()
print(len(list1))
print(len(set1))
print(len(tuple1))
print(len(str1))
print(len(dict1))
#min()
print(min(list1))
print(min(set1))
print(min(tuple1))
print(min(str1))
print(min(dict1))
#max
print(max(list1))
print(max(set1))
print(max(tuple1))
print(max(str1))
print(max(dict1))
​
#类型转换:容器转列表
print(list(list1))
print(list(tuple1))
print(list(str1))
print(list(set1))
print(list(dict1))
#类型转换:容器转元组
print(tuple(dict1))
print(tuple(tuple1))
print(tuple(str1))
print(tuple(set1))
print(tuple(dict1))
#类型转换:容器转字符串
print(str(list1))
print(str(tuple1))
print(str(str1))
print(str(set1))
print(str(dict1))
#类型转换:容器转集合
print(set(list1))
print(set(tuple1))
print(set(str1))
print(set(set1))
print(set(dict1))
​
#sorted排序
#sorted(容器,[reverse=True])
print(sorted(list1))
print(sorted(tuple1))
print(sorted(str1))
print(sorted(set1))
print(sorted(dict1))

二、标识符

1.标识符命名规则
1.1内容限制
  • 英文

  • 中文(不建议)

  • 数字(不能开头)

  • 下划线

1.2大小写敏感
1.3不可使用关键字
2.变量及变量名规范
  • Python 可以同时为多个变量赋值,如 a, b = 1, 2。

  • 一个变量可以通过赋值指向不同类型的对象。

  • 见名知意

  • 多个单词组合变量名,要用下划线做分隔

  • 英文字母全小写

三、运算符

1.算术运算符
运算符描述
+、-、*、\、%
//取整除
**指数
2.比较运算符
3.赋值运算符
4.位运算符
按位与运算(a&b)按位或运算(a|b)按位异或(a^b)
a(60)的二进制表示0011 11000011 11000011 1100
b(13)的二进制表示0000 11010000 11010000 1101
运算结果0000 11000011 11010011 0001
结果的十进制表示126149
按位取反(~a)左移(a<<2)右移(a>>2)
a(60)的二进制表示0011 11000011 11000011 1100
运算结果1100 00111111 00000000 1111
运算结果的十进制表示-6124015
5.逻辑运算符
运算符逻辑表达式描述
andx and y"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。
orx or y"或" - 如果 x 是 True,它返回 x的值,否则它返回 y 的计算值。
notnot x"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。
6.成员运算符
运算符描述实例
in如果在指定的序列中找到值返回 True,否则返回 False。如果 x 在 y 序列中返回 True,否则返回False。
not in如果在指定的序列中没有找到值返回 True,否则返回 False。如果 x 不在 y 序列中返回 True,否则返回False。
#coding=utf-8
a = 10
b = 20
list = [1, 2, 3, 4, 5 ];
if ( a in list ):
    print ("变量a在给定的列表list中")
else:
    print ("变量a不在给定的列表list中")
if ( b not in list ):
    print ("变量b不在给定的列表list中")
else:
    print ("变量b在给定的列表list中")
​
# 修改变量a的值
a = 2
if ( a in list ):
    print ("变量a在给定的列表list中")
else:
    print ("变量a不在给定的列表list中")
7.身份运算符
运算符描述实例
isis 是判断两个标识符是不是引用自一个对象x is y, 如果 id(x) 等于 id(y) , is 返回结果 True
is notis not 是判断两个标识符是不是引用自不同对象x is not y, 如果 id(x) 不等于 id(y). is not 返回结果 True
#coding=utf-8
a = 20
b = 20
if ( a is b ):
    print ("a和b有相同的标识")
else:
    print ("a和b没有相同的标识")
if ( id(a) == id(b) ):
    print ("a和b有相同的标识")
else:
    print ("a和b没有相同的标识")
​
# 修改变量 b 的值
b = 30
if ( a is b ):
    print ("a 和 b 有相同的标识")
else:
    print ("a 和 b 没有相同的标识")
if ( a is not b ):
    print ("a 和 b 没有相同的标识")
else:
    print ("a 和 b 有相同的标识")
(注:存储位置)

四、数据输入、输出

1.input()——输入
eg1:
print("请告诉我你是谁?")
name=input()
print("我知道了,你是%s" % name)
​
eg2:
name=input("请告诉我你是谁?")
print(f"我知道了,你是{name},end=''" ) #end=''不换行
2.print()——输出

五、判断和循环

1.if
if 要判断的条件:
    条件成立要完成的事
​
#eg
age=20
if age>=18:
    print("我已经成年")
if 条件:
    满足条件时要做的事情
    ......
else:
    不满足条件时要做的事情
    ......
​
#eg
age=int(input("请输入您的年龄:")) #字符串类型
if age>=18:
    print("您已经成年,清补票的差价10元")
else
    print("您未成年。")
if 条件1:
    条件1满足的事情
    .....
 elif 条件2:
    条件2满足的事情
    ......
else:
    条件3满足的事情
    ......
​
#eg
age=int(input("请输入您的年龄:")) #字符串类型
if age>=60:
    print("您可以免费游玩")
elif age>=18:
    print("您已经成年,请补票的差价10元")
else:
    print("您未成年。")
2.match-case语句
match variable: #这里的variable是需要判断的内容
    case ["quit"]: 
        statement_block_1 # 对应案例的执行代码,当variable="quit"时执行statement_block_1    
    case ["go", direction]: 
        statement_block_2
    case ["drop", *objects]: 
        statement_block_3
    ... # 其他的case语句
    case _: #如果上面的case语句没有命中,则执行这个代码块,类似于Switch的default
        statement_block_default
​
#eg
def http_error(status):
    match status:
        case 400:
            return "Bad request"
        case 404:
            return "Not found"
        case 418:
            return "I'm a teapot"
        case _:
            return "Something's wrong with the Internet"
3.while条件
while 条件:
    条件满足时,做的事情1
    条件满足时,做的事情2
    条件满足时,做的事情3
        ......
        
#案例
import random
num=random.randint(1,100)
count=0
flag=True
while flag:
    guess_num=int(input("请输入你猜的数字:"))
    count+=1
    if guess_num==num:
        flag=False
        print("您以猜中")
    else:
        if guess_num>num:
            print("您输入的数字偏大")
        else:
            print("您输入的数字偏小")
print(f"一共猜了{count}次。")
​
count=9
row=line=1
while count:
    while row>=line:
        sum=line*row
        print(f"{line}*{row}={sum}\t",end='')#通过\t进行对齐;end=‘’不换行
        line+=1
    print("")
    row+=1
    line=1
    count-=1
4.for
for 临时变量 in 待处理数据集(序列):
    循环满足条件时执行的代码
    
name="helloworld"
for x in name:
    print(x)
5.range
  • range(num)

获取一个从0开始,到num结束的数字序列(不含num本身)

  • range(num1,num2)

获取一个从num1开始,到num2结束的数字序列(不含num2本身)

  • range(num1,num2,step)

获取一个从num1开始,到num2结束的数字序列(不含num2本身),数字之间的步长,以step为准(step默认为1)

变量作用域——循环内

count=9
row=line=1
for i in range(1,10):
    for j in range(1,i+1):
        sum=j*i
        print(f"{j}*{i}={sum}\t",end='')#通过\t进行对齐;end=‘’不换行
    print("")
    
import random
a=[random.randint(1,100) for i in range(10)] #[72,26,80,65,34,86,19,74,52,40]
print(max(a),min(a),sum(a)) #86 19 548
6.循环中断
6.1continue

跳出当前循环,继续进行下一轮循环。

6.2break

中止循环

六、函数

函数:是组织好的,可重复使用的,用来实现特定功能的代码段。

1.函数的使用
def 函数名(传入参数):
    函数体
    return 返回值
​
#定义函数
def say_hi():
    print("Hello World!")
#调用函数
say_hi()
​
    
4.有返回值的函数
def add(a,b):
    result=a+b
    return=result
r=add(1,2)
print(r )
​
5.函数的嵌套
def func_a():
    print("-----2-----")
def func_b():
    print("-----1-----")
    func_a()
    print("-----3-----")
6.变量在函数中的作用
局部变量:定义在函数体内部的变量,即只在函数体内部生效(临时保存数据)
全局变量:在函数体内、外都能生效的变量

global关键字:在函数内修改全局变量

2.函数多种传参方式
有参数的函数
def add(a,b):
    #对函数进行说明文档
    """
    add函数可以接受2个参数,进行两个数相加的功能
    :param x:形参x表示相加的其中一个数字
    :param y:形参y表示相加的另一个数字
    :return:返回值是两个数相加的和
    """
    result=a+b
    print(f"{x}+{y}的结果是:{result}")
2.1位置参数

调用函数时根据函数定义的参数位置来传递参数

def user_info(name,age,gender):
    print(f”您的名字是'{name},年龄是{age},性别是{gender}“)
user_info("Tom",20,'男')
​
#不定长(元组)
def user_info(*arg):
    print(arg)
user_info("Tom",20,'男')
user_info("Jack")
2.2关键字参数

函数调用时通过”键=值“形式传递参数

作用:可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求

def user_info(name,age,gender):
    print(f”您的名字是'{name},年龄是{age},性别是{gender}“)
user_info(name="Tom",gender="男",age=20)
​
#不定长(字典)
def user_info(**arg):
    print(arg)
user_info(name="Tom",age=20,gender='男')
user_info(name="Jack")
2.3缺省参数

缺省参数也叫默认参数,用于定义函数,为参数提供默认值,调用函数时可不传该默认参数的值(注:所有位置参数必须出现在默认参数前,包括函数定义和调用)

作用:当调用函数时没有传递参数,就会使用默认是用缺省参数对应的值。

def user_info(name,age,gender='男'):
    print(f”您的名字是'{name},年龄是{age},性别是{gender}“)
user_info("Tom",20,"女")
user_info("Jack",18)
2.4不定长参数
def arithmetic_mean(*l):
    if len(l) == 0:
        return 0
    else:
        sum = 0
        for x in l:
            sum += x
        return sum/len(l)
print(arithmetic_mean(45,32,89,78))
print(arithmetic_mean(8989.8,78787.78,3453,78778.73))
print(arithmetic_mean(45,32))
2.5函数作为参数传递
def test_fund(compute):
    result=compute(1,2)
    print(type(compute)) #function(函数)
    print(result)
    
def compute(x,y):
    return x+y
​
test_fund(compute)
​
#无参
def test_fund():
    result=compute(1,2)
    print(result)
    
def compute(x,y):
    return x+y
​
test_fund()
3.函数多返回值
#方式一
def test_return():
    return 1,2
x,y=test_return()
print(x) #1
print(y) #2
​
#方式二:支持不同类型的数据return
def test_return():
    return 1,"hello"
x,y=test_return()
print(x) #1
print(y) #hello
print(type(y)) #str
4.匿名函数
  • def关键字,可以定义带有名称的函数

    有名称的函数,可以基于名称重复使用

  • lambda关键字,可以定义匿名函数(无名称)

    无名称的匿名函数,只可临时使用一次

    语法:lambda 传入参数:函数体(一行代码)

#1
f=(lambda x,y:x*y)
print(f(2,4))
​
#2
def test_fund(compute):
    result=compute(1,2)
    print(result)
​
def compute(x,y):
    return x+y
​
test_fund(lambda x,y:x+y)
5.递归函数
def sum_recu(n): 
    if n>0: 
       return n +sum_recu(n-1) 
    else: 
       return 0 
       
sum = sum_recu(100) print(sum)

七、模块、包的导入与使用

1.Python模块

模块(module):是一个Python文件,以.py结尾。每一个模块都可以帮助我们快速的实现一些功能。

1.1模块的导入
from 模块名 import (模块|类|变量|函数|*) as 别名
常用组合形式如:
import 模块名
from 模块名 import 类、变量、方法等
from 模块名 import *
import 模块名 as 别名
from 模块名 import 功能名 as 别名
1.2自定义模块
def test(a,b):
    c=a+b
    print(c)
    
# from module import test
# test(2,9)
​
import module
module.test(1,5)
1.3测试模块
def test(a,b):
    c=a+b
    print(c)
​
if __name__ == '__main__':
    test(8,0)
#测试写的函数,在外面调用module的时候又不会运行所写的代码
--all--
2.Python包

包就是一个文件夹,里面可以存放许多Python的模块,通过包,在逻辑上将一批模块归为一类,方便使用。

—init—.py文件的作用?

创建包会默认自动创建的文件,通过这个文件来表示一个文件夹是Python的包,而非普通的文件夹

—all—变量的作用

同模块中学习到的是一个作用,控制import * 能够导入的内容

def info_print1():
    print("我是模块1的功能函数代码")
   
def info_print2():
    print("我是模块2的功能函数代码")
​
#方式一
import my_package.my_module1
import my_package.my_module2
​
my_package.my_module1.info_print1()
my_package.my_module2.info_print2()
​
#方式二
from my_package import my_module1
from my_package import my_module2
my_package.info_print1()
my_package.info_print2()
​
#方式三
from my_package.my_module1 import info_print1
from my_package.my_module1 import info_print1
info_print1()
info_print2()
2.1安装第三方Python包
科学计算中常用的:numpy包
数据分析中常用的:pandas包
大数据计算中常用的:pyspark、apache-flink包
图形可视化常用的:matplotlib、pyecharts
人工智能常用的:tensorflow
python-docx(读取word)、xird(读取excel)
......
cmd
#方式一
pip install 包名称
pip list #查看安装包的列表
​
#方式二
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名称
​
#方式三
pycharm内直接安装

八.文件

1.文件的读取

open(name,mode,encoding)

with open(name,mode,encoding) as f:(不需要关闭文件)

  • name:是要打开的目标文件名的字符串(可以包含文件所在的具体路径)

  • mode:设置打开文件的模式:只读,写入,追加等

  • encoding:编码格式(推荐使用UTF-8)

mode描述
r以只读方式打开文件。文件的指针将会放在文件的开头。
w打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,原有内容会被删除
a打开一个文件用于追加。如果该文件已存在,新的内容将会被写入到已有内容之后;如果该文件不存在,创建新文件进行写入。
#打开文件——方式一
f=open("E:\\PythonProject\\PythonWork\\Data\\test.txt","r",encoding="UTF-8")
print(type(f))
f.close()
​
#打开文件——方式二
with open("E:\\PythonProject\\PythonWork\\Data\\test.txt","r",encoding="UTF-8") as f:
    for line in f:
        print(line)
1.1read()

语法:文件对象.read(num)(num表示要从文件中读取的数据的长度(字节),如果没有传入num,就表示读取文件中所有的数据)

#打开文件
f=open("E:\\PythonProject\\PythonWork\\Data\\test.txt","r",encoding="UTF-8")
print(type(f))
print(f.read(10))
1.2readlines()

可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。

#打开文件
f=open("E:\\PythonProject\\PythonWork\\Data\\test.txt","r",encoding="UTF-8")
print(type(f))
lines=f.readlines()
print(lines)
print(type(lines)
1.3readine()
#打开文件
f=open("E:\\PythonProject\\PythonWork\\Data\\test.txt","r",encoding="UTF-8")
print(type(f))
line1=f.readline()
print(line1)
line2=f.readline()
print(line2)
line3=f.readline()
print(line3)
​
#for循环
for line in f:
    print(line)
​
f.close()
1.4close()——文件关闭(内置flush()功能)

time.sleep(50000)——文件睡眠

#出现的次数
f=open("E:\\PythonProject\\PythonWork\\Data\\test.txt","r",encoding="UTF-8")
content=f.read()
count=content.count("快乐")
print(count)
​
#切分
f=open("E:\\PythonProject\\PythonWork\\Data\\test.txt","r",encoding="UTF-8")
for line in f:
    line=line.strip()#去除开头和结尾的空格
    words=line.split(" ")
    print(words)
2.文件的写入
f=open("E:\\PythonProject\\PythonWork\\Data\\test.txt","w")
f.write("hey world")
f.flush()
3.文件的追加
f=open("E:\\PythonProject\\PythonWork\\Data\\test.txt","a")
f.write("world")
#f.write("\n本书特色") #换行
f.close()
4.文件综合案例
#读取文件bill.txt
#将文件写出到 信息.txt 文件作为备份
#同时,将文件内标记为测试的数据行丢失
​
#实现思路
#open和r模式打开一个文件对象,并读取文件
#open和w模式打开另一个文件对象,用于文件写出
#for循环内容,判断是否是测试不是测试就write写出,是测试就continue跳过
#将2个文件对象均close()
​
f1=open("E:\\PythonProject\\PythonWork\\Data\\bill.txt","r",encoding="UTF-8")
f2=open("E:\\PythonProject\\PythonWork\\Data\\信息.txt","w")
for line in f1:
    line=line.strip()
    if line.split(",")[4]=="测试":
        continue
    f2.write(line)
    f2.write("\n")
f1.close()
f2.close()

九.异常

处理异常的两种情况

1)整个程序因为一个bug停止运行

2)对bug进行提醒,整个程序继续运行——异常的捕获

1.异常的捕获方法
#基本捕获异常
try:
    可能发生错误的代码
excep:
    如果出现异常执行的代码
else:
    print("我是else,是没有异常的时候执行的代码")
finally 
    print("表示的是无论是否有异常都执行")
​
#捕获指定异常 
try:
    print(name)
excep NameError as e:
    print('name变量名称未定义错误')
    
#捕获多个异常 
try:
    1/0
excep (NameError,ZeroDivisionError) as e:
    print('name变量名称未定义错误')
    
#捕获所有异常
try:
    print(name)
excep Exception as e:
    print('name变量名称未定义错误')
2.异常的传递性
def func1():
    print("func1 开始执行")
    num=1/0
    print("func1 结束执行")
    
def func2():
    print("func2 开始执行")
    func1()
    print("func2 结束执行")
​
def main():
    func2()
​
main()

十、面向对象

1.类的定义和使用
class 类名称:
    类的属性(成员变量)
    类的行为(成员方法)
​
创建类对象的语法:
对象=类名称( )
​
在类中定义成员方法
def 方法名(self,形参1,......,形参N):
    方法体

self关键字是成员方法定义的时候,必须填写的

  • 它用来表示类对象自身的意思

  • 当我们使用类对象调用方法的时候,self会自动被python传入

  • 在方法内部,想要访问类的成员变量,必须使用self

#设计类(class)
class Student:
    name=None
    def say_hi(self):
        print(f"Hi大家好,我是{self.name}")   
#创建对象
stu_1=Student()
stu_2=Student()
#对象属性赋值
stu_1.name="周杰伦"
stu_2.name="林俊杰"
​
#类的使用
class Student:
    name=None
    gender=None
    nationality=None
    native_place=None
    age=None
    
    def say_hi(self):
        print(f"Hi大家好,我是{self.name}")
        
    def say_hi2(self,msg):
        print(f"Hi大家好,{msg}")
        #print(f"Hi大家好,{self.name},{msg}")
​
stu_1=Student()
stu_2=Student()
​
stu_1.name="周杰伦"
stu_1.gender="男"
stu_1.nationality="中国"
stu_1.native_place="中国台湾"
stu_1.age=34
​
stu_2.name="林俊杰"
stu_2.gender="男"
stu_2.nationality="新加坡"
stu_2.native_place="中国"
stu_2.age=34
​
print(stu_1.name,stu_1.gender,stu_1.nationality,stu_1.native_place,stu_1.age)
stu_1.say_hi()
print(stu_2.name,stu_2.gender,stu_2.nationality,stu_2.native_place,stu_2.age)
stu_2.say_hi() #调用的时候无需传参
stu_2.say_hi2("很高兴认识大家") #调用的时候,需要传msg参数(self透明)
2.内置方法(魔术方法)

__init__(self,):构造方法,可用于创建类对象的时候设置初始化行为
- 在创建类对象(构建类)的时候,会自动执行
- 在创建类对象(构建类)的时候,将传入参数自动传递给__init__()方法使用 
__str__(self):用于实现类对象转换字符串的行为
__lt__(self,other):用于2个对象进行小于或大于比较
__le__(self,other):用于2个对象进行小于等于或大于等于比较
__qe__(self,other):用于2个对象进行相等比较
​
class Student:
    name=None
    age=None
    address=None
​
    def __init__(self,name,age,address):
        self.name=name
        self.age=age
        self.address=address
​
    def __str__(self):
        return f"name:{name}\nage:{age}\naddress:{address}"
​
    def __lt__(self, other):
        return self.age<other.age
​
    def __le__(self, other):
        return self.age<=other.age
​
    def __eq__(self, other):
        return self.age==other.age
​
stu1=Student("liu",9,"jfal")
stu2=Student("li",19,"jfa")
print(stu1<stu2)
print(stu1>stu2)
print(stu1>=stu2)
print(stu1==stu2)
​
# for i in range(1,3):
#     name = input(f"请输入第{i}位同学的姓名:")
#     age = input(f"请输入第{i}位同学的年龄:")
#     address = input(f"请输入第{i}位同学的地址:")
#     stu=Student(name,age,address)
#     print(stu)
#     # print(stu.name,stu.age,stu.address)
#     i = +1    
3.面向对象

面向对象的三大特性

  • 封装

  • 继承

  • 多态

3.1封装

私有成员的访问限制

  • 类对象无法访问私有成员

  • 类中的其它成员可以访问私有成员

class Phone:
    __is_5g_enable=True
    def __check_5g(self):
        if self.__is_5g_enable:
            print("5g开启")
        else:
            print("5g关闭,使用4g网络")
​
    def call_by_5g(self):
        self.__check_5g()
        print("正在通话中")
​
phone=Phone()
phone.call_by_5g()
3.2继承
继承的基础语法
#单继承
class 类名(父类名):
    类内容体
    
#多继承:一个类,可以继承多个父类(如果父类有同名方法或属性,先继承的优先级高于后继承的)   
class 类名(父类1,父类2,父类3,......,父类N):
    类内容体
(注:pass关键字:占位语句,用来保证函数,或类定义的完整性,表示内容空的意思)
​
class Phone:
    id=None
    producer="huawei"
​
    def call_by_4g(self):
        print("4g通话")
​
class Phone22:
    def call(self):
        print("第四代")
​
class Phone23(Phone,Phone22):
    face_id="1001"
    def call_by_5g(self):
        print("5g通话")
​
phone=Phone23()
print(phone.producer,phone.face_id)
phone.call_by_4g()
phone.call_by_5g()
phone.call()
 

复写和使用父类成员

复写:子类继承父类的成员属性和成员方法后,如果对其“不满意”,那么可以进行复写。即:在子类中重新定义同名的属性或方法即可。

class Parent:        # 定义父类
   def myMethod(self):
      print ('调用父类方法')
class Child(Parent): # 定义子类
   def myMethod(self): #成员方法重写
      print ('调用子类方法')
​
c = Child()          # 子类实例
c.myMethod()         # 子类调用重写方法
调用父类成员:
方式1:父类名.成员变量
    父类名.成员方法(self)
方式2:super().成员变量
    super().成员方法(self)
​
class Phone:
    id=None
    producer="huawei"
​
    def call_by_4g(self):
        print("4g通话")
   
class Phone23(Phone):
    producer="hw"
    face_id="1001"
    #调用父类的成员变量
    #方式1
    print(f"父类的厂商是:{Phone.producer}")
    #方式2
    print(f"父类的厂商是:{super().producer}")
    def call_by_5g(self):
        print("5g通话")
​
phone=Phone23()
print(phone.producer,phone.face_id)
phone.call_by_4g()
phone.call_by_5g()
phone.call()

第八章

类型注解

ctrl+p

变量的类型注解

语法:变量:类型

功能:1.帮助第三方IDE工具(如PyCharm)对代码进行类型推断,协助做代码提示

2.帮助开发者自身对变量进行类型注释(备注)

#基础数据类型注解
var_1:int=10
var_2:float=3.1415926
var_3:bool=true
var+4:str="jfakfl"
​
#类对象类型注解
class Student:
    pass
stu:Student=Student()
​
#基础容器类型注解
my_list:list[int]=[1,2,3] # type:int
my_tuple:tuple[str,int,bool]=("sjfka",2,True)
my_set:set={1,2,3}
my_dict:dict={"jjka":33}
my_str:str="fjakfalj"
​
#在注释中进行类型注解
#type:类型

函数的类型注解

def 函数方法名(形参名:类型,形参名:类型,......):
    pass
​
def add(x:int,y:int):
    return x+y
​
#返回值注解
def 函数方法名(形参:类型,......,形参:类型) ->返回值类型:
    pass

Union类型

使用方式:导包:from typing import Union

使用:Union[类型,......,类型]

from typing import Union
#变量
my_list:list[Union[str,int]=["sjfa",2,3,"jlfa"] 
my_dict:dict[Union[str,int]]={"jjka":33,"jfal":11}
#函数
def add(data:Union[int,str])->Union[int,str]:
    return x+y
3.3多态

多态:指多种状态,即完成某个行为时,使用不同的对象会得到不同的状态。

函数形参声明接收父类对象,实际传入父类的子类对象进行工作

(以父类做定义声明,以子类做实际工作,用以获得同一行为,不同状态)

class Animal:
    def speak(self):
        pass
class Dog(Animal):
    def speak(self):
        print("汪汪")
class Cat(Animal):
    def speak(self):
        print("喵喵")
​
def make_noise(animal:Animal):
    animal.speak()
​
dog=Dog()
cat=Cat()
make_noise(dog)
make_noise(cat)
4.抽象类(接口)

父类用来确定有哪些方法,具体的方法实现由子类自行决定

  • 抽象的父类设计(设计标准)

  • 具体的子类实现(实现标准)

抽象类:含有抽象方法的类

抽象方法:方法体实现的(pass)

5.类型注解

ctrl+p

功能:1.帮助第三方IDE工具(如PyCharm)对代码进行类型推断,协助做代码提示

2.帮助开发者自身对变量进行类型注释(备注)

5.1变量的类型注解
语法:变量:类型
​
#基础数据类型注解
var_1:int=10
var_2:float=3.1415926
var_3:bool=true
var+4:str="jfakfl"
​
#类对象类型注解
class Student:
    pass
stu:Student=Student()
​
#基础容器类型注解
my_list:list[int]=[1,2,3] # type:int
my_tuple:tuple[str,int,bool]=("sjfka",2,True)
my_set:set={1,2,3}
my_dict:dict={"jjka":33}
my_str:str="fjakfalj"
​
#在注释中进行类型注解
#type:类型
5.2函数的类型注解
def 函数方法名(形参名:类型,形参名:类型,......):
    pass
​
#返回值注解
def 函数方法名(形参:类型,......,形参:类型) ->返回值类型:
    pass
    
def add(x:int,y:int) ->int:
    return x+y
5.3Union类型
使用方式:导包:from typing import Union
         使用:Union[类型,......,类型]
​
from typing import Union
#变量
my_list:list[Union[str,int]=["sjfa",2,3,"jlfa"] 
my_dict:dict[Union[str,int]]={"jjka":33,"jfal":11}
#函数
def add(data:Union[int,str])->Union[int,str]:
    return x+y

十一、数据库

综合案例
创建到MySQL的数据库链接
​
from pymysql import Connection
conn=Connection(
    host='localhost', #主机名(或IP地址)
    port=3306, #端口,默认3306
    user='root', #账户名
    password='123456',#密码
    autocommit=True #自动提交确认
)
#打印MySQL数据库软件信息
print(conn.get_server_info())
#创建表
# cursor=conn.cursor() #获得游标对象
# conn.select_db("dbtest2")
# cursor.execute("create table teacher(id int);")
#查询
# cursor=conn.cursor()
# conn.select_db("dbtest2")
# cursor.execute("select * from student;")
# #获取查询结果
# results:tuple=cursor.fetchall()
# for r in results:
#     print(r)
#插入
cursor=conn.cursor()
conn.select_db("dbtest2")
cursor.execute("insert into student values(5,'李四',32,'男');")
#确认
#conn.commit()
#关闭到数据库的链接
conn.close()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值