python学习笔记
雄关漫道真如铁,而今迈步从头越
——毛泽东
基础语法
缩进
缩进就是每一行开头都要有一定的格式,python需要严格的缩进去控制代码
1 2 3 4 5 if True : print ("True" ) else : print ("False" )
多行语句
如果语句太长会导致代码十分的不整齐并且混乱,我们可以通过 \ 来将同一行语句,变成多行
1 2 3 print (1312371237 + \ 123342132 + \ 1342433532 )
注释
引号
单引号表示一个词,双引号表示一个句子,六个双引号表示多个句子组成的段落
1 2 3 4 word = 'word' sentence = "这是一个句子。" paragraph = """这是一个段落。 包含了多个语句"""
同行多语句
用分号隔开即可
字面量
定义:通俗来讲就是写在程序里面的值
值类型
类型
描述
说明/举例
数字(Number)
包括: 整数(int)浮点数(float/double) 复数(complex) 布尔(bool)
int : 10,-8,19 float/double : 1.109,-838.1 complex: 4+3j 以j结尾 bool : 只有true和false,两个值,方便表示真假判断
字符串(String)
相当于一段文本
string :由任意字符组成
列表(List)
有序的可变 序列
最常用的类型,可有序记录一堆数据
元组(Tuple)
有序的不可变 序列
可有序记录一堆不可变的数据集合
集合(Set)
无序不重复 组合
可无序记录一堆不重复的数据集合
字典(Dictionary)
无序的Key-Value 集合
可无序记录一堆Key-Value 的数据集合
输入语句
通用格式为:变量名 = input(“提示字符串”)
注意:python输入默认解析为字符串,需要进行类型转换,后面会讲
1 2 input ("按下 enter 键退出,其他任意键显示...\n" )age = input ("请输入年龄:" )
输出语句
输出括号内的内容
print格式化输出:
与C语言的占位符规则相似
占位符
含义
%d
输出整数
%s
输出字符串
%c
输出单个字符
%f
输出小数
当然了这种输出方式可以更方便控制输出格式,至于更详细的用法可以上网查一下,这里不展开了
1 2 3 animal = 'monkey' num = 4 print ('A %s has %d legs' % (animal, num))
我们还可以在字符串前声明一个 f 这样也可以格式化输出
1 2 3 age = 18 name = "lqf" print (f"我是{name} ,我今年{age} 岁" )
这种方式是最优雅的,但是不如占位符好控制,两者可以根据需求进行选择
变量
通俗来讲,就是程序运行中用来存储某种数据的值
比如我想存一个人的身高,可以定义 height = 185 或者 h = 185 ,命名只能有字母、数字、下划线
至于是具体命名更好,还是简单命名更好,我个人建议,如果你是在参加个人竞赛,那么保证命名自己理解就好。如果你是需要与别人合作,比如团队竞赛,或者开发,那么越具体越好
1 2 3 4 5 6 height = 50 print ("小名的身高为:" ,height)height = height + 10 print ("小名的最新身高为:" ,height)
1 2 3 输出: 小名的身高为: 50 小名的最新身高为: 60
数据类型
可以使用type() 语句来查看数据类型
1 2 3 4 print (type (185 ))print (type (75.12 ))print (type (True ))print (type ("liuqf" ))
1 2 3 4 5 输出: <class 'int'> <class 'float'> <class 'bool'> <class 'str'>
或者也可以将变量填入
1 2 3 4 5 6 7 8 9 height = 188 name = "liuqf" sex = True weight = 75.19 print (type (height))print (type (weigh.t))print (type (sex))print (type (name))
1 2 3 4 5 输出: <class 'int'> <class 'float'> <class 'bool'> <class 'str'>
当然了也可以把type() 存入变量输出,这里不演示了
数据类型转换
目标类型(变量)
直接按照这个格式就可以进行类型转换了
1 2 3 4 5 6 7 8 a = "123" b = 123 c ="11.32" a = int (a) b = str (b) c = float (c) print (type (a),"\n" ,type (b),"\n" ,type (c))print (a,"\n" ,b,"\n" ,c)
1 2 3 4 5 6 7 输出: <class 'int'> <class 'str'> <class 'float'> 123 123 11.32
运算符
设 a = 10,b = 20
运算符
描述
实例
+
将数据相加
a + b = 30
-
将数据相减
a - b = -10
*
将数据相乘
a * b = 200
/
将数据相除,由于python有高精度所以会自动保留小数
b / a = 2
%
取模 - 返回除法的余数
b % a = 0
**
返回x的y次幂
a ** b = 10的20次幂
//
取整除 - 返回商的整数部分(向下取整 )
10 // 3 = 3
条件语句
条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块
Python程序语言指定任何非0和非空(null)值为true,0 或者 null为false
Python 编程中 if 语句用于控制程序的执行,基本形式为:
1 2 3 4 if 判断条件: 执行语句…… else: 执行语句……
条件为真时执行if语句下的代码,否则执行else下的代码
1 2 3 4 5 6 age = 输入年龄 if age >= 18 : print ("年龄大于等于18,需买票" ) else : print ("年龄小于18,免费" )
当然了,这种只能判断一种条件显然是不够用,所以我们需要完整版的条件语句
1 2 3 4 5 6 7 8 if 判断条件1: 执行语句1…… elif 判断条件2: 执行语句2…… elif 判断条件3: 执行语句3…… else: 执行语句4……
1 2 3 4 5 6 7 age = int (input ("Enter your age: " )) if age < 18 : print ("You are young" ) elif age == 18 : print ("You are strong" ) else : print ("You are older" )
注意:判断条件时由上到下判断,只要满足条件直接执行,剩余的条件不会进行判断
判断条件可以用>(大于)、<(小于)、==(等于)、>=(大于等于)、<=(小于等于)来表示其关系
如果判断需要多个条件需同时判断时,可以使用 or (或),表示两个条件有一个成立时判断条件成功;
使用 and (与)时,表示只有两个条件同时成立的情况下,判断条件才成功
1 2 3 4 5 6 7 age = int (input ("Enter your age: " )) if age >= 18 and age < 32 : print ("You are young" ) elif age >= 32 and age < 65 : print ("You are strong" ) else : print ("You are older" )
循环语句
循环语句主要用于,我需要满足一个条件,当这个条件不满足时,我需要一直重复一段代码直到满足条件
while循环
与条件语句基本一直,只不过在不满足条件时会一直循环执行代码
1 2 3 4 5 6 7 age = int (input ("请输入小名的年龄:" )) while age < 18 : print ("小名" ,age,"岁 不能进游乐园,明年再来吧!" ) age = age + 1 print ("小名" ,age,"岁 可以进游乐园啦!!!" )
1 2 3 4 5 6 输入:15 输出: 小名 15 岁 不能进游乐园,明年再来吧! 小名 16 岁 不能进游乐园,明年再来吧! 小名 17 岁 不能进游乐园,明年再来吧! 小名 18 岁 可以进游乐园啦!!!
循环语句还可以嵌套条件语句使用
1 2 3 4 5 6 7 8 9 10 score = int (input ("请输入小名的成绩:" )) while score < 18 or score > 30 : if (score < 18 ): print ("成绩为" ,score,"再提升一点吧!" ) score = score + 2 elif (score > 30 ): print ("成绩为" ,score,"再降低一点吧!" ) score = score - 2 print ("小名的成绩为" ,score,"是优秀的!" )
1 2 3 4 5 输入:15 输出: 成绩为 15 再提升一点吧! 成绩为 17 再提升一点吧! 小名的成绩为 19 是优秀的!
1 2 3 4 5 6 7 输入:37 输出: 成绩为 37 再降低一点吧! 成绩为 35 再降低一点吧! 成绩为 33 再降低一点吧! 成绩为 31 再降低一点吧! 小名的成绩为 29 是优秀的!
当然了循环是可以无限的,只要让条件一直为真,用户可以手动用 CTRL+C 来中止循环,这个就不演示了,可以自己实验一下
for循环
循环语句逻辑相同,只是语法不同,用于不同的使用场景逻辑,for循环的逻辑更有针对性,他更适用于对数据进行遍历处理
1 2 for 临时变量 in 数据集 执行代码....
for循环会逐个将数据集中的数据赋值给临时变量
1 2 3 4 5 6 7 nums = "123456789" nums2 = "" for num in nums: if int (num) % 2 != 0 : nums2 += num print (nums2)
注意:for循环无法自定义条件,也无法无限循环
上面所称的数据集实际上是序列,例如字符串、元组、列表等等
range语句
range可以构建一个简单序列
1 2 3 4 5 6 range (num)range (num1,num2)range (num1,num2,step)
1 2 3 4 5 6 7 8 9 10 11 for i in range (10 ): print (i," " , end=" " ) print ("\n" )for i in range (5 ,10 ): print (i," " , end=" " ) print ("\n" )for i in range (5 ,10 ,2 ): print (i," " , end=" " ) print ("\n" )
1 2 3 4 5 6 输出: 0 1 2 3 4 5 6 7 8 9 5 6 7 8 9 5 7 9
嵌套循环
while嵌套
我们可以通过两层循环来写一个九九乘法表,外层控制行数,第二层控制列数
1 2 3 4 5 6 7 8 9 a = 1 b = 1 while a<=9 : b=1 while b<=a: print (f"{a} x{b} ={a*b} " ,end="" ) b+=1 a+=1 print ("\n" )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 输出: 1x1=1 2x1=2 2x2=4 3x1=3 3x2=6 3x3=9 4x1=4 4x2=8 4x3=12 4x4=16 5x1=5 5x2=10 5x3=15 5x4=20 5x5=25 6x1=6 6x2=12 6x3=18 6x4=24 6x5=30 6x6=36 7x1=7 7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49 8x1=8 8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64 9x1=9 9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81
for嵌套
依旧是外层控制行数,分成上下三角打印,内层分别控制空格和星号
1 2 3 4 5 6 7 8 9 10 11 12 13 for i in range (4 ): for j in range (3 -i): print (" " ,end="" ) for k in range (2 *i+1 ): print ("*" ,end="" ) print ("\n" ) for i in range (3 ): for j in range (i+1 ): print (" " ,end="" ) for k in range (2 *(2 -i)+1 ): print ("*" ,end="" ) print ("\n" )
1 2 3 4 5 6 7 8 9 10 11 12 13 * *** ***** ******* ***** *** *
循环控制语句
break
若在循环中执行该语句,那么不论如何都会直接跳出整个循环
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 sum = input ("请输入小名当前跳绳个数:" )height = input ("请输入小名当前体力值:" ) sum = int (sum )height = int (height) while sum < 100 : if height <= 0 : print ("体力值不足,跳不出来了" ) break sum = sum + 1 height = height - 2 print ("跳了一次,当前跳绳个数为:" ,sum ) print ("跳了一次,当前体力值为:" ,height) if sum >= 100 : print ("跳够100个,晋级成功" ) else : print ("跳不够100个,晋级失败" )
1 2 3 4 5 6 7 8 9 10 请输入小名当前跳绳个数:95 请输入小名当前体力值:6 跳了一次,当前跳绳个数为: 96 跳了一次,当前体力值为: 4 跳了一次,当前跳绳个数为: 97 跳了一次,当前体力值为: 2 跳了一次,当前跳绳个数为: 98 跳了一次,当前体力值为: 0 体力值不足,跳不出来了 跳不够100个,晋级失败
continue
若在循环中执行该语句,则直接跳过该语句下面所有代码,执行下一次循环
1 2 3 4 5 6 for i in range (1 ,10 ): if i%2 == 1 : continue print (i)
[!IMPORTANT]
恭喜你已经学完了python的基础语法,掌握以上这些语法,可以让你完成大部分普通的程序需求,接下来我们基于语法基础进行详细展开,以及更多的编程技巧
进阶编程
函数
编写一种功能模块,可以在程序中重复调用,方便代码逻辑管理
1 2 3 4 5 def 函数名称 (参数 ) : 功能代码.... return 返回值 函数名称(传入参数)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 def my_len (str ): count = 0 for i in str : count += 1 print (f"字符串{str } 的长度为{count} " ) return count str1 = 'hello' str2 = 'world' str3 = str1 + str2 my_len(str1) my_len(str2) my_len(str3)
1 2 3 4 输出: 字符串hello的长度为5 字符串world的长度为5 字符串helloworld的长度为10
**注意:函数返回值可以为None(空) **
函数说明文档
1 2 3 4 5 6 7 8 9 10 11 12 def my_len (str ): ''' 模拟len()函数,返回字符串的长度 :param str: 字符串 :return: 字符串的长度 ''' count = 0 for i in str : count += 1 print (f"字符串{str } 的长度为{count} " ) return count
param 函数形参
return 函数返回值
函数嵌套
1 2 3 4 5 6 7 8 9 10 11 def compe (a,b ): return a>=b def sub (a,b ): if compe(a,b): return a-b else : return b-a a = int (input ("请输入第一个数:" )) b = int (input ("请输入第二个数:" )) print (f"{a} 和{b} 差的绝对值为:{sub(a,b)} " )
函数多返回值
1 2 3 4 5 6 def test () : return 1 ,2 x,y = test() print (x)print (y)xxxxxxxxxx def test () : return 1 ,2x,y = test()print (x)print (y)def
函数多种传参方式
位置参数
1 2 3 4 def user_info (name,age,sex ) : print (f"姓名:{name} ,年龄:{age} ,性别:{sex} " ) user_info("张三" ,18 ,"男" )
关键字参数
1 2 3 4 5 6 def user_info (name,age,sex ) : print (f"姓名:{name} ,年龄:{age} ,性别:{sex} " ) user_info(name = "张三" ,age = 18 ,sex ="男" ) user_info(age = 18 ,name = "张三" ,sex ="男" )
1 2 3 输出: 姓名:张三,年龄:18,性别:男 姓名:张三,年龄:18,性别:男
缺省参数
可以设定默认值
1 2 3 4 5 6 7 def user_info (name,age,sex = "男" ) : print (f"姓名:{name} ,年龄:{age} ,性别:{sex} " ) user_info("张三" ,18 ) user_info("李四" ,19 ,"女" )
1 2 3 输出: 姓名:张三,年龄:18,性别:男 姓名:李四,年龄:19,性别:女
不定长参数
可以不限制传入数量,默认存为元组
1 2 3 4 5 6 def user_info (*user ) : print (user) user_info("张三" ,18 ) user_info("李四" ,19 ,"女" )
1 2 3 输出: ('张三', 18) ('李四', 19, '女')
1 2 3 4 5 6 def user_info (**user ) : print (user) user_info(name="张三" ,age=18 ) user_info(name="李四" ,age=19 ,sex="女" )
1 2 3 输出: {'name': '张三', 'age': 18} {'name': '李四', 'age': 19, 'sex': '女'}
匿名函数
函数作为参数
传入计算逻辑而不是数据
1 2 3 4 5 6 def add (a,b ) : return a+b def test (add ) : print (add(1 ,2 )) test(add)
1 2 3 4 5 6 7 8 9 def add (a,b ) : return a+b def test (add ) : print (add(1 ,2 )) def sub (a,b ) : return a-b test(sub)
lambda匿名函数
lambda 传入参数:函数体(一行代码)
只能临时使用一次,主要是为了丰富代码逻辑
1 2 3 4 def test (com ) : print (com(1 ,2 )) test(lambda a,b : a+b)
数据容器
列表
定义
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 list1 = [1 ,2 ,3 ,4 ,5 ] print (list1)list2 = list () i = 0 while i < 5 : p = input ("请输入一个数据:" ) list2.append(p) i+=1 print (list2)list3 = ["liuqf" ,"2006/02/05" ,188 ,"男" ] print (list3)
1 2 3 4 5 6 7 8 9 10 11 12 输出: [1, 2, 3, 4, 5] 请输入一个数据:li 请输入一个数据:2e 请输入一个数据:234 请输入一个数据:mmm 请输入一个数据:88 ['li', '2e', '234', 'mmm', '88'] ['liuqf', '2006/02/05', 188, '男']
访问元素
1 2 3 4 5 6 7 print (list1[0 ])print (list1[3 ])print (list1[0 :3 ])print (list1[2 :5 ])
1 2 3 4 5 输出: 1 4 [1, 2, 3] [3, 4, 5]
列表的相关语法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 list1 = [1 ,2 ,3 ,4 ,5 ] print (len (list1)) index = list1.index(3 ) print (index)list1.append(6 ) print (list1)list1.extend([9 ,8 ,7 ]) print (list1)list1.insert(0 ,0 ) print (list1)list1.remove(6 ) print (list1)p = list1.pop(2 ) print (list1,p)list1.pop() print (list1)list1.clear() print (list1)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 输出: 5 2 [1, 2, 3, 4, 5, 6] [1, 2, 3, 4, 5, 9, 8, 7] [0, 1, 2, 3, 4, 5, 6] [0, 1, 2, 3, 4, 5] [1, 2, 4, 5] [0, 1, 2, 3, 4] []
列表排序
1 2 3 4 5 6 7 8 list1 = [1 ,3 ,2 ,4 ,5 ] print (list1)list1.sort() print (list1)list1.sort(reverse=True ) print (list1)
1 2 3 4 输出: [1, 3, 2, 4, 5] [1, 2, 3, 4, 5] [5, 4, 3, 2, 1]
列表的拼接
1 2 3 4 5 6 7 8 9 10 11 list1 = [1 ,2 ,3 ] print (list1)list1 = list1 * 3 print (list1)list1 = [1 ,2 ,3 ] list2 = [4 ,5 ,6 ] list3 = list1 + list2 print (list3)
1 2 3 输出: [1, 2, 3, 1, 2, 3, 1, 2, 3] [1, 2, 3, 4, 5, 6]
元组
定义
1 2 3 4 5 6 7 t = (1 , 2 , 3 , 4 , 5 ) print (t)p = () p = tuple (input ("请输入元组:" )) print (p)
1 2 3 4 输出: (1, 2, 3, 4, 5) 请输入元组:123123 ('1', '2', '3', '1', '2', '3')
操作
1 2 3 4 5 6 7 8 9 10 print (t[0 ])print (t[1 :3 ])print (len (t))print (t.count(1 ))print (t.index(2 ))
注意
字符串
定义
1 2 3 name = "hsy" print (name)
方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 print (len (name))print (name[2 ])print (name[0 :3 ])print (name.index("h" )) print (name.count("y" )) print (name.replace("hsy" ,"hsy123" )) print (name) name = name.replace("hsy" ,"hsy 123" ) print (name) name_list=name.split('y' ) print (name_list)name_list2=name.split() print (name_list2)
1 2 3 4 5 6 7 8 9 10 11 输出: 3 y hsy 0 1 hsy123 hsy hsy 123 ['hs', ' 123'] ['hsy', '123']
集合
定义
1 2 3 set1 = {1 ,2 ,3 ,1 ,2 ,3 ,1 ,2 ,3 } print (set1)
操作
1 2 3 4 5 6 set2 = {2 ,3 ,4 ,5 ,6 } print (set1 & set2) print (set1 | set2) print (set1 - set2) print (set1 ^ set2)
1 2 3 4 5 输出: {2, 3} {1, 2, 3, 4, 5, 6} {1} {1, 4, 5, 6}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 set1.add(4 ) print (set1)set1.remove(4 ) print (set1)set1.pop() print (set1)set1.clear() print (set1)print (len (set1))print (1 in set1)print (1 not in set1)
1 2 3 4 5 6 7 8 输出: {1, 2, 3, 4} {1, 2, 3} {2, 3} set() 0 False True
字典
定义
1 2 3 4 5 6 7 dict1 = {"name" :"张三" ,"age" :18 ,"sex" :"男" } print (dict1)dict2={"张三" :{"age" :18 ,"sex" :"男" },"李四" :{"age" :19 ,"sex" :"女" }} print (dict2)
1 2 3 输出: {'name': '张三', 'age': 18, 'sex': '男'} {'张三': {'age': 18, 'sex': '男'}, '李四': {'age': 19, 'sex': '女'}}
操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 print (dict1["name" ]) print (dict1.get("name" )) dict1["name" ] = "李四" print (dict1)dict1["height" ] = 170 print (dict1)del dict1["age" ] print (dict1)print (len (dict1))print ("name" in dict1)print ("name" not in dict1)print (dict1.keys())print (dict1.values())print (dict1.items())
1 2 3 4 5 6 7 8 9 10 11 12 输出: 张三 张三 {'name': '李四', 'age': 18, 'sex': '男'} {'name': '李四', 'age': 18, 'sex': '男', 'height': 170} {'name': '李四', 'sex': '男', 'height': 170} 3 True False dict_keys(['name', 'sex', 'height']) dict_values(['李四', '男', 170]) dict_items([('name', '李四'), ('sex', '男'), ('height', 170)])
序列切片
1 2 3 4 5 6 7 8 9 10 11 12 13 14 list1 = [1 ,2 ,3 ,4 ,5 ,6 ] print (list1[1 :4 ]) print (list1[1 :4 :2 ]) print (list1[:2 ]) print (list1[2 :])print (list1[::3 ]) print (list1[::-1 ])
1 2 3 4 5 6 7 输出: [2, 3, 4] [2, 4] [1, 2] [3, 4, 5, 6] [1, 4] [6, 5, 4, 3, 2, 1]
通用操作
1 2 3 4 5 6 7 8 9 10 len () max () min () list ()srr() tuple ()set ()sorted (,reverse='True/False' )
文件
读取
三步走:
打开文件
读取文件
关闭文件
打开文件
1 2 3 4 f=open (name,mode,encoding)
读取文件
1 2 3 f.read(num) f.readline() f.readlines()
关闭文件
1 2 3 4 5 f.close() with open () as f: 操作文件...
示例
1 2 3 4 5 6 f=open ("C:\\Users\\35211\\Desktop\\qita\\testr.txt" ,"r" ,encoding="utf-8" ) t = f.read(4 ) print (t)t = f.read() print (t)
1 2 3 4 5 6 7 输出: 这么早就 订回去的票了 先预约 怕抢不到 我看了刚出的票 直接买不了了
1 2 3 4 f=open ("C:\\Users\\35211\\Desktop\\qita\\testr.txt" ,"r" ,encoding="utf-8" ) t = f.readlines() print (t)
1 2 输出: ['这么早就订回去的票了\n', '先预约\n', '怕抢不到\n', '我看了刚出的票\n', '直接买不了了']
写入
四步走:
打开文件
写入文件
内容刷新
关闭文件
打开文件与关闭文件操作相同
写入文件
内容刷新
示例:
1 2 3 4 5 6 7 8 f=open ("C:\\Users\\35211\\Desktop\\qita\\testr.txt" ,"w+" ,encoding="utf-8" ) f.write("hello world\n" ) f.flush() f.seek(0 ) t = f.read() print (t)f.close()
追加
1 2 3 4 5 6 7 8 f=open ("C:\\Users\\35211\\Desktop\\qita\\testr.txt" ,"a+" ,encoding="utf-8" ) f.write("hsy\n" ) f.flush() f.seek(0 ) t = f.read() print (t)f.close()
异常
异常也就是bug,这个词来源于上个世纪一台计算机突然无法正常运行了,在检查后发现是一只小飞虫进去卡住了计算机,飞虫的英文名就是”不过“,于是后面就用”bug“这个词来表示程序异常
捕获异常
基本语法
1 2 3 4 try : 可能发生错误的代码 except : 如果异常那么要运行的代码
示例
1 2 3 4 5 6 7 try : f=open ("C:\\Users\\35211\\Desktop\\qita\\tes.txt" ,"r" ,encoding="utf-8" ) t = f.read() print (t) f.close() except : print (f"打开文件失败,请检查" )
捕获指定异常
1 2 3 4 5 6 try : print (height) except NameError as e: print (f"变量未定义" )
捕获多个异常
通过元组的形式,写入多个异常名称
1 2 3 4 5 try : print (height) 1 /0 except (NameError,ZeroDivisionError) as e: print (f"变量未定义 或 除数为0" )
捕获所有异常
1 2 3 4 5 try : print (height) 1 /0 except Exception as e: print (f"出现错误" )
异常else
1 2 3 4 5 6 7 8 9 try : height = 50 print (height) except Exception as e: print (f"出现错误" ) else : print ("没有错误" )
异常finally
1 2 3 4 5 6 7 8 9 10 try : print (height) except Exception as e: print (f"出现错误" ) else : print ("没有错误" ) finally : print ("程序结束" )
模块
导入其他的python功能包
基础语法
1 2 import 模块名 import 模块名1,模块名2
1 2 3 import timetime.sleep(1 )
1 2 3 from time import sleep time.sleep(1 )
1 2 3 from time import * sleep(1 )
1 2 3 import time as t t.sleep(1 )
自定义模块
1 2 3 4 5 def adds (x, y ): return x + y def subs (x, y ): return x - y
1 2 3 4 5 import modelprint (model.adds(1 ,2 ))print (model.subs(1 ,2 ))
_ _ main _ _用法
我们还可以在模块文件内部测试函数,但是调用时会执行测试函数的程序,所以我们可以通过_ _ main _ _用法防止调用
1 2 3 4 5 6 7 8 def adds (x, y ): return x + y def subs (x, y ): return x - y if __name__ == '__main__' : print (adds(1 ,2 ))
_ _all _ _用法
限定使用 from …import *方法调用模块时,可以使用的函数
1 2 3 4 5 6 7 8 9 __all__ = ['adds' ] def adds (x, y ): return x + y def subs (x, y ): return x - y if __name__ == '__main__' : print (adds(1 ,2 ))
1 2 3 4 5 6 7 8 from model import *print (adds(1 ,2 ))try : print (subs(1 ,2 )) except : print ('subs函数不存在' )
包
包其实就是将许多模块汇总到一块进行管理
基础用法
文件夹:test
_ _ init _ _.py
model1.py
model2.py
1 2 3 def func1 (): print ('func1' )
1 2 3 def model2 (): print ('model2' )
1 2 3 4 5 6 import test.mode1import test.model2test.mode1.func1() test.model2.model2()
第三方包导入
在终端使用 pip install 包名 命令
1 2 3 4 5 6 7 C:\Users \35211>pip install numpy Collecting numpy Downloading numpy -2.3.2-cp313 -cp313 -win_amd64.whl.metadata (60 kB ) Downloading numpy -2.3.2-cp313 -cp313 -win_amd64.whl (12.8 MB ) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.8/12.8 MB 3.6 MB /s 0:00:03 Installing collected packages : numpy Successfully installed numpy -2.3.2
注意网络链接,如果连不上可以使用国内镜像链接,具体方法就不演示了
具体案例
[!IMPORTANT]
到这里python的基本内容已经基本上全部结束,后面开始具体内容演示,以及数据分析、面对对象编程、数据库等,高级编程方法
可视化
JSON
一种轻量级的数据交互格式,跨语言通用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 # 基础格式,类似于字典 { name: "admin" , "age:18} # 嵌套格式,列表嵌套字典 [ { " name": " admin", " age": 18 }, { " name": " admin2", " age": 19 }, { " name": " admin3", " age": 20 } ]
python 数据转换 json
1 2 3 4 5 6 7 8 9 10 11 12 13 import jsondata = [{"name" : "张三" ,"age" : 18 },{"name" : "李四" ,"age" : 20 },{"name" : "王五" ,"age" : 32 }] json_str = json.dumps(data,ensure_ascii=False ) print (json_str)python_obj = json.loads(json_str) print (python_obj)
1 2 3 输出: [{"name": "张三", "age": 18}, {"name": "李四", "age": 20}, {"name": "王五", "age": 32}] [{'name': '张三', 'age': 18}, {'name': '李四', 'age': 20}, {'name': '王五', 'age': 32}]
pyecharts模块
echarts是专门为数据可视化开发的模块,pyecharts是专门用于python的可视化模块
官方提供的画廊网站可以供我们搜索自己感兴趣的图表
网站链接:gallery.pyecharts.org
入门用法
创建折线图
1 2 3 4 5 6 7 8 9 from pyecharts.charts import Lineline = Line() line.add_xaxis(['张三' ,'李四' ,'王五' ]) line.add_yaxis("height" ,[180 ,172 ,188 ]) line.render()
全局配置
通过 set-global_opts 方法配置,可以配置图例,工具箱等等的显示
1 2 3 4 5 6 7 line.set_global_opts( title_opts=opts.TitleOpts(title="美国、日本、印度确诊人数" ,pos_left="center" ,pos_bottom="1%" ), xaxis_opts=opts.AxisOpts(name="日期" ), yaxis_opts=opts.AxisOpts(name="确诊人数" ), toolbox_opts=opts.ToolboxOpts(is_show=True ), )
实例:疫情数据对比
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 import jsonfrom pyecharts.charts import Linefrom pyecharts import options as optsfrom pyecharts.options import LabelOptsline = Line() us = open ("D:\\BaiduNetdiskDownload\\美国.txt" ,"r" ,encoding="utf-8" ) jp = open ("D:\\BaiduNetdiskDownload\\日本.txt" ,"r" ,encoding="utf-8" ) ind = open ("D:\\BaiduNetdiskDownload\\印度.txt" ,"r" ,encoding="utf-8" ) us_data = us.read() jp_data = jp.read() ind_data = ind.read() us_data = us_data.replace("jsonp_1629344292311_69436(" ,"" ) jp_data = jp_data.replace("jsonp_1629350871167_29498(" ,"" ) ind_data = ind_data.replace("jsonp_1629350745930_63180(" ,"" ) us_data = us_data[:-2 ] jp_data = jp_data[:-2 ] ind_data = ind_data[:-2 ] us_data = json.loads(us_data) jp_data = json.loads(jp_data) ind_data = json.loads(ind_data) x_in = us_data["data" ][0 ]["trend" ]["updateDate" ] y_in_us = us_data["data" ][0 ]["trend" ]["list" ][0 ]["data" ] y_in_jp = jp_data["data" ][0 ]["trend" ]["list" ][0 ]["data" ] y_in_ind = ind_data["data" ][0 ]["trend" ]["list" ][0 ]["data" ] x_in = x_in[69 :192 ] y_in_us = y_in_us[69 :192 ] y_in_jp = y_in_jp[70 :193 ] y_in_ind = y_in_ind[24 :147 ] line.add_xaxis(x_in) line.add_yaxis("美国" ,y_in_us,label_opts=LabelOpts(is_show=False )) line.add_yaxis("日本" ,y_in_jp,label_opts=LabelOpts(is_show=False ),is_smooth=True ) line.add_yaxis("印度" ,y_in_ind,label_opts=LabelOpts(is_show=False ),is_smooth=True ) line.set_global_opts( title_opts=opts.TitleOpts(title="美国、日本、印度确诊人数" ,pos_left="center" ), legend_opts=opts.LegendOpts(pos_left="center" ,pos_bottom="1%" ), xaxis_opts=opts.AxisOpts(name="日期" ), yaxis_opts=opts.AxisOpts(name="确诊人数" ), toolbox_opts=opts.ToolboxOpts(is_show=True ), ) line.render("疫情.html" ) us.close() jp.close() ind.close()
实例:中国疫情统计地图
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 from contextlib import closingfrom pyecharts.charts import Mapfrom pyecharts import options as optsimport jsonmaps=Map() f = open ("D:\\BaiduNetdiskDownload\\疫情.txt" ,"r" ,encoding="utf-8" ) china = f.read() china = json.loads(china) china_data = china["areaTree" ][0 ]["children" ] i = 0 dic_china = {} while i <= 33 : if (china_data[i]["name" ] == "北京" or china_data[i]["name" ] == "上海" or china_data[i]["name" ] == "重庆" or china_data[i]["name" ] == "天津" ): dic_china[china_data[i]["name" ]+"市" ] = china_data[i]["total" ]["confirm" ] elif china_data[i]["name" ] == "内蒙古" or china_data[i]["name" ] == "西藏" : dic_china[china_data[i]["name" ]+"自治区" ] = china_data[i]["total" ]["confirm" ] elif china_data[i]["name" ] == "宁夏" : dic_china[china_data[i]["name" ]+"回族自治区" ] = china_data[i]["total" ]["confirm" ] elif china_data[i]["name" ] == "新疆" : dic_china[china_data[i]["name" ]+"维吾尔自治区" ] = china_data[i]["total" ]["confirm" ] elif china_data[i]["name" ] == "广西" : dic_china[china_data[i]["name" ]+"壮族自治区" ] = china_data[i]["total" ]["confirm" ] elif china_data[i]["name" ] == "香港" or china_data[i]["name" ] == "澳门" : dic_china[china_data[i]["name" ]+"特别行政区" ] = china_data[i]["total" ]["confirm" ] else : dic_china[china_data[i]["name" ]+"省" ] = china_data[i]["total" ]["confirm" ] i += 1 list_china = list (dic_china.items()) print (list_china)maps.add("中国" ,list_china, "china" ) maps.set_global_opts( title_opts=opts.TitleOpts(title="中国疫情地图" ,pos_left="center" ), legend_opts=opts.LegendOpts(pos_left="center" ,pos_bottom="1%" ), visualmap_opts=opts.VisualMapOpts(is_show=True , is_piecewise=True , pieces=[ {"min" :1 ,"max" :9 ,"label" :"1-9人" ,"color" :"#45d654" }, {"min" :10 ,"max" :99 ,"label" :"10-99人" ,"color" :"#4360e5" }, {"min" :100 ,"max" :999 ,"label" :"100-999人" ,"color" :"#0421a7" }, {"min" :1000 ,"max" :9999 ,"label" :"1000-9999人" ,"color" :"#ff980b" }, {"min" :10000 ,"max" :99999 ,"label" :"10000-99999人" ,"color" :"#cf4b34" }, {"min" :100000 ,"max" :999999 ,"label" :"100000-999999人" ,"color" :"#ff2700" }, {"min" :1000000 ,"label" :"1000000人以上" ,"color" :"#4f0303" ,}, ] ) ) maps.render("中国地图.html" ) f.close()
实例:河南省疫情地图
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 from contextlib import closingfrom pyecharts.charts import Mapfrom pyecharts import options as optsimport jsonmaps=Map() f = open ("D:\\BaiduNetdiskDownload\\疫情.txt" ,"r" ,encoding="utf-8" ) china = f.read() china = json.loads(china) china_data = china["areaTree" ][0 ]["children" ] i = 0 dic_china = {} while i <= 33 : if (china_data[i]["name" ] == "北京" or china_data[i]["name" ] == "上海" or china_data[i]["name" ] == "重庆" or china_data[i]["name" ] == "天津" ): dic_china[china_data[i]["name" ]+"市" ] = china_data[i]["total" ]["confirm" ] elif china_data[i]["name" ] == "内蒙古" or china_data[i]["name" ] == "西藏" : dic_china[china_data[i]["name" ]+"自治区" ] = china_data[i]["total" ]["confirm" ] elif china_data[i]["name" ] == "宁夏" : dic_china[china_data[i]["name" ]+"回族自治区" ] = china_data[i]["total" ]["confirm" ] elif china_data[i]["name" ] == "新疆" : dic_china[china_data[i]["name" ]+"维吾尔自治区" ] = china_data[i]["total" ]["confirm" ] elif china_data[i]["name" ] == "广西" : dic_china[china_data[i]["name" ]+"壮族自治区" ] = china_data[i]["total" ]["confirm" ] elif china_data[i]["name" ] == "香港" or china_data[i]["name" ] == "澳门" : dic_china[china_data[i]["name" ]+"特别行政区" ] = china_data[i]["total" ]["confirm" ] else : dic_china[china_data[i]["name" ]+"省" ] = china_data[i]["total" ]["confirm" ] i += 1 list_china = list (dic_china.items()) print (list_china)maps.add("中国" ,list_china, "china" ) maps.set_global_opts( title_opts=opts.TitleOpts(title="中国疫情地图" ,pos_left="center" ), legend_opts=opts.LegendOpts(pos_left="center" ,pos_bottom="1%" ), visualmap_opts=opts.VisualMapOpts(is_show=True , is_piecewise=True , pieces=[ {"min" :1 ,"max" :9 ,"label" :"1-9人" ,"color" :"#45d654" }, {"min" :10 ,"max" :99 ,"label" :"10-99人" ,"color" :"#4360e5" }, {"min" :100 ,"max" :999 ,"label" :"100-999人" ,"color" :"#0421a7" }, {"min" :1000 ,"max" :9999 ,"label" :"1000-9999人" ,"color" :"#ff980b" }, {"min" :10000 ,"max" :99999 ,"label" :"10000-99999人" ,"color" :"#cf4b34" }, {"min" :100000 ,"max" :999999 ,"label" :"100000-999999人" ,"color" :"#ff2700" }, {"min" :1000000 ,"label" :"1000000人以上" ,"color" :"#4f0303" ,}, ] ) ) maps.render("中国地图.html" ) f.close()