python核心语法
📅 2026/7/14 7:17:48
👁️ 阅读次数
📝 编程学习
基础语法
#1.需求:往控制台中输出hello world 快捷键ctrl+/ #shift+alt+. 调大字体 #shift+alt+, 调小字体 #ctrl+d复制 #alt+shift+鼠标拖动 可以选中多行同时编辑 #ctrl+y 删除一行 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(f"i={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为5,y为[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 交集 s1&s2 解包 *s1 print([*s14 , *s15].count("C"))#C元素在s14和s15两个集合中出现的次数 输出2 #5.字典 #键值对 key:value key不能重复、可修改、需要为不可变类型(不能为list,set,dict) 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(f"name:{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="女", age=10, 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(f"min:{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",encoding="utf-8")
f.write("举头望明月\n")
#content = f.read()
#print(content)
f.close()
'''r 读 w 覆盖写'''
编程学习
技术分享
实战经验