- 2 天前·后端开发查看全文Day 17 🧭行动:学习了Python最后一个知识点:异常处理 🤓体会:Python 程序一旦发生异常,如果没有捕获处理,程序就会直接崩溃终止。 使用`try-except`捕获异常,可以预先写好异常处理方案:比如打印友好提示、记录日志、释放资源,保证程序不会直接退出,还能继续运行。 🧑�...加油鸭:坚持学完Python异常处理太棒了!try-except-finally逻辑清晰,还实践了异常传递,扎实又实用!231分享
- 4 天前·后端开发查看全文Day 16 🧭行动:继续学习面对对象的开发 🤓体会:面向过程与面对对象的差别不小,目前还不知道代码更复杂点的面对对象方法的优势 🧑💻代码: # import math...加油鸭:代码结构清晰,面向对象实践扎实!坚持思考差异、动手实现,优势自然浮现~331分享
- 09-21 17:46·后端开发查看全文Day 15 🧭行动:学习实例方法与魔法方法 🤓体会:Python中提供的__xxx__形式的特殊方法 魔法方法无需手动调用,Python会在合适的时机自动调用 🧑💻代码:...加油鸭:学魔法方法真棒!__str__和__eq__让对象更友好、更智能,坚持打卡超赞!331分享
- 09-20 19:20·后端开发查看全文Day 14 🧭行动:大致学习了面对对象基础 🤓体会:类:描述的是一组具有相同属性(特征)和方法(功能 / 行为)的模板。 属性:颜色、形状、大小、厚度 功能:提供能量、文化传承...加油鸭:Day 14 就搞懂类与对象的核心概念,还动手实现了初始化!这种边学边练的节奏太扎实了,为你点赞!411分享
- 09-18 15:41·后端开发查看全文Day 13 🧭行动:这次学习模块与包 🤓体会:- 模块:就是一个 python 文件 (.py),其中就包含了变量、函数、类,以及可执行的代码。 - 作用:提高代码复用性,降低开发门槛 导入模块的常用语法?(导入模块的语句,一般写在 py 文件的开头)...加油鸭:坚持梳理模块与包的核心概念,还配了实操代码,这份系统性总结太棒了!继续稳扎稳打~411分享
- 09-15 17:12·后端开发查看全文Day 12 🧭行动:这次学习了匿名函数与变量定义 🤓体会:这两种方法都能提高代码的可读性与可维护性,在特定情况都有很大作用 🧑💻代码: #变量定义-指定类型注解...加油鸭:匿名函数用得真溜!按长度排序的实践很到位,变量类型注解也写得规范,学习扎实又细致~411分享
- 09-14 13:50·后端开发查看全文插播一个题外话🥰: 作为一位做题家,记笔记几乎是刻在学习行为中的。之前一直都是用纸质版,包括刚开始学习Python前几天。后来在一个帖子看到有人说,现在这个时代还在用纸笔写学习笔记太落后了😱,加上我一直有在网上写笔记的打算,(起初是想发在CSDN上的,但是我发现了鱼皮学长的这个网站),所以今天快...加油鸭:感谢分享,@编程导航小智 帮忙总结一波~532分享
- 09-14 13:28·后端开发查看全文Day 11 🧭行动:开始学习所有编程语言中最重要的部分--核心语法--函数 🤓体会:在学习过C语言后这部分还是简单的,可能对初学者来说难以理解形参,实参以及参数的作用范围。重新理解了一下返回值的概念,之前一直不清楚return的作用 🧑💻代码: # def circle_area(r):...加油鸭:感谢分享,@编程导航小智 帮忙总结一波~431分享
- 09-14 13:23·后端开发查看全文Day 10 🧭行动:对所学习的数据容器进行实战综合运用 🤓体会:做了一个简易教务管理系统,其中使用了马上要学习的函数相关知识,不使用的话可能会导致代码过于冗长,降低可读性。 🧑💻代码: # 初始化:外层字典 key=学生姓名,value=成绩字典...加油鸭:把教务系统从理论落到代码太棒了!函数封装让逻辑清晰,字典嵌套用得恰到好处,Day 10 进步看得见~431分享
- 09-14 13:19·后端开发查看全文Day 9 🧭行动:学习高级的数据容器--字典(dict) 🤓体会:字典是可变,key‑value,key 必须不可变。开始上强度喽~ 🧑💻代码: # dict1 = {"王林":670, "李慕婉":608, "许立国":580, "韩立":688}...绿水青山1111:韩立241分享
Day 17 🧭行动:学习了Python最后一个知识点:异常处理 🤓体会:Python 程序一旦发生异常,如果没有捕获处理,程序就会直接崩溃终止。 使用`try-except`捕获异常,可以预先写好异常处理方案:比如打印友好提示、记录日志、释放资源,保证程序不会直接退出,还能继续运行。 🧑💻代码: try: print("================================") # print(my_name) # print(1 / 0) # print("ABC"[10]) print("ABC".hello) print("================================") except NameError as e: # 捕获的是 NameError 类型的异常 print("名字不存在,请检查变量或函数名字,异常信息:", e) except ZeroDivisionError as e: print("0不能做被除数,异常信息:", e) except IndexError as e: print("索引错误,异常信息:", e) except Exception as e: # 捕获所有的异常 print("程序运行出错了,请联系管理员,错误信息:", e) finally: # 无论程序是否正常运行,finally代码块中的代码都会运行 print("资源释放 ~") # 异常的传递 def fun1(): print("fun1 ... running ...") fun2() def fun2(): print("fun2 ... running ...") fun3() def fun3(): print("fun3 ... running ...") print(my_color) if __name__ == '__main__': try: fun1() except Exception as e: print("程序运行出错了,请联系管理员,错误信息:", e)
Day 16 🧭行动:继续学习面对对象的开发 🤓体会:面向过程与面对对象的差别不小,目前还不知道代码更复杂点的面对对象方法的优势 🧑💻代码: # import math #学生类 class Student: def __init__(self,name,chinese,math,english): self.name = name self.chinese = chinese self.math = math self.english = english def __str__(self): return f"姓名{self.name} | 语文:{self.chinese} | 数学:{self.math} | 英语:{self.english} | 总分:{self.chinese + self.math + self.english}" #修改成绩 def update_score(self,chinese =None,math=None,english=None): if chinese is not None: self.chinese = chinese if math is not None: self.math = math if english is not None: self.english = english #教务管理系统 class Management: system_version = "1.0" system_name = "教务系统" def __init__(self): self.student_list = []#记录学生成绩 #增加 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("请输入学生英语成绩: ")) if 0 <= chinese <=100 and 0 <= math <= 100 and 0 <= english <= 100: stu = Student(name,chinese,math,english) self.student_list.append(stu) print("提交成功!") else: print("成绩不合理,无法添加") #删除 def delete_student(self): name = input("输入学生姓名:") for s in self.student_list: if s.name == name: self.student_list.remove(s) print("删除成功!") return print("未找到该学生,删除失败") #修改 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("英语成绩:")) if 0 <= chinese <= 100 and 0 <= math <= 100 and 0 <= english <= 100: s.update_score(chinese,math,english) print("修改成功!") return else: print("成绩不合理,无法添加") return print("未找到该学生,修改失败") #查询 def query_student(self): name = input("输入学生姓名:") for s in self.student_list: if s.name == name: print(f"学生信息为{s}") return print("未找到该学生,查询失败") #展示全部学生信息 def list_student(self): for s in self.student_list: print(s) #运行系统 def run(self): print(f"欢迎使用教务管理系统 V{Management.system_version}") while True: print() print("# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #") print("# 1.添加学生 2.删除学生 3.修改学生 4.查询指定学生 5.查询所有学生 6.退出系统 #") print("# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #") print() choice = input("请选择要执行的操作,输入1-6:") match choice: case "1": # 添加学生 self.add_student() case "2": # 删除学生 self.delete_student() case "3": # 修改学生 self.update_student() case "4": # 查询指定学生 self.query_student() case "5": # 查询所有学生 self.list_student() case "6": print("Bye ~") break case _: print("无效指令") #测试 if __name__ == "__main__": management = Management() management.run()
Day 15 🧭行动:学习实例方法与魔法方法 🤓体会:Python中提供的__xxx__形式的特殊方法 魔法方法无需手动调用,Python会在合适的时机自动调用 🧑💻代码: # class Car: # # 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.brand} {self.name}正在行驶中~~~") # # def cost(self,discount,rate=0.1): # """ # 计算花费的总金额,由车的价格和税费组成 # :param discount: # :param rate: # :return: # """ # cost = self.price * discount + rate * self.price # return cost # #示例 # c1 = Car("red","BMW","X8",80000) # #调用对象中的方法 # c1.running() # total1 = c1.cost(0.5,0.1) # print("总费用为",total1) # total2 = c1.cost(0.5) # print("总费用为",total2) class Car: 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.brand} {self.name}正在行驶中~~~") def cost(self,discount,rate=0.1): cost = self.price * discount + rate * self.price return cost #魔法方法 def __str__(self): return f"{self.color} {self.brand} {self.name} {self.price}" def __eq__(self,other): return self.color == other.color and self.brand == other.brand and self.name == other.name and self.price == other.price def __lt__(self, other): return self.price < other.price #测试 c1 = Car("白色","BYD","han",15000) print(c1) c2 = Car("白色","BYD","han",15000) print(c2) print(c1 == c2) print(c1 < c2)
Day 14 🧭行动:大致学习了面对对象基础 🤓体会:类:描述的是一组具有相同属性(特征)和方法(功能 / 行为)的模板。 属性:颜色、形状、大小、厚度 功能:提供能量、文化传承 对象:对象是类的实例,是基于类创建出来的(实例对象)。 提示:对象是由类创建出来的,创建对象的过程,也称为对象的实例化。一个类可以创建无数个对象。 🧑💻代码: # #定义类 # class Car: # pass # #创建对象 # c1 = Car() # #动态调整 # c1.color = "red" # c1.brand = "BMW" # c1.name = "X5" # c1.price = 50000 # print(c1.__dict__)#将内容以字典的方式输出 class Car: #__init__是初始化的方法,会在对象创建时自动调用,可以在该方法中为对象设置对应的属性; #self是第一个参数,表示当前所创建出来的实例对象。 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 c1 = Car("red","BMW","X8","80000") print(c1.__dict__) c2 = Car("blue","BMW","X6","30000") print(c2.__dict__)
Day 13 🧭行动:这次学习模块与包 🤓体会:- 模块:就是一个 python 文件 (.py),其中就包含了变量、函数、类,以及可执行的代码。 - 作用:提高代码复用性,降低开发门槛 导入模块的常用语法?(导入模块的语句,一般写在 py 文件的开头) - import 模块名 [as 别名] - from 模块名 import 功能名 [as 别名] - from 模块名 import * `__all__` 是一个模块级别的特殊变量,用于指定 `from 模块名 import *` 时会导入哪些功能。 1. 什么是包?有什么作用? - 包就是一个文件夹,里面可以存储很多 Python 模块(py 文件),通过包可以对模块进行归类 2. `__init__.py`文件的作用? - 标识这是一个包,而不是普通的文件夹 - 控制在 `import *` 时导入的模块列表 (`__all__`变量) 3. 导入包的方式? - `import 包名.模块名` - `from 包名 import 模块名` - `from 包名 import *` - `from 包名.模块名 import 功能名` - `from 包名.模块名 import *` 🧑💻代码: #1.直接导入模块 # import random # for i in range(100): # print(random.randint(1,100)) #2.导入模块并起别名 import random as r for i in range(100): print(r.randint(1,100)) #直接导入模块中的功能 from random import randint for i in range(100): print(randint(1, 100))
Day 12 🧭行动:这次学习了匿名函数与变量定义 🤓体会:这两种方法都能提高代码的可读性与可维护性,在特定情况都有很大作用 🧑💻代码: #变量定义-指定类型注解 # abc: int = 915 # score1: float= 95.5 # hobby2: str = "python" # result: bool = True # cba: None = None # # english: list[str] = ["A","B","C"] # phones: set[str] = {"13818286739","13390875673","19161398706"} # options: dict[str,int] = {"count":34,"total":12} # goods: tuple[str,int,int] = ("水果",2,6) #匿名函数 add = lambda x,y: x+y print(add(100,200)) # 需求3:完成如下列表的排序操作,按照每一个元素的字符个数,从小到大排序; data_list = ["C++", "C", "Python", "Jack", "PHP", "Java", "Go", "JavaScript", "Rust"] print(data_list) data_list.sort(key = lambda item: len(item)) print(data_list)
插播一个题外话🥰: 作为一位做题家,记笔记几乎是刻在学习行为中的。之前一直都是用纸质版,包括刚开始学习Python前几天。后来在一个帖子看到有人说,现在这个时代还在用纸笔写学习笔记太落后了😱,加上我一直有在网上写笔记的打算,(起初是想发在CSDN上的,但是我发现了鱼皮学长的这个网站),所以今天快速整理了这些天的学习笔记(还是比较粗糙的),如果碰巧对你有用,那就两全其美了(感谢鱼皮学长以及其他默默付出的前辈)。😘 下面是对第11天学习笔记的补充(来自鱼皮学长): 1.问题:如果我吧*args放最前面,后面给参数赋值的时候得加具体变量名,感觉麻烦 所以打算放后面,但是我想要前面的形参为默认值,不知道怎么处理 # coupon、score不填,自动用默认值;express用关键字指定;后面是商品元组传给*args res = calc_rder_cost(express=50, ("商品1", 3000, 2)) print(res) 2.回答:Python 的硬规矩:【调用函数时,不带名字的位置参数必须写在带名字的关键字参数前面】。你写的calc_order_cost(express=50, ("商品1", 3000, 2)),前面是 express=50 这个带名字的,后面又跟了个不带名字的元组,Python 直接给你报 positional argument follows keyword argument,看报错信息也能对上。 还有第二条规矩也得知道:位置参数是【从前往后挨个填坑】的,不能跳。所以就算你换成 calc_order_cost(50, "商品1", 3000, 2) 也不行——50 会填到 coupon 头上,“商品1” 填到 score 头上,全乱套。 所以如果 *args 保持放最后,你想要的效果只有一种写法:把前面的坑手动填上。 python res = calc_order_cost(0, 0, 50, "商品1", 3000, 2) # coupon=0, score=0, express=50, args=("商品1", 3000, 2) 前面俩 0 就是你亲手填的默认值,纯粹是为了给 express 腾位置。是不是感觉有点蠢?对,所以大家都不会这么写。 实际开发里更常见的做法反而是把 *args 放最前面,就是你嫌麻烦的那种: python def calc_order_cost(*args, coupon: int = 0, score: int = 0, express: float | int = 0.0): ... res = calc_order_cost(("商品1", 3000, 2), ("商品2", 100, 1), express=50) 是要多打几个字母,但你换个角度看:调用的时候一眼就能看出 50 是快递费,过俩月回来看代码也不用猜。带默认值的参数用关键字传,本来就是 Python 推荐的姿势,这个麻烦是值得的。 一句话总结:位置参数排队填坑,不能插队;关键字参数对号入座,想跳过前面的参数,就只能走关键字传参这一条路。
Day 11 🧭行动:开始学习所有编程语言中最重要的部分--核心语法--函数 🤓体会:在学习过C语言后这部分还是简单的,可能对初学者来说难以理解形参,实参以及参数的作用范围。重新理解了一下返回值的概念,之前一直不清楚return的作用 🧑💻代码: # def circle_area(r): # area = 3.14 * r ** 2 # return area # area = circle_area(10) # print(area) # def calc_score(score_list): # max_s = max(score_list) # min_s = min(score_list) # avg_s = round(sum(score_list)/len(score_list),1) # return max_s, min_s, avg_s # # s_list = [111,134,454,665,523,463,356,245] # max_score, min_score, avg_score = calc_score(s_list) # print(f"最小值:{min_score},最大值:{max_score},平均值:{avg_score}") # def add (a,b): # return a+b # # def subtract (a,b): # return a-b # # def calc (a,b,oper): # return oper(a,b) # result = calc(5,4,add) # print(result) def calc_order_cost(*args,coupon = 0,score = 0,express = 0.0): # 计算商品总价格 total_price = [goods[1] * goods[2] for goods in args] total_cost = sum(total_price) #计算优惠券 if total_cost >=5000 and coupon <= total_cost: total_cost -= coupon #计算积分抵扣 if total_cost >= 5000 and score // 100 <= total_cost: total_cost -= score // 100 #计算运费 total_cost += express #返回值 return total_cost total = calc_order_cost(("A", 1000, 2), ("B", 2000, 2),express=20) print(total)
Day 10 🧭行动:对所学习的数据容器进行实战综合运用 🤓体会:做了一个简易教务管理系统,其中使用了马上要学习的函数相关知识,不使用的话可能会导致代码过于冗长,降低可读性。 🧑💻代码: # 初始化:外层字典 key=学生姓名,value=成绩字典 students = {} def subject_stat(subject_name, score_name_list): """统计科目:最高分、最低分、平均分、对应学生姓名""" scores = [item[0] for item in score_name_list] max_score = max(scores) min_score = min(scores) avg_score = sum(scores)/len(scores) max_names = [item[1] for item in score_name_list if item[0]==max_score] min_names = [item[1] for item in score_name_list if item[0]==min_score] print(f"{subject_name}:") print(f"\t最高分:{max_score},学生:{','.join(max_names)}") print(f"\t最低分:{min_score},学生:{','.join(min_names)}") print(f"\t平均分:{avg_score:.2f}") def stat_class(): """6.统计班级成绩""" if not students: print("暂无学生数据,无法统计!") return # 只这里用到 .items(),其余逻辑全部复用 chinese_list = [(val["chinese"], key) for key, val in students.items()] math_list = [(val["math"], key) for key, val in students.items()] english_list = [(val["english"], key) for key, val in students.items()] print("====班级成绩统计====") subject_stat("语文", chinese_list) subject_stat("数学", math_list) subject_stat("英语", english_list) # 主菜单 while True: print(""" ========教务管理系统======== 1.添加学生信息 2.修改学生信息 3.删除学生信息 4.查询学生信息 5.列出所有学生 6.统计班级成绩 7.退出系统 ============================""") op = input("请输入功能选项:") if op == "1": name = input("输入学生姓名:") if name in students: print("该学生已存在!") else: c = int(input("语文成绩:")) m = int(input("数学成绩:")) e = int(input("英语成绩:")) students[name] = {"chinese":c,"math":m,"english":e} print("添加成功") elif op == "2": name = input("输入要修改的学生姓名:") if name in students: students[name]["chinese"] = int(input("输入新语文成绩:")) students[name]["math"] = int(input("输入新数学成绩:")) students[name]["english"] = int(input("输入新英语成绩:")) print("修改完成") else: print("没有该学生") elif op == "3": name = input("输入要删除的学生姓名:") if name in students: del students[name] print("删除成功") else: print("没有该学生") elif op == "4": name = input("输入查询学生姓名:") if name in students: s = students[name] print(f"姓名:{name} 语文:{s['chinese']} 数学:{s['math']} 英语:{s['english']}") else: print("查无此人") elif op == "5": if not students: print("暂无学生") for name,score in students.items(): print(f"姓名:{name} 语文:{score['chinese']} 数学:{score['math']} 英语:{score['english']}") elif op == "6": stat_class() elif op == "7": print("系统退出") break else: print("输入选项无效,请重新输入!")
Day 9 🧭行动:学习高级的数据容器--字典(dict) 🤓体会:字典是可变,key‑value,key 必须不可变。开始上强度喽~ 🧑💻代码: # dict1 = {"王林":670, "李慕婉":608, "许立国":580, "韩立":688} # #增加 # dict1["王喆"] = 630 # print(dict1) # #修改 # dict1["王喆"] = 620 # print(dict1) # #删除 # wz = dict1.pop("王喆") # print(wz) # print(dict1) # #解包的方法遍历 # for k, v in dict1.items(): # print(f"{k}: {v}") # print() # #通过遍历获取“键”,从而获得键值对 # for key in dict1.keys(): # print(f"{key}: {dict1[key]}") # print() # #直接通过遍历获取键值对 # for item in dict1.items(): # print(f"{item[0]}: {item[1]}") # # 删除2.0 # del dict1["王林"] # print(dict1) shop_cart = {} menu = """ ##########购物车系统########## # 1. 添加购物车 # # 2. 修改购物车 # # 3. 删除购物车 # # 4. 查询购物车 # # 5. 退出购物车 # ############################ """ print("欢迎使用购物车系统~") while True: print(menu) choice = input("请输入需要的操作(1-5):") match choice: case "1": name = input("商品名称:") price = float(input("商品价格:")) num = int(input("商品数量:")) if name in shop_cart: print("商品已存在,重新输入!") else: shop_cart[name] = {"price":price,"num":num} print("商品成功加入购物车~") case "2": name = input("需要修改的商品名称:") if name not in shop_cart: print("商品不存在,重新输入!") continue price = float(input("最新的商品价格:")) num = int(input("目前商品的数量:")) shop_cart[name] = {"price": price, "num": num} print("商品信息修改成功~") case "3": name = input("需要移除购物车的商品:") if name not in shop_cart: print("商品不存在,重新输入!") else: del shop_cart[name] print("删除完毕~") case "4": for name in shop_cart.keys(): a = shop_cart[name] print(f"商品名称: {name},商品价格: {a["price"]},商品数量: {a["num"]}") case "5": print("购物愉快~") break case _: print("数据非法!!!")


