一、课堂代码敲一遍
此处省略,内容可参考课堂记录
ps:选中 Ctrl+/ 注释 Crtl+d 复制当行内容 Tab 往右四个空格 Shift+tab 往左减四个空格
二、课堂记录
- 数据类型剩余的内置方法
列表类型内置方法
https://www.cnblogs.com/kermitjam/p/10810572.html?tdsourcetag=s_pctim_aiomsg
Insert(index,value) value=object
Index(value)
浅拷贝与深拷贝
浅拷贝:拷贝的是引用,所有对象都会指向此地址 , 对这个内存地址的改动,都会影响到引用到这个对象
Copy完全拷贝 只拷贝当前的 在内存中弄了一个新的内存地址,把内容拷贝进去
但如果直接赋值(内存地址同时赋值),所以值会随着原来的变动而变动
浅拷贝不会拷贝对象内部的子对象
Python中对象的赋值都是进行对象引用(内存地址)传递
使用copy.copy(),可以进行对象的浅拷贝,它复制了对象,但对于对象中的元素,依然使用原始的引用.
如果需要复制一个容器对象,以及它里面的所有元素(包含元素的子元素),可以使用copy.deepcopy()进行深拷贝
总结:
1. 赋值是将一个对象的地址赋值给一个变量,让变量指向该地址( 旧瓶装旧酒 )。
2. 浅拷贝是在另一块地址中创建一个新的变量或容器,但是容器内的元素的地址均是源对象的元素的地址的拷贝。也就是说新的容器中指向了旧的元素( 新瓶装旧酒 )。
3. 深拷贝是在另一块地址中创建一个新的变量或容器,同时容器内的元素的地址也是新开辟的,仅仅是值相同而已,是完全的副本。也就是说( 新瓶装新酒 )。
https://blog.csdn.net/w494675608/article/details/82114798
https://www.runoob.com/w3cnote/python-understanding-dict-copy-shallow-or-deep.html
Sort()正序
Sort(reverse=true)降序
字典类型内置方法
字典 (key :value)
Get 保证程序不会报错 会返回一个error dict.get(‘没有的’) 返回error
有值的还是原来的,及时你在get里赋了一个新的 没值的你可以在get里赋值
Pop() 取 可以取完直接赋值
Popitem()随机取出字典中的某个值 字典是无需类型 数量少的时候可能会取出最后一个 多的时候一般都是随机了
元组类型( , , ……)
注意:元组与列表的区别,元组是不可变类型(修改 内存地址不是原来的地址了 所以原来指向的内容当然不可变了,所以一开始要赋值),列表是可变类型(修改 内存地址还是原来的)
注意切片 顾头不顾尾
集合类型 { , , ……} 自带默认去重功能
爬虫会用到
集合是无序的,去重数据每次位置都会变
注意字典和集合都是{}
- 字符编码
https://www.cnblogs.com/kermitjam/p/10810583.html
- 文件处理
wt write txt
不写 就默认在当前python包里当前/.py文件(同一级别)目录下的一个txt 或者你可以直接r 文件的绝对路径
copy path赋值文件目录绝对路径
注意路路径问题 在前面加上r //r‘文件路径’
https://blog.csdn.net/u011242657/article/details/64437612
Os不会自动帮你回收文件资源 会帮你回收python解释器的资源
所以需要你手动关闭文件资源f.close()
追加at 在后面追加
写入wt 在原基础上改动
\n换行
- 文件处理之上下文管理
with,with会自带close()功能,会在文件处理完后自动调用close()关闭文件
- 图片与视频的读写操作
从网站爬得一个图片的二进制流print(res.Content) 然后将二进制流写入‘大帅比.jpg’中
将视频二进制流写入内存,再将内存的东西读出写入
- 函数基础
函数特点:复用 结构清晰
函数:函数相当于工具,需要事先准备好,在需要时再使用
ways:必须先定义,后调用
语法:
def cup(参数1,参数2...): //可放可不放 参数是为了接受外部传来的参数
‘’’
函数的声明 说明函数是干嘛用的 写好注释
‘’’
四个空格(tab) 函数整体代码(逻辑代码)
return 函数返回值
.strip()去除用户输入的空格
注意:函数体内的代码必须要写在函数体内 // tab
出现的txt 是以用户名字命名的txt
函数在定义阶段发生的事情:
1.先打开python解释器
2.加载 .py文件
3.python只检测有无语法错误,不会执行函数体代码 所以定义阶段不会报错
但是调用阶段会执行函数体代码 如果你还没有定义过这个函数 自然会报错
三、用函数实现登录功能
1 def login(): 2 3 number = 0 4 5 # 打开文件读取用户信息 6 with open('users.txt', 'r', encoding='utf-8') as f: 7 res = f.read() 8 print(res) 9 10 # 普通赋值11 # list1 = res.split(':')12 # username = list1[0]13 # password = list1[1]14 # print(username, password)15 16 # 解压赋值17 username, password = res.split(':')18 19 flag = True20 21 while flag:22 # 让用户输入用户名23 user = input('请输入用户名:').strip()24 25 # 判断用户名是否存在26 if username == user:27 28 # 如果number==3,则表示输入密码错误超过或等于三次29 if number == 3:30 break31 32 while number < 3:33 34 # 让用户输入密码35 pwd = input('请输入密码:').strip()36 37 # 判断密码是否正确38 if password == pwd:39 40 print('登录成功!')41 # 登录成功后,修改flag为False,退出所有循环42 flag = False43 break44 45 else:46 print('登录失败!')47 # 密码输入错误,则number +1,循环次数 -148 number += 149 else:50 51 print('用户名不存在,请重新输入!')52 53 54 login()