python核心语法

📅2026/7/14 7:12:05 👁️次浏览
python核心语法
基础语法#1.需求往控制台中输出hello world 快捷键ctrl/ #shiftalt. 调大字体 #shiftalt, 调小字体 #ctrld复制 #altshift鼠标拖动 可以选中多行同时编辑 #ctrly 删除一行 print(hello world) #2.字面量的写法 print(True)#bool类型首字母大写 print(False) print(None)#空值NULL #3.变量用来存储数据的容器 num 13.14 print(num) num ok#python中一个变量可以接收不同类型的数据。项目开发中一个变量只存储一种类型 print(num) a,b aaa,True#一条语句可以定义多个变量 print(a,b) #4.type查看数据类型 print(type(a)) print(type(None)) #5.isinstance判定数据是否为这个数据类型返回bool值 print(isinstance(num,int)) #6.定义字符串的三种方式 s1 单引号 s2 双引号 s3 三 引 号 print(单引号%s双引号%s三引号%s % (s1, s2, s3))#方式一 %d % (变量) print(f单引号{s1}双引号{s2}三引号{s3})#方式二 f {} #7.输入与输出 input print #所有键盘输入的数据都是字符串类型 name input(请输入您的姓名) print(name) #8.运算符 #8.1算术运算符 - * /除法 //整除 %取余 **幂指数 print(3//2) print(2 ** 3) #8.2赋值运算符 - * / // % ** #8.3比较运算符 ! #8.4逻辑运算符 and or not print(1 2 and 3! 4) #流程控制语句*********** #1.if python中是通过缩进来描述代码的归属的 if.elif.else if name 张三: print(姓名为张三) elif name 李四: print(姓名为李四) else: print(姓名不为张三也不为李四) #2.match模式匹配 seasons input(请输入季节) match seasons: case 春天: print(赏花) case 夏天: print(绿树) case 秋天: print(收获) case 冬天: print(堆雪人) case _: print(输入错误) #3.循环while else可选 i 0 while i 10: print(fi{i}, end )#print默认/n结束可设置结束标志end“” i i 1 else: print(循环正常结束) #4.for msg input(请输入需要遍历的字符串) for i in msg: print(f元素:{i}) else: print(循环正常结束) #range生成指定规则的数字序列 range(5)#生成0-4的数据序列 range(2,8)#生成2-7的数据序列 range(2,8,2)#生成2-7的数据序列步长为2 输出2,4,6 #random生成一个随机数 import random random_numbers1 random.sample(range(1,100),10)#生成1到100之间的10个随机数 random_numbers2 random.randint(1,100)#生成1到100之间的1个整数 #数据存储容器*********** #使用数据容器存储大量数据 #列表list 字符串str 元组tuple 集合set 字典dict #1.列表list 列表名 [元素1, 元素2, 元素3] 元素类型可以不同但项目中一个列表中的元素保持相同 相当于数组 s [1,2,3,A,hello,True] #从前到后正向索引下标从0开始从后往前反向索引下标从-1开始 #s[0] 1 s[3] A s[-1] True s[3] ABC#修改 del s[4]#删除指定位置的元素 for item in s: print(item)#遍历 #not in item 2 if item not in s: print(item) #切片对操作的数据截取其中的一部分截取后类型不变 列表字符串元组都支持切片操作 #序列数据[开始索引:结束索引步长] 索引采取正向、反向都可以步长默认为1 和range逻辑一样 print(s[0:5:1])#截取前五个元素 print(s[:5])#简化 #列表的常见方法 ss [2, 4, 12, 3] ss.append(10086) #在列表尾部追加元素 ss.insert(2,100) #在指定索引之前插入该元素 ss.remove(3) #移除列表中第一个匹配到的值 ss.pop(2) #删除列表中指定索引位置的元素如果未指定索引默认删最后一个 ss.sort() #对列表进行排序列表元素的数据类型一致才可以排序 ss.reverse() #反转列表元素 len(ss) #获取列表的长度 print(ss) print(num in s) #in 判断num是否在s列表中返回bool值 #解包将列表这一类容器解开成一个一个独立的元素 *s num_list1 [19,23,54] num_list2 [55,80,23] num_list3 [*num_list1, *num_list2]#列表合并 num_list4 num_list1 num_list2#列表合并 #列表推导式——生成1-20的平方列表 num_list5 [1**2 for i in range(1,21)] #[要插入的值 for i in 序列/列表 if 条件] #2.字符串str 不可变的、有序性、可迭代性 str1 hello_python #正向索引反向索引切片(步长为正数从前往后输出步长为负数从后往前截取。注意步长和索引的方向一致) print(str1[::-1]) #反转字符串 str1.find(python) #在字符串中查找子串返回第一次出现的索引位置找不到返回-1 str1.count(o) #统计字串在字符串中出现的次数 str1.upper() #转换为大写 str1.lower() #小写 str1.split( ) #将字符串按指定分隔符分割成列表 str1.strip() #去除字符串两端的空白字符或指定字符 str1.strip(*) str1.replace(o,*) #将old替换为new字符串 str1.startswith(o) #检查字符串开头是否为指定字串返回bool str1.endswith(o) #结尾 #判断字串是否在字符串中 print(hello in str1) #3.元组tuple #元组是不可变的序列类似于列表但创建后不能修改 #定义元组 t1 (5, 7, 9, 1) t11 5, 7, 9, 1#可以不加括号 print(t1) print(type(t1)) print(t1[0])#5 print(t1[-1])#1 #切片 print(t1[1:2:1])#(7,9) #方法 t1.count(7)#统计元素数量 1 t1.index(7)#获取元素的索引 1 #定义空元组 t2 () t3 tuple() #定义一个元素的元组需要在后面加逗号 t4 (32,) #元组组包和解包 #解包 a, b, c, d t1#一个元素对应一个变量 x, *y, z t1#*收集剩余的所有元素 x为5y为[7,9]类型为列表z为1 #组包 t5 a, b, c, d #4.集合set #无序的不可重复的可修改的 s11 {1, 2, 3, 4, 5, 6, 7} s12 {}#字典 s13 set()#定义空集合 s11.add(100)#添加元素到集合添加位置随机 s11.pop()#删除s11[0]位置的元素 s11.remove(2)#随机删除集合中的元素并返回 s11.clear()#清除集合 print(s11) s14 {A, B, C, D, E} s15 {C, D, E, F} #输出顺序随机 print(s14.difference(s15)) #两个集合的差集存在于s14但不存在于s15 AB print(s14.union(s15))#两个集合的并集 ABCDEF print(s14.intersection(s15))#交集 CDE #差集 s1-s2 并集 s1|s2 交集 s1s2 解包 *s1 print([*s14 , *s15].count(C))#C元素在s14和s15两个集合中出现的次数 输出2 #5.字典 #键值对 key:value key不能重复、可修改、需要为不可变类型不能为listsetdict dict1 {小红:90, 小明:99, 小强:92} #访问 print(dict1[小明]) #对数据的增删改查 #添加/修改 dict1[张三] 110 #删除 score dict1.pop(小强)#pop可以返回删除的键值对的值 del dict1[小红] #查询 print(dict1[小明]) print(dict1.get(小明)) print(dict1.keys())#获取所有的key print(dict1.values())#获取所有的value print(dict1.items())#获取所有的键值对 print(dict1) #遍历 for k in dict1.keys(): print(f{k} : {dict1[k]}, end ) print() for item in dict1.items(): print(f{item[0]} : {item[1]}, end ) #函数*********** #函数基础 #函数定义 def function_name(parameter_list): print(hello,parameter_list) return 0 #函数调用 function_name(123) #函数参数可以多个。返回值也可以多个多个返回值会封装到元组中 def circle_area_len(r): # 函数的说明文档 该函数用于根据圆的半径计算圆的面积和元的周长 :param r:半径 :return :圆的面积和周长 area r * r len 2 * 3.14 * r return area, len print(type(circle_area_len)) #输出函数的说明文档在函数调用处停留也可以查看说明文档help(函数名) help(circle_area_len) area, len circle_area_len(3)#解包进阶语法#-----表示的是输出结果 #函数进阶*********** #变量作用域全局变量局部变量 #使用函数参数和返回值来传递参数而不是依赖全局变量。global主要以用在函数状态、配置和计数器场景 out_line lambda : print(- * 50) # * 50 让字符串重复输出50次 num 1 def fun(): global num #在变量名前面加上 global 说明使用的是全局变量可以在函数内部使用全局变量(先声明再使用) num 100#全局变量num print(num)#-----100 fun() print(num)#-----100 out_line() #函数参数 #在定义函数时设置参数名参数值为默认参数与函数调用的参数不一致时以调用函数为准。有默认参数的要放在没有的后面 def reg_stu(name, age, gender, city北京): print(fname:{name} : age:{age} , gender{gender} , city{city}) return{name:name, age:age, gender:gender, city:city} #位置传参 stu reg_stu(罗小黑, 10, 男, 天津) print(stu) #关键字传参——参数多容易混淆时使用 stu_2 reg_stu(gender女, age10, name罗小白, city天津) print(stu_2) print(type(stu_2)) #位置和关键字混合使用时位置参数在前关键词参数在后 out_line() #不定长参数 #位置传递 *形参名称 封装为元组 #关键字传递 **形参名称 封装为字典 #round保留小数的位数 def cal_data(*args, **kwargs): 根据传入的数据计算最大最小平均值 :param args: 不定长位置参数 :param kwargs: 不定长关键字参数 :return: 最大最小平均值 min_data min(args) max_data max(args) avg_data sum(args) / len(args) if kwargs.get(round) is not None: avg_data round(avg_data, kwargs.get(round)) if kwargs.get(print): print(fmin:{min_data}, max:{max_data}, avg:{avg_data}) return min_data, max_data, avg_data cal_data(1, 2, 4, round 3, print True) print(cal_data(1, 2, 4)) out_line() #参数类型 #之前学的类型都可以作为参数传递 #函数可以作为参数传递——传递的是函数的运算逻辑 def add(a, b): return a b def calculate(a, b, operator): return operator(a, b) result calculate(1, 2, add) print(result) out_line() #匿名函数 #用于简化简单函数的编写。通常作为高阶函数的参数使用 lambda 参数列表 : 函数体 out_line lambda : print(---) add lambda x, y : x y print(add(2, 3)) out_line() # .sort 默认按字母大小排序 data_list [go, c, java, php, python] data_list.sort() print(data_list) #sort的参数key【对列表项应用一次该函数】确定排序依据 data_list.sort(key lambda item : len(item), reverse True)#按照字符串长度倒叙排序 print(data_list) data_list.sort(key len) print(data_list) out_line() #函数案例——阶乘递归 def jc(n): if n 1: return 1 else: return n * jc(n-1) print(jc(5)) out_line() #类型注解*********** #用于明确标识变量、函数参数、返回值的数据类型 a: int 123 score: float 3.14 hobby: str python flag: bool False pic: None None name: list[str | int] [A, B, C, 12] phone: set[str] {120, 110, 119} option: dict[str, int] {count:2, total:5} goods: tuple[str, int, int] (手机, 7000, 1) #函数类型注解 def circle_area_len(r: float) - tuple[float, float]: return round(3.14 * r * r, 1), round(2 * 3.14 * r, 1) print(circle_area_len(8.5)) #类型推断 #是指python自动推断出变量、表达式、函数返回值的数据类型能力 out_line() #模块*********** #文件名就是模块名文件里的函数/功能就是功能名。导入模块后模块/python文件就会执行 #导入模块 导入形式 调用方式 import 模块名 模块名.功能名 import 模块名 as 别名 别名.功能名 from 模块名 import 功能名 功能名 from 模块名 import 功能名 as 别名 别名 from 模块名 import * 功能名 #导入random模块生成1-100之间10个int类型的随机数 import random as rd for i in range(10): print(rd.randint(1, 100), end ) print() #导入模块中的功能 from math import sin as sn print(round(sn(1), 1)) #自定义导入模块 import module print(module.factorial_recursive(5)) module.print_hello() out_line() #软件包 #本质就是一个文件夹该文件夹可以包含若干python模块文件夹下还包含了一个 __init__.py #模块文件较多时用来管理多个模块包的本质也是一个模块 导入形式 调用方式 import 包名.模块名 包名.模块名.功能名 from 包名 import 模块名 模块名.功能名 from 包名 import * 模块名.功能名 from 包名.模块名 import 功能名 功能名 from 包名.模块名 import * 功能名 import utils.my_fun utils.my_fun.print_equals() #如果想通过from utils import *导入包下的所有模块需要__init__.py 文件中添加 __all__[模块名] from utils import * my_var.print_plus() #导入模块中的功能 #相对路径从当前文件所在目录开始查找 #绝对路径从项目的根目录下开始查找module## __all__ 是一个模块级别的特殊变量用于指定 from 模块名 import * 时会导入哪些功能*通配了哪些功能 __all__ [factorial_recursive, PI, print_hello] PI 3.14 NAME 罗小黑 def print_hello(): print(hello world) def factorial_recursive(n): 计算 n 的阶乘递归法 if not isinstance(n, int) or n 0: raise ValueError(n 必须是非负整数) if n 1: return 1 return n * factorial_recursive(n - 1) #__name__ 是python中的内置变量表示的当前模块的名字直接运行当前模块__name__的值是 __main__ ; 当该模块被导入时__name__的值就是模块名 #执行当前文件则会执行如下代码如果被当作模块导入如下代码不执行 if __name__ __main__: print(不想被调用的时候执行的代码)面向对象基础#面向对象基础*********** #类是一组具有相同属性和方法的模板。对象是类的实例是基于类创建出来的实例对象 out_line lambda : print(- * 50) #一、类与对象 #类名的命名规范——大驼峰命名法 class Car: pass MyObject Car() MyObject.color red MyObject.brand tesla MyObject.price 300000 print(MyObject) print(MyObject.__dict__) out_line() #推荐这种写法 #self 方法的第一个参数表示当前创建的实例对象 #__init__ 初始化方法对象创建后自动调用主要用于设置对象的初始状态 class 类名: def __init__(self, 参数列表): self.属性名 参数值 self.属性名 参数值 对象名 类名(参数列表) class Car2: #类属性 wheel 4 #轮胎数量 tax_rate 0.1 #购置税 def __init__(self, c_color, c_brand, c_name, c_price): #实例属性 self.color c_color self.brand c_brand self.name c_name self.price c_price print(Car类型的对象初始化完毕对象属性已经添加完毕) # 二、实例方法 # 在类中定义实例方法时定义语法和函数定义的方式是一致的 def running(self): print(f{self.name} 正在行驶中……) # 魔法方法 def total_cost(self, discount, rate 0.1): total_cost self.price * discount rate * self.price return total_cost def __str__(self): return f{self.brand} {self.name} {self.price} def __eq__(self, other): return self.price other.price and self.brand other.brand and self.name other.name def __lt__(self, other): return self.price other.price c1 Car2(red, BYD, 宋, 50000) c2 Car2(red, BYD, 宋, 500000) print(c1 c2) print(c1 c2) out_line() MyObject2 Car2(write, BMW, X5, 500000) MyObject2.running() print(MyObject2.total_cost(0.3, 0.2)) print(MyObject2.__dict__) MyObject2.color black print(MyObject2.__dict__) out_line() #三、魔法方法 #魔法方法是指python中提供的以双下划线开头和结尾的特殊方法 #魔法方法不需要手动调用python会在合适的时机自动调用 __init__ 初始化方法 __str__ 字符串表示的方法 __eq__ 比较两个对象是否相等 __lt__ , __le__ , __gt__ , __ge__ 比较两个大小 less than less than or equal greater than #四、实例属性和类属性 #实例属性属于每个具体对象的属性每个对象都是独立的各个对象特有的数据 实例对象.属性 #类属性属于类本身的属性所有实例共享的所有对象共享的数据或配置 类名.属性 print(Car2.wheel) print(c1.wheel) print(c1.brand) out_line() #五、案例 #教务系统 #教务系统类管理学生的成绩信息。方法添加修改删除查询输出学生的成绩信息 #学生类属性姓名语文数学英语成绩 class Student: def __init__(self, name, chinese_grade, math_grade, english_grade): self.name name #属性名参数名 self.chinese_grade chinese_grade self.math_grade math_grade self.english_grade english_grade def __str__(self): return f姓名:{self.name} | 语文成绩:{self.chinese_grade} | 数学成绩:{self.math_grade} | 英语成绩:{self.english_grade} | 总分:{self.chinese_grade self.math_grade self.english_grade} #添加/修改学生成绩 def update_score(self, chinese_grade None, math_grade None, english_grade None): if chinese_grade is not None: self.chinese_grade chinese_grade if math_grade is not None: self.math_grade math_grade if english_grade is not None: self.english_grade english_grade #教务管理系统 class EduManagement: system_version 1.0 system_name 教务管理系统 def __init__(self): self.student_list [] #[]列表 #1添加学生成绩 def add_student(self): name input(请输入学生姓名:) #判断学生的姓名是否存在如果存在则添加失败 for s in self.student_list: if s.name name: print(该学生已经存在添加失败!) return chinese int(input(请输入学生语文成绩:)) math int(input(请输入学生数学成绩)) english int(input(请输入学生英语成绩:)) #判断分数是否在0-100之间 if 0 chinese 100 and 0 math 100 and 0 english 100: stu Student(name, chinese, math, english)#构建学生对象 self.student_list.append(stu) #append在末尾添加数据 print(学生信息添加成功) else: print(各科成绩必须在0-100之间) #2修改学生成绩 def update_student(self): name input(请输入要修改的学生姓名:) #根据学生姓名找到该学生信息 for s in self.student_list: if s.name name: print(f当前成绩:{s}) chinese int(input(请输入修改后的学生语文成绩:)) math int(input(请输入修改后的学生数学成绩)) english int(input(请输入修改后的学生英语成绩:)) #判断分数是否在0-100之间 if 0 chinese 100 and 0 math 100 and 0 english 100: s.update_score(chinese, math, english) print(f修改后的成绩:{s}) return else: print(各科成绩必须在0-100之间) return print(未找到该学生修改失败) #3删除学生信息 def delete_student(self): name input(请输入要修改的学生姓名:) # 根据学生姓名找到该学生信息 for s in self.student_list: if s.name name: self.student_list.remove(s) print(学生信息删除成功) return print(未找到该学生删除失败) #4查询指定学生的成绩 def find_student(self): name input(请输入要查询的学生姓名:) # 根据学生姓名找到该学生信息 for s in self.student_list: if s.name name: print(f学生信息:{s}) return print(未找到该学生) #5展示全部学生成绩 def list_student(self): for s in self.student_list: print(s) #运行系统 def run(self): print(f欢迎使用教育管理系统 V{EduManagement.system_version}) while True: print() print(------------------------------------------------------------------------) print(1.添加学生 2.修改学生 3.删除学生 4.查询指定学生 5.查询所有学生 6.退出系统) choice input(请输入要执行的操作) match choice: case 1: self.add_student() case 2: self.update_student() case 3: self.delete_student() case 4: self.find_student() case 5: self.list_student() case 6: print(bye~) break case _: print(输入错误请输入1-6) #测试系统 #创建实例对象调用run方法 if __name__ __main__: edu_management EduManagement() edu_management.run() #异常*********** #也称为bug #程序运行过程中出现异常好的处理方式捕获异常按照我们自己的处理方式处理完异常程序继续执行 try: 可能出现异常的业务代码1 可能出现异常的业务代码2 except[异常类型 as 变量名] 出现异常时的预案 finally: 不管是否出现异常都会执行的代码 文件操作f open(./abc.txt,w,encodingutf-8)f.write(举头望明月\n)#content f.read()#print(content)f.close()r 读 w 覆盖写