#第二次作业
1.作业
(1)题目及要求
(2)user文件
(3)源代码
#作业登录功能:在文件中读出来,把用户名密码切出来 def login(): condition=0 while condition<3: user = input('请输你的用户名:').strip() pwd = input('请输入你的密码:').strip() name_info=f'用户名:{user}' pwd_info = f'密码:{pwd}' with open('user2.txt', 'r', encoding='utf-8')as f: res = f.read() list=res.split(',') if name_info in list: # 获取该用户名所在的位置 name_location=list.index(name_info) # 用户名的后一个元素就是密码,通过+1获得文件中该用户名对应密码的位置 # 由此实现用户名与密码绑定 if pwd_info ==list[name_location+1]: print('登陆成功') break else: print('用户名或密码错误') print('请重新输入用户名和密码') else: print('用户名不存在') condition=condition+1 login()
(4)结果
成功情况:
不成功情况:
2.课堂笔记
(1)列表,集合,元组,深、浅拷贝
# 1.数据类型的剩余的内置方法 # 2.字符编码 # 3.文件处理 # 1.1列表类型 list1=['tank',18,'male',3.0,9,'广东','tank',[1,2]] list1.insert(2,'oldboy') print(list1) # count()查看某个值的个数 print(list1.count('tank')) # index()查看值的索引 print(list1.index('广东'),'---广东') list2=list1.copy() print(list2,'添加值前') # copy(),是属于把list1中的内存地址拷贝出来,然后会在链表中新建一个内存地址,放入其中 # 下面是赋值,是把list1的内存地址给了list3,也就是说list3是指向list1的内存地址 list3=list1 print(list3,'添加值前') list1.append('jason') print(list2,'添加值后') print(list3,'后') # copy()属于浅拷贝:list1的列表中外层值改变对其不影响 # 但是对list1中可变类型进行修改则会随之改变值 list1[8].append('tank') print(list2) print(list3) # 深拷贝,把list1中的值完全拷贝到一个新的地址 # 进而与list1完全隔离开 from copy import deepcopy list4=deepcopy(list1) print(list4) # extend合并???????以下的为什么不能反转后赋值给另一个列表??? list5=[1,2,3] list6=[4,5,6] list5 .extend(list6) print(list5) # reverse()反转 # 列表反转之后还是列表 # 元组与列表是非常相似的,区别在于元组的元素值不能修改,元组是放在括号里的 # reverse只是对自己本身进行升降变化,并不会有任何返回值 list5.reverse() print(list5) # sort()升序 list8=[1,3,5,8,10,2,4,6] list8.sort() print(list8) # 降序 list8.sort(reverse=True) print(list8) # 1.2字典的内置方法 # 1.按照key取/存值 dict1={'name':'lhhh','age':'18','sex':'male','school':'ahpu'} # 根据key取学校的值 #print(dict1['school'])????有问题 print (dict1.get('school','华南理工大学')) print (dict1.get('sal','该结果不存在')) # 成员运算 print('name'in dict1) print('sal'in dict1) #删除 del dict1['name'] print(dict1) #POP() age=dict1.pop('age') print(dict1) print(age) dict1.popitem() print(dict1) #字典是无序的,是随机删除的,子不过目前还是在小计数池里 #key,values,items print(dict1.keys()) print(dict1.values()) print(dict1.items()) # 键值对 #循环 for key in dict1: print(key) # update() print(dict1) dict2={"work":"student"} dict1.update(dict2) print(dict1) # 1.3元组类型 # 在小括号内,以逗号隔开存放多个值 # 注意是不可变类型,对元组进行修改内存地址就不是原来的地址了 # 因为不可以修改所以在最开始就需要赋值 tuple1=(1,2,3) #按索引取值 print(tuple1[2]) # 切片 print(tuple1[0:6]) print(tuple1[0:6:2]) for line in tuple1: print(line) # 1.4集合类型 # 在大括号内以逗号隔开可存放多个值 # 但集合会默认去重功能 # 所以一般使用集合来去重,在这里爬虫后去掉重复的数据就需要用到这个 # 集合也是无序的,去重之后,原来元素的位置可能会发生变化 set1={1,2,3,5,2,3,} print(set1) # 只是创建的时候类型是不确定的,只是在后来继续进行赋值的时候才会判断出是哪个类型 set2=set() set3={} print(set2) print(set3) set3['name']='tank' print(type(set3))
(2)文件读写常规写法,with写法
a.注意需要添加requests库
方法:在命令行里写入
pip3 install requests
注:安装过后requsets还是有波浪线,原因可能是1.未配置python的环境变量 2.所建的python文件是虚拟的,需要添加python解释器。
# 文件读写 # open(参数1:文件的绝对路径/文件的名字,参数2:操作模式,参数3:指定字符编码) # 对文本进行操作 # f称之为句柄,能操作文件的对象 # f=open(r'F:\python学习\PyCharm 2018.1.4\DD.txt',mode="wt",encoding="utf-8") # # wt=write text # f.write('hello') # write会重新生成一个文件,写入内容 # #回收文件的资源 # f.close() # 读文件 # 因为前两个参数在源码中已有定义,所以可不写 f=open(r'F:\python学习\PyCharm 2018.1.4\DD.txt',mode="rt",encoding="utf-8") res=f.read() print(res) f.close() # 文件追加append # 是在原来文件的末尾添加内容 f=open(r'F:\python学习\PyCharm 2018.1.4\DD.txt','a',encoding="utf-8") f.write('\nhello jason') f.close( ) # 默认at模式
#文件处理之上下文管理:with() # with会自带close()功能 # 会在 with open (r'file1.xt','w',encoding='utf-8')as f: f.write('life is short') #读文件 with open (r'file1.xt','r',encoding='utf-8')as f: res=f.read() print(res) #追加文件
(3)图片,视频的读 、写、追加
a.注意:获取图片的url,可通过右击复制图片地址等
b.注意: 在读写视频中,关于本地视频,是将其粘贴到所建的python文件夹下,之后创建出广告片.mp4这个文件,但是此时在python中是以文件的形式,
需要右击新建出的文件,选择show in Explorer,找到实际在电脑中所建立的文件,再打开就可以了
# 都是以二进制的形式读入到内存,然后再从内存读出到所见建的文件中 # import requests # res=requests.get('https://img.zcool.cn/community/017c395cfd98c5a801213ec23f5be0.jpg@2o.jpg') # print(res.content) # #写入图片 # with open('hua1.jpg','wb')as f: # f.write(res.content) # # 因为unicode 也是base型 # # 读取图片 # with open('hua1.jpg','rb')as f: # res=f.read() # print() # # 文件拷贝操作 # with open('hua1.jpg','rb')as f,open('beautiful.jpg','wb')as w: # res=f.read() # w.write(res) # # 读写视频 # # 由于一次打开文件所有的内容,若文件的大小超出内存的大小则会溢出 # # 所以采用以下的方法一行一行的读,一行一行的写入新文件中 with open('樱花味薯片概念片.mp4','rb')as f,open('广告片1.mp4','wb')as w: for line in f: w.write(line) # 此时会创建出广告片.mp4这个文件,但是此时在python中是以文件的形式, # 需要右击新建出的文件,选择show in Explorer,找到实际在电脑中所建立的文件,再打开就可以了 # res=f.read() # print(res) # w.write(res)