导图社区 Python(学习过程、实战案例)
关于Python(学习过程、实战案例)的思维导图,本专业和有兴趣的朋友们不要错过,可以下载做复习。
编辑于2023-06-04 13:52:21 上海Python
chapter1
chapter2
chapter3
chapter4
chapter5
chapter6
45.为什么需要列表(demo1)
46.列表对象的创建(demo2)
47.列表的特点(demo3)
48.列表的查询操作(demo4)
48.获取列表中指定元素的索引
49.获取列表中的单个元素
lst = ['hello', 'world', 98, 'hello', 'world', 234] print(lst[2]) # 98 print(lst[-3]) # hello # 获取索引为10的元素 print(lst[10]) # IndexError: list index out of range
50.获取列表中的多个元素_切片操作
# 获取列表中的多个元素 步长正数 lst = [10, 20, 30, 40, 50, 60, 70, 80] # start=1,stop=6,step=1 print(lst[1:6:1]) # [20, 30, 40, 50, 60] 新的列表对象 print('原列表:', id(lst)) # 原列表: 1533295156096 lst2 = lst[1:6:1] print('切的片段:', id(lst2)) # 切的片段: 1533295155712 print(lst[1:6]) # [20, 30, 40, 50, 60] 默认步长为1 # start=1,stop=6,step=2 print(lst[1:6:2]) # [20, 40, 60]
# step为负数的情况 print(lst[::-1]) # [80, 70, 60, 50, 40, 30, 20, 10] # start=7,stop省略,step=-1 print(lst[7::-1]) # [80, 70, 60, 50, 40, 30, 20, 10] # start=7,stop省略,step=-2 print(lst[7::-2]) # [80, 60, 40, 20] print(lst[3::-2]) # [40, 20]
51.列表元素的判断及遍历
'''列表元素的判断及遍历''' print('p' in 'python') # True print('k' in 'python') # False lst = [10, 20, 'python', 'hello'] print(10 in lst) # True print(100 in lst) # False
for item in lst: print(item) ''' 10 20 python hello '''
52.列表元素的增加操作(demo5)
append()
在列表的末尾添加一个元素
# 向列表的末尾添加一个元素 lst = [10, 20, 30] print('添加元素之前:', id(lst)) # 1689750756096 lst.append(100) print(lst) # [10, 20, 30, 100] print('添加元素之后:', id(lst)) # 1689750756096
extend()
在列表的末尾至少添加一个元素
# 向列表的末尾至少添加一个元素 lst2 = ['hello', 'world'] # lst.append(lst2) # 将lst2作为一个元素添加到列表的末尾 # print(lst) # [10, 20, 30, 100, ['hello', 'world']] lst.extend(lst2) # 向列表的末尾一次性添加多个元素 print(lst) # [10, 20, 30, 100, 'hello', 'world']
子主题 3
insert()
# insert()向列表的任意位置插入元素 lst.insert(1, 90) # 在索引为1的位置上添加90 print(lst) # [10, 90, 20, 30, 100, 'hello', 'world']
切片
# 切片 lst3 = [True, False, 'hello'] # 在任意的位置上添加N多个元素 lst[1:] = lst3 # 把后面切掉了,替换 print(lst) # [10, True, False, 'hello']
53.列表元素的删除操作(demo6)
remove
# remove lst = [10, 20, 30, 40, 50, 60, 30] lst.remove(30) # 从列表中移除一个元素,如果有重复的元素只移除第一个 print(lst) # [10, 20, 40, 50, 60, 30] lst.remove(100) # ValueError: list.remove(x): x not in list
pop
# pop 根据索引移除元素, lst.pop(1) print(lst) # [10, 40, 50, 60, 30] # lst.pop(5)# IndexError: pop index out of range lst.pop() # 如果不指定参数,删除列表中的最后一个元素 print(lst) # [10, 40, 50, 60]
切片
会产生一个新的列表对象
new_list = lst[1:3] print('原列表:', lst) # 原列表: [10, 40, 50, 60] print('切片后的列表:', new_list) # 切片后的列表: [40, 50] # 不产生新的列表对象,而是去删除原列表中的内容 lst[1:3]=[] print(lst) # [10, 60]
clear()
# clear 清除列表中的所有元素 lst.clear() print(lst) # []
del
# del 将列表对象删除 del lst print(lst) # NameError: name 'lst' is not defined
54.列表元素的修改操作(demo7)
# 修改操作 lst = [10, 20, 30, 40] # 一次修改一个值 lst[2] = 100 print(lst) # [10, 20, 100, 40]
# 切片赋予一个新的值 lst[1:3] = [300, 400, 500, 600] print(lst) # [10, 300, 400, 500, 600, 40]
55.列表元素的排序操作(demo8)
lst = [20, 40, 10, 98, 54] print('排序前的列表', lst, id(lst)) # 排序前的列表 [20, 40, 10, 98, 54] 2709474728448 # 开始排序,调用列表对象的sort方法,升序排序 lst.sort() print('排序后的列表', lst, id(lst)) # 排序后的列表 [10, 20, 40, 54, 98] 2709474728448 # 通过指定关键字参数,使其降序排序 lst.sort(reverse=True) print(lst) # [98, 54, 40, 20, 10]
# 调用内置函数sorted 会产生新的列表对象 lst = [20, 40, 10, 98, 54] print('原列表',lst) # 开始排序 new_list = sorted(lst) print(lst) # [20, 40, 10, 98, 54] print(new_list) # [10, 20, 40, 54, 98] # 降序排序 desc_list = sorted(lst,reverse=True) print(desc_list)
56.列表生成式(demo9)
# 列表中的值为2,4,6,8,10 lst2 = [i * 2 for i in range(1, 6)] print(lst2) # [2, 4, 6, 8, 10]
总结
chapter7
57.什么是字典
往字典存储数据经过哈希函数工具,hash(key),计算的就是一个存储位置
放入字典中的键是不可变序列。(字符串不可变序列),不可变序列不可以执行增删改操作
不可变序列:整数序列,字符串序列,放入字典中的键是不可变序列。 可变序列:列表,字典
58.字典的实现原理
59.字典的创建((demo1))
# 字典的创建 # 使用花括号 scores = {'张三': 100, '李四': 98, '王五': 45} print(scores) print(type(dict)) # 使用内置函数dict student = dict(name='jack', age='20') print(student) print(type(student)) # 空字典 d = {} print(d)
60.字典元素的获取(demo2)
# 字典元素的获取 # 使用[] scores = {'张三': 100, '李四': 98, '王五': 45} # print(scores['张三']) # print(scores['陈六'])# 如果查找的键不存在,KeyError: '陈六' # 使用get()方法 print(scores.get('张三')) print(scores.get('陈六')) # 如果查找的键不存在,None # 如果查找的键的值不存在,返回默认值 print(scores.get('麻七', 99)) # 99
61.字典元素的增删改操作(demo3)
# 键的判断 scores = {'张三': 100, '李四': 98, '王五': 45} print('张三' not in scores) # False # 字典元素的删除 del scores['张三'] print(scores) # {'李四': 98, '王五': 45} # scores.clear() # 清空字典元素 # print(scores) # {} # 增加 scores['陈六'] = 98 print(scores) # {'李四': 98, '王五': 45, '陈六': 98} # 修改 scores['陈六'] = 100 print(scores) # {'李四': 98, '王五': 45, '陈六': 100}
62.获取字典视图(demo4)
# 获取键 scores = {'张三': 100, '李四': 98, '王五': 45} keys = scores.keys() print(keys) # dict_keys(['张三', '李四', '王五']) print(type(keys)) # <class 'dict_keys'> print(list(keys)) # ['张三', '李四', '王五'] 将所有键组成的视图转换成列表 # 获取值 values = scores.values() print(values) # dict_values([100, 98, 45]) print(type(values)) # <class 'dict_values'> print(list(values)) # [100, 98, 45] # 获取所有的键值对 items = scores.items() print(items) # dict_items([('张三', 100), ('李四', 98), ('王五', 45)]) 元组 print(type(items)) # <class 'dict_items'> print(list(items)) # [('张三', 100), ('李四', 98), ('王五', 45)] 列表元素是元组组成的
63.字典元素的遍历(demo5)
获取的是键
# 字典元素的遍历 scores = {'张三': 100, '李四': 98, '王五': 45} for item in scores: print(item, end='\t') # 张三 李四 王五 print(item, scores[item], scores.get(item)) # 李四 李四 98 98 # 王五 王五 45 45
scores = {'张三': 100, '李四': 98, '王五': 45} for item in scores.items(): # print(item, end='\t') # ('张三', 100)('李四', 98)('王五', 45)
64.字典的特点(demo6)
scores = {'name': '张三', 'name': '李四'} # key不允许重复 print(scores) # {'name': '李四'} d = {'name': '张三', 'nikename': '张三'} # value允许重复 print(d) # {'name': '张三', 'nikename': '张三'}
# 字典是无序的,无法指定进行插入 lst = [10, 20, 30] # 字典中的键是不可变对象,list不能做键,因为list是可变的,不能用于计算哈希值, d = {lst: 100} print(d) # TypeError: unhashable type: 'list'
65.字典生成式(demo7)
# 内置函数zip items = ['Fruit', 'Books', 'Others'] prices = [96, 78, 85] d = {item.upper(): price for item, price in zip(items, prices)} print(d) # {'Fruit': 96, 'Books': 78, 'Others': 85} # {'FRUIT': 96, 'BOOKS': 78, 'OTHERS': 85} items = ['Fruit', 'Books', 'Others'] prices = [96, 78, 85, 100, 200] # 5个,以短的那个 d = {item.upper(): price for item, price in zip(items, prices)} print(d) # {'FRUIT': 96, 'BOOKS': 78, 'OTHERS': 85}
总结
chapter8
66.什么是元组(demo1)
67.元组的创建方式(demo2)
# 元组的创建方式 '''元组的创建方式''' '''第一种,使用()''' t = ('python', 'world', 98) print(t) # ('python', 'world', 98) print(type(t)) # <class 'tuple'> t2 = 'python', 'world', 98 # ()可省略 print(t2) print(type(t2)) '''第二种,使用内置函数tuple()''' t1 = tuple(('python', 'world', 98)) print(t1) print(type(t1)) t3 = ('python',) # 只包含一个元组的元素需要使用逗号和小括号 print(t3) print(type(t3))
'''空元组的创建方式''' '''空列表的创建方式''' lst = [] lst1 = list() d = {} d2 = dict() t4 = () t5 = tuple() print('空列表', lst, lst1) print('空字典', d, d2) print('空元组', t4, t5)
68.为什么将元组设计成不可变序列(demo3)
69.元组的遍历(demo4)
70.集合的概述与创建(demo5)
71.集合的相关操作(demo6)
72.集合之间的关系(demo7)
73.集合的数据操作(demo8)
74.集合生成式(demo9)
总结
chapter9
75.字符串的创建与驻留机制
元组,字符串,不可变序列
a = 'python' b = "python" c = '''python''' print(a, id(a)) # python 2026188081200 print(b, id(b)) # python 2026188081200 print(c, id(c)) # python 2026188081200
字母数字下划线(标识符)
编译时而非运行时
强制驻留sys
pycharm进行了优化,原本不驻留也驻留了
join比+效率高
76.字符串的常用操作_字符串的查询操作(demo1)
77.字符串的常用操作_字符串的大小写与转换操作(demo2)
78.字符串的常用操作_字符串内容对齐的操作方法(demo3)
79.字符串的常用操作_字符串的劈分(demo4)
80.字符串的常用操作_字符串判断的相关方法(demo5)
81.字符串的常用操作_替换与合并(demo6)
82.字符串的比较操作(demo7)
83.字符串的切片操作(demo8)
84.格式化字符串(demo9)
85.字符串的编码转换(demo10)
总结
chapter10
86.函数的定义与调用(demo1)
def calc(a, b): c = a + b return c result = calc(10, 20) print(result) # 30
87.函数调用的参数传递_位置实参_关键字实参(demo2)
def calc(a, b): # a,b形式参数,简称形参,形参的位置是在函数的定义处 c = a + b return c result = calc(10, 20) # 10,20称为实际参数的值,简称实参,实参的位置是函数的调用处 print(result) # 30 res = calc(b=10, a=20) # =左侧变量的名称是关键字参数 print(res)
88.函数参数传递的内存分析(demo3)
89.函数的返回值(demo4)
90.函数参数定义_默认值参数(demo5)
91.函数参数定义_个数可变的位置形参_个数可变的关键字形参(demo6)
92.函数的参数总结(demo7)
93.变量的作用域(demo8)
94.递归函数(demo9)
95.斐波那契数列(demo10)
总结
chapter11
96.Bug的由来
97.Bug的常见类型_粗心导致的错误(demo1)
98.Bug的常见类型_知识点不熟悉导致的错误(demo2)
99.Bug的常见类型_思路不清导致的问题(demo3)
100.Bug的常见类型_被动掉坑-try-except(demo4)
101.try-except-else结构与try-except-else-finally结构(demo5)
102.python中常见的异常类型(demo6)
103.traceback模块的使用(demo7)
104.pycharm的程序调试(demo8)
总结
chapter12
105.编程的两大思想_面向过程_面向对象
106.类与对象
107.定义python中的类(demo1)
108.创建对象(demo2)
109.类属性_类方法_静态方法的使用方式(demo3)
110.动态绑定属性和方法(demo4)
class Student: def __init__(self, name, age): # 初始化方法,所有对象都有的 self.name = name self.age = age def eat(self): print(self.name + '在吃饭') stu1 = Student("张三", 20) # Student类的实例对象 stu2 = Student("李四", 30) print(id(stu1)) print(id(stu2)) print('---------为stu1动态绑定性别属性----------------') stu1.gender='女' # 只适用于当前绑定的对象 print(stu1.name,stu1.age,stu1.gender) print(stu2.name,stu2.age) # 动态绑定方法 print('--------------------------------') stu1.eat() stu2.eat() def show(): print('定义在类之外的函数') stu1.show=show stu1.show() # 定义在类之外的函数
总结
chapter13
110.面向对象的三大特征_封装的实现方式(demo1)
111.继承及其实现方式(demo2)
112.方法重写(demo3)
113.object类(demo4)
114.多态的实现(demo5)
115.特殊属性(demo6)
116.特殊方法(dict,len,add)(demo7)
117.__new__与__init__演示创建对象的过程(demo8)
118.类的赋值与浅拷贝(demo9)
变量的赋值,类对象的赋值操作
类的浅拷贝,一般都是浅拷贝
深拷贝
总结
chapter14
120.什么叫模块化_模块化编程的好处(demo1)
def fun(): pass def fun2(): pass class Student: native_place='吉林' def eat(self,name,age): self.name=name self.age=age @classmethod def cm(cls): pass @staticmethod def sm(): pass
121.模块的导入(demo2)
122.以主程序方式运行(demo3)
123.python中的包(demo4)
124.python中常用的内置模块(demo5)
125.第三方模块的安装与使用(demo6)
总结
chapter15
126.编码格式的介绍
127.文件读写的原理_读取磁盘文件中的内容(demo1)
128.常用的文件打开模式(demo2)
129.文件对象的常用方法(demo3)
130.with语句(demo4)
131.os模块的常用操作(demo5)
总结
chapter16
133.学生信息管理系统-需求分析
134.学生信息管理系统-系统分析
135.学生信息管理系统-主函数设计(syusystem)
136.学生信息管理系统-录入学生信息功能(syusystem)
137.学生信息管理系统-删除学生信息功能(syusystem)
138.学生信息管理系统-修改学生信息功能(syusystem)
139.学生信息管理系统-查找学生信息功能(syusystem)
140.学生信息管理系统-统计学生总人数(syusystem)
141.学生信息管理系统-显示所有学生信息功能(syusystem)
142.学生信息管理系统-排序模块设计(syusystem)
143.学生信息管理系统-项目打包生成exe可执行文件(syusystem)
chapter17
实操案例1
144.任务一:向文件输出奋斗成就更好的你(demo1)
144.任务二:输出北京天气预报(demo2)
145.任务三:机票购买界面(demo3)
145.任务四:北京地铁一号线运行图(demo4)
实操案例2
146.任务一:输出杨老师出版的图书信息(demo1)
146.任务二:输出《红楼梦》中的金陵十二钗前五位(demo2)
# 第一种方式 变量的赋值 name1 = '林黛玉' name2 = '薛宝钗' name3 = '贾元春' name4 = '贾探春' name5 = '史湘云' print('➊\t' + name1) print('➋\t' + name2) print('➌\t' + name3) print('➍\t' + name4) print('➎\t' + name5) # 第二种方式 列表 lst_name = ['林黛玉', '薛宝钗', '贾元春', '贾探春', '史湘云'] lst_sig = ['➊', '➋', '➌', '➍', '➎'] for i in range(5): print(lst_sig[i], lst_name[i]) # 第三种方式 字典 d = {'➊': '林黛玉', '➋': '薛宝钗', '➌': '贾元春', '➍': '贾探春', '➎': '史湘云'} for key in d: print(key, d[key]) # 第四种方式 zip for s, name in zip(lst_sig, lst_name): print(s, name)
147.任务三:输出图书音像勋章(demo3)
print('\033[0;35m\t\t图书音像勋章\033[m') print('\033[0;35m--------------------------------------\033[m') print('\033[0;32m✿图书音像勋章\t\t✪专享活动\033[m') print('\033[0;36m✿图书音像勋章\t\t❤专属优惠\033[m') print('\033[0;34m✿图书音像勋章\t\t☎优惠提醒\033[m') print('\033[0;35m--------------------------------------\033[m')
147.任务四:输出你的身体指标(demo4)
height = 170 weight = 50.5 bmi = weight / (height + weight) print('您的身高是:' + str(height)) print('您的体重是:' + str(weight)) print('您的BMI的指数是:' + '{:0.2f}'.format(bmi))
实操案例3
实操案例4
实操案例5
实操案例6
实操案例7
实操案例8
实操案例9
实操案例10
实操案例11
实操案例12
实操案例13
实操案例 14
164.任务一:模拟高铁售票系统(demo1)
import prettytable as pt # 目前只是一次售票,不能循环,而且还未显示打印车票 # 显示座席 def show_ticket(row_num): tb = pt.PrettyTable() tb.field_names = ['行号', '座位1', '座位2', '座位3', '座位4', '座位5'] for i in range(row_num): lst = [f'第{i + 1}行', '有票', '有票', '有票', '有票', '有票'] tb.add_row(lst) print(tb) # 订票 def order_ticker(row_num, row, column): tb = pt.PrettyTable() tb.field_names = ['行号', '座位1', '座位2', '座位3', '座位4', '座位5'] for i in range(row_num): if int(row) == i + 1: lst = [f'第{i + 1}行', '有票', '有票', '有票', '有票', '有票'] lst[int(column)] = '已售' tb.add_row(lst) else: lst = [f'第{i + 1}行', '有票', '有票', '有票', '有票', '有票'] tb.add_row(lst) print(tb) if __name__ == '__main__': row_num = 13 show_ticket(row_num) choose_num = input('请输入选择的座位,如13,5表示13排5号座位') try: row, column = choose_num.split(',') except: print("输入格式有误,如13排5号座位,应该输入13,5") order_ticker(row_num, row, column)
165.任务二:推算几天后的日期(demo2)
实操案例15
166.任务一:记录用户登录日志(demo1)
167.任务二:模拟淘宝客服自动回复(demo2)
Python
chapter1
chapter2
chapter3
chapter4
chapter5
chapter6
45.为什么需要列表(demo1)
46.列表对象的创建(demo2)
47.列表的特点(demo3)
48.列表的查询操作(demo4)
48.获取列表中指定元素的索引
49.获取列表中的单个元素
lst = ['hello', 'world', 98, 'hello', 'world', 234] print(lst[2]) # 98 print(lst[-3]) # hello # 获取索引为10的元素 print(lst[10]) # IndexError: list index out of range
50.获取列表中的多个元素_切片操作
# 获取列表中的多个元素 步长正数 lst = [10, 20, 30, 40, 50, 60, 70, 80] # start=1,stop=6,step=1 print(lst[1:6:1]) # [20, 30, 40, 50, 60] 新的列表对象 print('原列表:', id(lst)) # 原列表: 1533295156096 lst2 = lst[1:6:1] print('切的片段:', id(lst2)) # 切的片段: 1533295155712 print(lst[1:6]) # [20, 30, 40, 50, 60] 默认步长为1 # start=1,stop=6,step=2 print(lst[1:6:2]) # [20, 40, 60]
# step为负数的情况 print(lst[::-1]) # [80, 70, 60, 50, 40, 30, 20, 10] # start=7,stop省略,step=-1 print(lst[7::-1]) # [80, 70, 60, 50, 40, 30, 20, 10] # start=7,stop省略,step=-2 print(lst[7::-2]) # [80, 60, 40, 20] print(lst[3::-2]) # [40, 20]
51.列表元素的判断及遍历
'''列表元素的判断及遍历''' print('p' in 'python') # True print('k' in 'python') # False lst = [10, 20, 'python', 'hello'] print(10 in lst) # True print(100 in lst) # False
for item in lst: print(item) ''' 10 20 python hello '''
52.列表元素的增加操作(demo5)
append()
在列表的末尾添加一个元素
# 向列表的末尾添加一个元素 lst = [10, 20, 30] print('添加元素之前:', id(lst)) # 1689750756096 lst.append(100) print(lst) # [10, 20, 30, 100] print('添加元素之后:', id(lst)) # 1689750756096
extend()
在列表的末尾至少添加一个元素
# 向列表的末尾至少添加一个元素 lst2 = ['hello', 'world'] # lst.append(lst2) # 将lst2作为一个元素添加到列表的末尾 # print(lst) # [10, 20, 30, 100, ['hello', 'world']] lst.extend(lst2) # 向列表的末尾一次性添加多个元素 print(lst) # [10, 20, 30, 100, 'hello', 'world']
子主题 3
insert()
# insert()向列表的任意位置插入元素 lst.insert(1, 90) # 在索引为1的位置上添加90 print(lst) # [10, 90, 20, 30, 100, 'hello', 'world']
切片
# 切片 lst3 = [True, False, 'hello'] # 在任意的位置上添加N多个元素 lst[1:] = lst3 # 把后面切掉了,替换 print(lst) # [10, True, False, 'hello']
53.列表元素的删除操作(demo6)
remove
# remove lst = [10, 20, 30, 40, 50, 60, 30] lst.remove(30) # 从列表中移除一个元素,如果有重复的元素只移除第一个 print(lst) # [10, 20, 40, 50, 60, 30] lst.remove(100) # ValueError: list.remove(x): x not in list
pop
# pop 根据索引移除元素, lst.pop(1) print(lst) # [10, 40, 50, 60, 30] # lst.pop(5)# IndexError: pop index out of range lst.pop() # 如果不指定参数,删除列表中的最后一个元素 print(lst) # [10, 40, 50, 60]
切片
会产生一个新的列表对象
new_list = lst[1:3] print('原列表:', lst) # 原列表: [10, 40, 50, 60] print('切片后的列表:', new_list) # 切片后的列表: [40, 50] # 不产生新的列表对象,而是去删除原列表中的内容 lst[1:3]=[] print(lst) # [10, 60]
clear()
# clear 清除列表中的所有元素 lst.clear() print(lst) # []
del
# del 将列表对象删除 del lst print(lst) # NameError: name 'lst' is not defined
54.列表元素的修改操作(demo7)
# 修改操作 lst = [10, 20, 30, 40] # 一次修改一个值 lst[2] = 100 print(lst) # [10, 20, 100, 40]
# 切片赋予一个新的值 lst[1:3] = [300, 400, 500, 600] print(lst) # [10, 300, 400, 500, 600, 40]
55.列表元素的排序操作(demo8)
lst = [20, 40, 10, 98, 54] print('排序前的列表', lst, id(lst)) # 排序前的列表 [20, 40, 10, 98, 54] 2709474728448 # 开始排序,调用列表对象的sort方法,升序排序 lst.sort() print('排序后的列表', lst, id(lst)) # 排序后的列表 [10, 20, 40, 54, 98] 2709474728448 # 通过指定关键字参数,使其降序排序 lst.sort(reverse=True) print(lst) # [98, 54, 40, 20, 10]
# 调用内置函数sorted 会产生新的列表对象 lst = [20, 40, 10, 98, 54] print('原列表',lst) # 开始排序 new_list = sorted(lst) print(lst) # [20, 40, 10, 98, 54] print(new_list) # [10, 20, 40, 54, 98] # 降序排序 desc_list = sorted(lst,reverse=True) print(desc_list)
56.列表生成式(demo9)
# 列表中的值为2,4,6,8,10 lst2 = [i * 2 for i in range(1, 6)] print(lst2) # [2, 4, 6, 8, 10]
总结
chapter7
57.什么是字典
往字典存储数据经过哈希函数工具,hash(key),计算的就是一个存储位置
放入字典中的键是不可变序列。(字符串不可变序列),不可变序列不可以执行增删改操作
不可变序列:整数序列,字符串序列,放入字典中的键是不可变序列。 可变序列:列表,字典
58.字典的实现原理
59.字典的创建((demo1))
# 字典的创建 # 使用花括号 scores = {'张三': 100, '李四': 98, '王五': 45} print(scores) print(type(dict)) # 使用内置函数dict student = dict(name='jack', age='20') print(student) print(type(student)) # 空字典 d = {} print(d)
60.字典元素的获取(demo2)
# 字典元素的获取 # 使用[] scores = {'张三': 100, '李四': 98, '王五': 45} # print(scores['张三']) # print(scores['陈六'])# 如果查找的键不存在,KeyError: '陈六' # 使用get()方法 print(scores.get('张三')) print(scores.get('陈六')) # 如果查找的键不存在,None # 如果查找的键的值不存在,返回默认值 print(scores.get('麻七', 99)) # 99
61.字典元素的增删改操作(demo3)
# 键的判断 scores = {'张三': 100, '李四': 98, '王五': 45} print('张三' not in scores) # False # 字典元素的删除 del scores['张三'] print(scores) # {'李四': 98, '王五': 45} # scores.clear() # 清空字典元素 # print(scores) # {} # 增加 scores['陈六'] = 98 print(scores) # {'李四': 98, '王五': 45, '陈六': 98} # 修改 scores['陈六'] = 100 print(scores) # {'李四': 98, '王五': 45, '陈六': 100}
62.获取字典视图(demo4)
# 获取键 scores = {'张三': 100, '李四': 98, '王五': 45} keys = scores.keys() print(keys) # dict_keys(['张三', '李四', '王五']) print(type(keys)) # <class 'dict_keys'> print(list(keys)) # ['张三', '李四', '王五'] 将所有键组成的视图转换成列表 # 获取值 values = scores.values() print(values) # dict_values([100, 98, 45]) print(type(values)) # <class 'dict_values'> print(list(values)) # [100, 98, 45] # 获取所有的键值对 items = scores.items() print(items) # dict_items([('张三', 100), ('李四', 98), ('王五', 45)]) 元组 print(type(items)) # <class 'dict_items'> print(list(items)) # [('张三', 100), ('李四', 98), ('王五', 45)] 列表元素是元组组成的
63.字典元素的遍历(demo5)
获取的是键
# 字典元素的遍历 scores = {'张三': 100, '李四': 98, '王五': 45} for item in scores: print(item, end='\t') # 张三 李四 王五 print(item, scores[item], scores.get(item)) # 李四 李四 98 98 # 王五 王五 45 45
scores = {'张三': 100, '李四': 98, '王五': 45} for item in scores.items(): # print(item, end='\t') # ('张三', 100)('李四', 98)('王五', 45)
64.字典的特点(demo6)
scores = {'name': '张三', 'name': '李四'} # key不允许重复 print(scores) # {'name': '李四'} d = {'name': '张三', 'nikename': '张三'} # value允许重复 print(d) # {'name': '张三', 'nikename': '张三'}
# 字典是无序的,无法指定进行插入 lst = [10, 20, 30] # 字典中的键是不可变对象,list不能做键,因为list是可变的,不能用于计算哈希值, d = {lst: 100} print(d) # TypeError: unhashable type: 'list'
65.字典生成式(demo7)
# 内置函数zip items = ['Fruit', 'Books', 'Others'] prices = [96, 78, 85] d = {item.upper(): price for item, price in zip(items, prices)} print(d) # {'Fruit': 96, 'Books': 78, 'Others': 85} # {'FRUIT': 96, 'BOOKS': 78, 'OTHERS': 85} items = ['Fruit', 'Books', 'Others'] prices = [96, 78, 85, 100, 200] # 5个,以短的那个 d = {item.upper(): price for item, price in zip(items, prices)} print(d) # {'FRUIT': 96, 'BOOKS': 78, 'OTHERS': 85}
总结
chapter8
66.什么是元组(demo1)
67.元组的创建方式(demo2)
# 元组的创建方式 '''元组的创建方式''' '''第一种,使用()''' t = ('python', 'world', 98) print(t) # ('python', 'world', 98) print(type(t)) # <class 'tuple'> t2 = 'python', 'world', 98 # ()可省略 print(t2) print(type(t2)) '''第二种,使用内置函数tuple()''' t1 = tuple(('python', 'world', 98)) print(t1) print(type(t1)) t3 = ('python',) # 只包含一个元组的元素需要使用逗号和小括号 print(t3) print(type(t3))
'''空元组的创建方式''' '''空列表的创建方式''' lst = [] lst1 = list() d = {} d2 = dict() t4 = () t5 = tuple() print('空列表', lst, lst1) print('空字典', d, d2) print('空元组', t4, t5)
68.为什么将元组设计成不可变序列(demo3)
69.元组的遍历(demo4)
70.集合的概述与创建(demo5)
71.集合的相关操作(demo6)
72.集合之间的关系(demo7)
73.集合的数据操作(demo8)
74.集合生成式(demo9)
总结
chapter9
75.字符串的创建与驻留机制
元组,字符串,不可变序列
a = 'python' b = "python" c = '''python''' print(a, id(a)) # python 2026188081200 print(b, id(b)) # python 2026188081200 print(c, id(c)) # python 2026188081200
字母数字下划线(标识符)
编译时而非运行时
强制驻留sys
pycharm进行了优化,原本不驻留也驻留了
join比+效率高
76.字符串的常用操作_字符串的查询操作(demo1)
77.字符串的常用操作_字符串的大小写与转换操作(demo2)
78.字符串的常用操作_字符串内容对齐的操作方法(demo3)
79.字符串的常用操作_字符串的劈分(demo4)
80.字符串的常用操作_字符串判断的相关方法(demo5)
81.字符串的常用操作_替换与合并(demo6)
82.字符串的比较操作(demo7)
83.字符串的切片操作(demo8)
84.格式化字符串(demo9)
85.字符串的编码转换(demo10)
总结
chapter10
86.函数的定义与调用(demo1)
def calc(a, b): c = a + b return c result = calc(10, 20) print(result) # 30
87.函数调用的参数传递_位置实参_关键字实参(demo2)
def calc(a, b): # a,b形式参数,简称形参,形参的位置是在函数的定义处 c = a + b return c result = calc(10, 20) # 10,20称为实际参数的值,简称实参,实参的位置是函数的调用处 print(result) # 30 res = calc(b=10, a=20) # =左侧变量的名称是关键字参数 print(res)
88.函数参数传递的内存分析(demo3)
89.函数的返回值(demo4)
90.函数参数定义_默认值参数(demo5)
91.函数参数定义_个数可变的位置形参_个数可变的关键字形参(demo6)
92.函数的参数总结(demo7)
93.变量的作用域(demo8)
94.递归函数(demo9)
95.斐波那契数列(demo10)
总结
chapter11
96.Bug的由来
97.Bug的常见类型_粗心导致的错误(demo1)
98.Bug的常见类型_知识点不熟悉导致的错误(demo2)
99.Bug的常见类型_思路不清导致的问题(demo3)
100.Bug的常见类型_被动掉坑-try-except(demo4)
101.try-except-else结构与try-except-else-finally结构(demo5)
102.python中常见的异常类型(demo6)
103.traceback模块的使用(demo7)
104.pycharm的程序调试(demo8)
总结
chapter12
105.编程的两大思想_面向过程_面向对象
106.类与对象
107.定义python中的类(demo1)
108.创建对象(demo2)
109.类属性_类方法_静态方法的使用方式(demo3)
110.动态绑定属性和方法(demo4)
class Student: def __init__(self, name, age): # 初始化方法,所有对象都有的 self.name = name self.age = age def eat(self): print(self.name + '在吃饭') stu1 = Student("张三", 20) # Student类的实例对象 stu2 = Student("李四", 30) print(id(stu1)) print(id(stu2)) print('---------为stu1动态绑定性别属性----------------') stu1.gender='女' # 只适用于当前绑定的对象 print(stu1.name,stu1.age,stu1.gender) print(stu2.name,stu2.age) # 动态绑定方法 print('--------------------------------') stu1.eat() stu2.eat() def show(): print('定义在类之外的函数') stu1.show=show stu1.show() # 定义在类之外的函数
总结
chapter13
110.面向对象的三大特征_封装的实现方式(demo1)
111.继承及其实现方式(demo2)
112.方法重写(demo3)
113.object类(demo4)
114.多态的实现(demo5)
115.特殊属性(demo6)
116.特殊方法(dict,len,add)(demo7)
117.__new__与__init__演示创建对象的过程(demo8)
118.类的赋值与浅拷贝(demo9)
变量的赋值,类对象的赋值操作
类的浅拷贝,一般都是浅拷贝
深拷贝
总结
chapter14
120.什么叫模块化_模块化编程的好处(demo1)
def fun(): pass def fun2(): pass class Student: native_place='吉林' def eat(self,name,age): self.name=name self.age=age @classmethod def cm(cls): pass @staticmethod def sm(): pass
121.模块的导入(demo2)
122.以主程序方式运行(demo3)
123.python中的包(demo4)
124.python中常用的内置模块(demo5)
125.第三方模块的安装与使用(demo6)
总结
chapter15
126.编码格式的介绍
127.文件读写的原理_读取磁盘文件中的内容(demo1)
128.常用的文件打开模式(demo2)
129.文件对象的常用方法(demo3)
130.with语句(demo4)
131.os模块的常用操作(demo5)
总结
chapter16
133.学生信息管理系统-需求分析
134.学生信息管理系统-系统分析
135.学生信息管理系统-主函数设计(syusystem)
136.学生信息管理系统-录入学生信息功能(syusystem)
137.学生信息管理系统-删除学生信息功能(syusystem)
138.学生信息管理系统-修改学生信息功能(syusystem)
139.学生信息管理系统-查找学生信息功能(syusystem)
140.学生信息管理系统-统计学生总人数(syusystem)
141.学生信息管理系统-显示所有学生信息功能(syusystem)
142.学生信息管理系统-排序模块设计(syusystem)
143.学生信息管理系统-项目打包生成exe可执行文件(syusystem)
chapter17
实操案例1
144.任务一:向文件输出奋斗成就更好的你(demo1)
144.任务二:输出北京天气预报(demo2)
145.任务三:机票购买界面(demo3)
145.任务四:北京地铁一号线运行图(demo4)
实操案例2
146.任务一:输出杨老师出版的图书信息(demo1)
146.任务二:输出《红楼梦》中的金陵十二钗前五位(demo2)
# 第一种方式 变量的赋值 name1 = '林黛玉' name2 = '薛宝钗' name3 = '贾元春' name4 = '贾探春' name5 = '史湘云' print('➊\t' + name1) print('➋\t' + name2) print('➌\t' + name3) print('➍\t' + name4) print('➎\t' + name5) # 第二种方式 列表 lst_name = ['林黛玉', '薛宝钗', '贾元春', '贾探春', '史湘云'] lst_sig = ['➊', '➋', '➌', '➍', '➎'] for i in range(5): print(lst_sig[i], lst_name[i]) # 第三种方式 字典 d = {'➊': '林黛玉', '➋': '薛宝钗', '➌': '贾元春', '➍': '贾探春', '➎': '史湘云'} for key in d: print(key, d[key]) # 第四种方式 zip for s, name in zip(lst_sig, lst_name): print(s, name)
147.任务三:输出图书音像勋章(demo3)
print('\033[0;35m\t\t图书音像勋章\033[m') print('\033[0;35m--------------------------------------\033[m') print('\033[0;32m✿图书音像勋章\t\t✪专享活动\033[m') print('\033[0;36m✿图书音像勋章\t\t❤专属优惠\033[m') print('\033[0;34m✿图书音像勋章\t\t☎优惠提醒\033[m') print('\033[0;35m--------------------------------------\033[m')
147.任务四:输出你的身体指标(demo4)
height = 170 weight = 50.5 bmi = weight / (height + weight) print('您的身高是:' + str(height)) print('您的体重是:' + str(weight)) print('您的BMI的指数是:' + '{:0.2f}'.format(bmi))
实操案例3
实操案例4
实操案例5
实操案例6
实操案例7
实操案例8
实操案例9
实操案例10
实操案例11
实操案例12
实操案例13
实操案例 14
164.任务一:模拟高铁售票系统(demo1)
import prettytable as pt # 目前只是一次售票,不能循环,而且还未显示打印车票 # 显示座席 def show_ticket(row_num): tb = pt.PrettyTable() tb.field_names = ['行号', '座位1', '座位2', '座位3', '座位4', '座位5'] for i in range(row_num): lst = [f'第{i + 1}行', '有票', '有票', '有票', '有票', '有票'] tb.add_row(lst) print(tb) # 订票 def order_ticker(row_num, row, column): tb = pt.PrettyTable() tb.field_names = ['行号', '座位1', '座位2', '座位3', '座位4', '座位5'] for i in range(row_num): if int(row) == i + 1: lst = [f'第{i + 1}行', '有票', '有票', '有票', '有票', '有票'] lst[int(column)] = '已售' tb.add_row(lst) else: lst = [f'第{i + 1}行', '有票', '有票', '有票', '有票', '有票'] tb.add_row(lst) print(tb) if __name__ == '__main__': row_num = 13 show_ticket(row_num) choose_num = input('请输入选择的座位,如13,5表示13排5号座位') try: row, column = choose_num.split(',') except: print("输入格式有误,如13排5号座位,应该输入13,5") order_ticker(row_num, row, column)
165.任务二:推算几天后的日期(demo2)
实操案例15
166.任务一:记录用户登录日志(demo1)
167.任务二:模拟淘宝客服自动回复(demo2)