- 昨天 17:12·后端开发查看全文Day 12 🧭行动:这次学习了匿名函数与变量定义 🤓体会:这两种方法都能提高代码的可读性与可维护性,在特定情况都有很大作用 🧑💻代码: #变量定义-指定类型注解...加油鸭:匿名函数用得真溜!按长度排序的实践很到位,变量类型注解也写得规范,学习扎实又细致~211分享
- 2 天前·后端开发查看全文插播一个题外话🥰: 作为一位做题家,记笔记几乎是刻在学习行为中的。之前一直都是用纸质版,包括刚开始学习Python前几天。后来在一个帖子看到有人说,现在这个时代还在用纸笔写学习笔记太落后了😱,加上我一直有在网上写笔记的打算,(起初是想发在CSDN上的,但是我发现了鱼皮学长的这个网站),所以今天快...加油鸭:感谢分享,@编程导航小智 帮忙总结一波~531分享
- 2 天前·后端开发查看全文Day 11 🧭行动:开始学习所有编程语言中最重要的部分--核心语法--函数 🤓体会:在学习过C语言后这部分还是简单的,可能对初学者来说难以理解形参,实参以及参数的作用范围。重新理解了一下返回值的概念,之前一直不清楚return的作用 🧑💻代码: # def circle_area(r):...加油鸭:感谢分享,@编程导航小智 帮忙总结一波~431分享
- 2 天前·后端开发查看全文Day 10 🧭行动:对所学习的数据容器进行实战综合运用 🤓体会:做了一个简易教务管理系统,其中使用了马上要学习的函数相关知识,不使用的话可能会导致代码过于冗长,降低可读性。 🧑💻代码: # 初始化:外层字典 key=学生姓名,value=成绩字典...加油鸭:把教务系统从理论落到代码太棒了!函数封装让逻辑清晰,字典嵌套用得恰到好处,Day 10 进步看得见~431分享
- 2 天前·后端开发查看全文Day 8 🧭行动:学习了新的数据容器集合(set) 🤓体会:这里的集合就和数学中的集合很像了。集合是可变无序,元素唯一,不可哈希元素不能存储 🧑💻代码: #集合的定义...加油鸭:集合学得真扎实!用多个实际场景练差集、交集、并集,还玩转了集合表达式,这种学以致用的劲儿太棒了!231分享
- 2 天前·后端开发查看全文Day 7 🧭行动:学习数据容器:元组(tuple) 🤓体会:元组是不可变有序,允许重复的 🧑💻代码: # it = (1,2,3,4,5,6,7,8,9)...加油鸭:元组学得真扎实!用解包处理学生成绩既清晰又高效,这种结构化思维超赞~231分享
- 2 天前·后端开发查看全文Day 6 🧭行动:重新认识字符串 🤓体会:字符串在C语言中不是数据容器,但是在Python中却可以。字符串内容可重复,有序但是不可修改 🧑💻代码: # s = " Hello-World-Hello-Python"...加油鸭:坚持字符串专项练习太棒了!每行代码都是扎实的进步,为你持续输出点赞!231分享
- 2 天前·后端开发查看全文Day 5 🧭行动:学习列表(list)容器 🤓体会:列表是有序的,可重复的,可修改的 🧑💻代码: #合并两个列表并去重...加油鸭:感谢分享,@编程导航小智 帮忙总结一波~231分享
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("数据非法!!!")
Day 8 🧭行动:学习了新的数据容器集合(set) 🤓体会:这里的集合就和数学中的集合很像了。集合是可变无序,元素唯一,不可哈希元素不能存储 🧑💻代码: #集合的定义 # si = {1,2,3,44,35,34,65,44} # print(si) #输出结果的顺序随机 # print(type(si)) # so = set() # print(so, type(so)) # s1 = {11,21,23,43,45,56,76,78,98} # #添加指定元素 # s1.add(10) # print(s1) # #删除指定元素 # s1.remove(11) # print(s1) # #删除随机元素并返回 # e = s1.pop() # print(e) # print(s1) # #删除集合 # s1.clear() # print(s1) # # s2 = {"A","D","A","W","H","F","I"} # s3 = {"F","J","T","S","W"} # #输出差集,前者有后者没有的集合 # print(s2.difference(s3)) # print(s3.difference(s2)) # #输出两个集合的并集 # print(s2.union(s3)) # print(s3.union(s2)) # #输出两个集合的交集 # print(s2.intersection(s3)) # print(s3.intersection(s2)) #选修足球的学生名单 football_set = {"王林", "曾牛", "徐立国", "遁天", "天运子", "韩立", "厉飞雨","乌丑","紫灵"} #选修篮球的学生名单 basketball_set = {"张铁", "墨居仁","王林", "姜老道", "曾牛", "王蝉", "韩立", "天运子", "李化元", "厉飞雨", "云露"} # 选修法语学生名单 french_set = {"许木", "王卓", "十三", "虎咆", "姜老道", "天运子", "红蝶", "厉飞雨", "韩立", "曾牛"} # 选修艺术学生名单 art_set = { "遁天", "天运子", "韩立", "虎咆", "姜老道", "紫灵"} #方法一 # fa_set = french_set.intersection(art_set) # print("同时选修法语和艺术的学生:",fa_set) #方式二,&替代 fa_set = french_set & art_set print("同时选修法语和艺术的学生:",fa_set) all_set = football_set & basketball_set & french_set & art_set print("同时选修四门课程的学生:",all_set) #方法一 # fb_set = football_set.difference(basketball_set) # print("选修足球且没有选修篮球的学生:",fb_set) #方法二:“-” 用来求差集 # fb_set = football_set - basketball_set # print("选修足球且没有选修篮球的学生:",fb_set) #方法三:集合表达式 fb_set = {s for s in football_set if s not in basketball_set} print("选修足球且没有选修篮球的学生:",fb_set) #并集:“|” all_set2 = football_set | basketball_set | french_set | art_set all_list =[*football_set,*basketball_set,*french_set,*art_set,*fa_set] for i in all_list: print(f"{i} 选修了 {all_list.count(i)} 门课")
Day 7 🧭行动:学习数据容器:元组(tuple) 🤓体会:元组是不可变有序,允许重复的 🧑💻代码: # it = (1,2,3,4,5,6,7,8,9) # print(type(it)) # print(it[0]) # print(it[-1]) # print(it[:6]) # print(it.count(5)) # print(it.index(8)) # its = (10,) # print(type(its),its) # a = 1 # b = 2 # b,a = a,b # print(a,b) # a = 100 # b = 200 # c = 300 # c,a,b = a,b,c # print(a,b,c) students = ( ("S001","王林",85,92,78), ("S002","李慕婉",92,88,95), ("S003","十三",78,85,82), ("S004","曾牛",88,79,91), ("S005","周轶",95,96,89), ("S006","王卓",76,82,77), ("S007","红蝶",89,91,94), ("S008","徐立国",75,69,82), ("S009","许木",86,89,98), ("S010","遁天",66,59,72) ) print("学号\t\t姓名\t\t语文\t\t数学\t\t英语\t\t总分\t\t平均分") #方式一:遍历 # for s in students: # total = s[2] + s[3] + s[4] # avg = float(total / 3) # print(f"{s[0]} \t{s[1]} \t {s[2]} \t {s[3]} \t {s[4]} \t{total} \t {avg:.1f}") #方式二:元组解包 for id,name,chinese,math,english in students: total = chinese + math + english avg = float(total / 3) print(f"{id} \t{name} \t {chinese} \t {math} \t {english} \t{total} \t {avg:.1f}") print() chinese1 = [s[2] for s in students] math1 = [s[3] for s in students] english1 = [s[4] for s in students] print(f"语文最低分:{min(chinese1)} \t语文最高分:{max(chinese1)}\t语文平均分:{sum(chinese1)/len(chinese1)}") print(f"数学最低分:{min(math1)}\t数学最高分:{max(math1)}\t数学平均分:{sum(math1)/len(math1)}") print(f"英语最低分:{min(english1)}\t英语最高分:{max(english1)}\t英语平均分:{sum(english1)/len(english1)}") print() print("优秀学生名单") # 方式一 # for s in students: # total = s[2] + s[3] + s[4] # avg = float(total / 3) # if avg > 90: # print(f"学号:{s[0]}\t 姓名:{s[1]}\t 平均分:{avg:.1f}") #方式二:元组解包 for id,name,chinese,math,english in students: total = chinese + math + english avg = float(total / 3) if avg > 90: print(f"学号:{id}\t 姓名:{name}\t 平均分:{avg:.1f}")
Day 6 🧭行动:重新认识字符串 🤓体会:字符串在C语言中不是数据容器,但是在Python中却可以。字符串内容可重复,有序但是不可修改 🧑💻代码: # s = " Hello-World-Hello-Python" # #查找目标字符第一次出现的索引位置 # a = s.find("-") # print(a) # #统计目标字符出现次数 # b = s.count("o") # print(b) # #转为大写 # c = s.upper() # print(c) # #转为小写 # d = s.lower() # print(d) # #将字符串以指定字符串分割为列表 # e = s.split("-") # print(e) # #去除字符串两端的空格 # f = s.strip() # print(f) # #替换字符串中的字符 # g = s.replace("-", "_") # print(g) # #验证字符串开头/结尾是否为指定字符串,输出值为布尔值(bool) # print(s.startswith(" Hello")) # print(s.endswith("World ")) # mail = input("请输入邮箱:") # if mail.count("@") == 1 and "." in mail: # #if mail.count("@") == 1 and mail.count(".") >= 1: # print(f"{mail}邮箱合规") # else: # print("该邮箱不可用") # list1 = input("请输入文本:") # list2 = list1[::-1] # if list1 == list2: # print("是回文") # else: # print("不是") list = [] for i in range(10): a = input(f"请输入第{i+1}个字符串") a_revered = a[::-1] a_upper = a_revered.upper() list.append(a_upper) print("遍历的结果是:") for j in list: print(j)
Day 5 🧭行动:学习列表(list)容器 🤓体会:列表是有序的,可重复的,可修改的 🧑💻代码: #合并两个列表并去重 # num_list1 = [19, 23, 54, 64, 875, 20, 109, 232, 123, 54] # num_list2 = [55, 80, 72, 35, 60, 123, 54, 29, 91] # for num in num_list1: # num_list2.append(num) # print("合并后的列表:",num_list2) # new_list = [] # for num in num_list2: # if num not in new_list: # new_list.append(num) # print("去重后的列表:",new_list) #上一个代码的简易版 # num_list1 = [19, 23, 54, 64, 875, 20, 109, 232, 123, 54] # num_list2 = [55, 80, 72, 35, 60, 123, 54, 29, 91] # num_list = [*num_list1,*num_list2] # print("合并后的列表:",num_list) # new_list = [] # for num in num_list2: # if num not in new_list: # new_list.append(num) # print("去重后的列表:",new_list) #减少遍历次数 # num_list1 = [19, 23, 54, 64, 875, 20, 109, 232, 123, 54] # num_list2 = [55, 80, 72, 35, 60, 123, 54, 29, 91] # # num_list = num_list1 + num_list2 # print("合并后的列表:",num_list) # new_list = [] # for num in num_list2: # if num not in new_list: # new_list.append(num) # print("去重后的列表:",new_list) #1到20的二次方 # num_list = [i**2 for i in range(1,21)] # print(num_list) #求指定列表中的偶数的二次方 # num_list2 = [55, 80, 72, 35, 60, 123, 54, 29, 91] # new_list = [i**2 for i in num_list2 if i%2==0] # print(new_list) #合并三个列表并去重 # list1 = ['M', 'A', 'C', 'E', 'F', 'G', 'H', 'L', 'N', 'I', 'J', 'K', 'O'] # list2 = ['X', 'Z', 'T', 'Y', 'D', 'E', 'F', 'G'] # list3 = ['W', 'A', 'S', 'D'] # old_list = [*list1, *list2, *list3] # print(old_list) # new_list =[] # for i in old_list: # if i not in new_list: # new_list.append(i) # new_list.sort() # print(new_list) #求列表中3或5倍数的平方 # list1 = [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] # list2 = [i**2 for i in list1 if i%3 == 0 or i%5 == 0] # print(list2) #取出列表中的正数 # list1 = [11, 2, 31, 4, -5, 15, 17, 28, 49, 10, -11, 16, 54, -14, 36, -16, 87, -19] # list = [i for i in list1 if i > 0] # print(list)
Day 4 🧭行动:学习嵌套循环 🤓体会:🧐 🧑💻代码: # 猜随机数 # import random # random_num = random.randint(1,100) # while True: # num =int(input("请在1-100中猜一个数字")) # if num < random_num: # print("数字小了,再试一次") # elif num > random_num: # print("数字大了,再试一次") # else: # print(f"恭喜你猜对了,数字是{num}") # break #1-1000中5的倍数的和 # tatol = 0 # for i in range(5,1001,5): # tatol += i # print(tatol) # 查找字符数量 # a = "akiwksjakdiklowiqaamnvbamvaxnsjdsjkiaxkjd" # num = 0 # for char in a: # if char == "k": # num += 1 # print(f"该字符串中一共有{num}个k") # s = [1,2,3,5,7,2,4,6] # s.append(8) # print(s) # s.insert(0,0) # print(s) # s.remove(8) # print(s) # a = s.pop(2) # print(a) # print(s) # s.sort() # print(s) # s.reverse() # print(s) num_list =[] for i in range(10): num = int(input("请输入一个数字")) num_list.append(num) print(num_list) num_list.sort() print("最小值为",num_list[0]) print("最大值为",num_list[-1]) print("平均值为",sum(num_list)/len(num_list)) print(num_list)


