一、随堂笔记:
1.数据类型剩余的内置方法
2.字符编码
3.文件处理
4.函数基础
list1=["zhozho",18,"male",3.0,9,"广州","zhozho",["tank","ko"]]
'''
insert()插入
list1=["zhozho",18,"male",3.0,9,"广州","zhozho",["tank","ko"]] list1.insert(3,"dudu") print(list1)
pop()取出
remove()移除
count()查看值的个数
print(list1.count("zhozho"))
index()查看值的索引
print(list1.index("广州"),"广州")
clear()清空列表的值
copy()拷贝
#copy()与=的区别
'''
"="号是直接把相应的内存赋给变量,故改变内存中值的时候,变量的值跟者改变
copy()是将之前内存地址拷贝到另一个内存地址之中,前一个地址值改变时,copy()变量值不变
称之为浅拷贝
浅拷贝:list1的列表中的外层值改变值对其不影响,但其中
的可变类型改变时,会随之改变
list2=list1.copy(); list3=list1 print(list2) print(list3) list1.append("增加") print(list2) print(list3)
编译:
['zhozho', 18, 'male', 'dudu', 3.0, 9, '广州', 'zhozho', ['tank', 'ko']]
['zhozho', 18, 'male', 'dudu', 3.0, 9, '广州', 'zhozho', ['tank', 'ko']]
['zhozho', 18, 'male', 'dudu', 3.0, 9, '广州', 'zhozho', ['tank', 'ko']]
['zhozho', 18, 'male', 'dudu', 3.0, 9, '广州', 'zhozho', ['tank', 'ko'], '增加']
'''深拷贝
把list1中的所有值完全拷贝到另一个地址,list1中改变任何值都不改变
'''
from copy import deepcopy list4=deepcopy(list1) list1[8].append("ho") print(list1) print(list2) print(list3) print(list4)
编译:
['zhozho', 18, 'male', 'dudu', 3.0, 9, '广州', 'zhozho', ['tank', 'ko', 'ho'], '增加'] ['zhozho', 18, 'male', 'dudu', 3.0, 9, '广州', 'zhozho', ['tank', 'ko', 'ho']] ['zhozho', 18, 'male', 'dudu', 3.0, 9, '广州', 'zhozho', ['tank', 'ko', 'ho'], '增加'] ['zhozho', 18, 'male', 'dudu', 3.0, 9, '广州', 'zhozho', ['tank', 'ko'], '增加']
extend()合并
reverse()反转
sort()排序
'''
字典:
#按照key取存值
dict1={"name":"alice","age":18,"sex":"男","school":"安徽工程大学"}
print(dict1["school"])
>>>安徽工程大学
#get()
若key在字对应的字典中则取value值,不在则为none,不会报错
若不存在的key值后面定义了value值,则会自动取自定义的value值
print(dict1.get("school")) print(dict1.get("ji","ko")) print(dict1.get ("ji"))
安徽工程大学
ko
None
# 2.len()
print(len(dict1))
#3.成员运算,判断的是字典里的key
#in ot in
#4.删除 del
# del dict1["name"]
#5.pop()
name=dict1.pop("name") print(name) print(dict1)
alice {'age': 18, 'sex': '男', 'school': '安徽工程大学'}
字典是无序类型,不根据索引取值
排序是无序的
Python 字典 popitem() 方法随机返回并删除字典中的一对键和值(一般删除末尾对)。
如果字典已经为空,却调用了此方法,就报出KeyError异常。
dict1.popitem() print(dict1)
#6.keys value items(键值对)
print(dict1.keys()) print(dict1.values()) print(dict1.items())
dict_keys(['age', 'sex']) dict_values([18, '男']) dict_items([('age', 18), ('sex', '男')])
#7.循环
#循环字典中索引的key
for key in dict1: print(key)
#8 update()更新
dict2={"work":"student"} dict1.update(dict2) print(dict1)
{'age': 18, 'sex': '男', 'work': 'student'}
元组:#在小括号内,以逗号隔开,存放多个值
#优先掌握,元组为不可变类型(列表为可变类型)
tuple1=(1,2,3,4,5,6)
print(tuple1)
#按索引取值
print(tuple1[1])
#切片取值,步长
print(tuple1[0:6])
#成员运算
#循环
集合:
#集合类型
#在{}内以逗号隔开,可存放多个值,但集合客默认去重功能
集合也是无序的
set1={1,2,3,5,3,2,4,7} print(set1)
{1, 2, 3, 4, 5, 7}
{}:
set2=set() set3={}#这里无法判断是元组还是字典 print(set2,set3) set3["name"]="tank" print(type(set3))
set2=set() set3={}#这里无法判断是元组还是字典 print(set2,set3) set3["name"]="tank" print(type(set3))
set() {} <class 'dict'>
#文件处理的基本使用
#open("文件的名字",mode="wt",encoding=“utf_8”)mode 为对文本操作的模式,encoding为指定的字符编码
'''
打开i文件会产生两种资源,一种是python解释器与python文件的资源,结束程序python会自动回收
f=open(r'E:新建文件夹收纳python_projectday_02文件的名字.txt',mode='wt',encoding='utf-8') f.write("hello tank!!") f.close()
读文件
f=open(r'E:新建文件夹收纳python_projectday_02文件的名字.txt',mode='r',encoding='utf-8') res=f.read() print(res)
文件的追加模式a打开一个文件用于追加。追加文件需要加上
# 如果该文件已存在,文件指针将会放在文件的结尾。
# 也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
f=open(r'E:新建文件夹收纳python_projectday_02文件.txt','a',encoding='utf-8') f.write(' hello,join!') f.close()
文件处理之上下文管理:with as
with会自带close功能
会在文件处理完成后自动调用close()
with open('E:新建文件夹收纳python_projectday_02文件.txt','w',encoding='utf-8') as f: f.write('huiihggfghh')
图片和视频的处理
获取网页图片的地址,这里为图片的URL,后缀为.jpg
#content返回的是bytes,二级制型的数据。图片、视频等都是二进制的数据
import requests res =requests.get('http://pic53.nipic.com/file/20141115/9448607_175255450000_2.jpg')
写入图片
with open('da.jpg','wb') as f: f.write(res.content)
读图片
with open('da.jpg','rb') as f: res=f.read() print(res)
图片拷贝
with open('da.jpg','rb') as f,open('ta.jpg','rb') as w: res=f.read() w.write(res)
#读写视频操作与读写图片基本一致,视频后缀为.mp4
函数相关
1.什么是函数
函数相当于工具,需要实现准备好,在需要时再使用
2.如何使用函数
函数必须先定义,后调用
3.函数的语法:
def cup(参数一,参数二):
函数的声明
函数体代码(逻辑代码)
def:(全称defind)用来声明定义函数的关键字
函数名:看其名,知其意
():存放的是接收外界的参数
注释:用来说明函数的作用
函数体代码:逻辑代码
return:后面跟函数的返回值
'''
#注册功能函数
def register(): while True: user=input("请输入用户名:").strip() pwd=input("请输入密码").strip() re_pwd=input("请再次输入密码:").strip() if pwd==re_pwd: # user_info="用户名:%s,密码:%s"%(user,pwd) # user_info="用户名:{},密码:{}".format(user,pwd)三种方法使用户名与密码匹配 user_info=f'用户名:{user},密码:{pwd}' with open("user.txt",'w',encoding='utf-8')as f: f.write(user_info) else: print("两次密码不一样,请重新输入!") return
#调用函数 函数名()
register()
'''
函数在定义阶段发生的事情
1.先打开python解释器
2.加载python文件(.py文件)
3.只会检测python语法,不会执行函数体代码
'''
二、作业
''
1.让用户输入用户名与密码
2.校验用户名是否存在
3.用户名存在后检验密码是否正确,若正确打印”登陆成功“
否则打印”用户名或密码错误“,并让用户重新输入
4.用户密码输入错误超过三次则退出循环
'''
def login(): count=0 su=0 while True: if count!=3: user=input("please input your username:").strip() password=input("please input your password:").strip() username="" psw="" with open(r'E:新建文件夹收纳python_projectday_02登录文件',mode='rt',encoding='utf-8') as f: for line in f: res=line.strip().split(' ')[0].split(',') for i in res: str=i.split(':') if user in str: t1=1 # else:t1==0 if password in str and t1==1: su=1 print(f'用户{user}登陆成功!') print(su) if su==1: break else: count+=1 print(f"用户名或密码输入错误!请继续输入,你还有{3-count}次机会!") else: print("登录已结束,请确定用户名或密码后再尝试!") break login()
运行:
please input your username:Alice please input your password:34 用户名或密码输入错误!请继续输入,你还有2次机会! please input your username:Alice please input your password:123454 用户Alice登陆成功!
登录文件:
user:Alice,password:123454 user:sily,password:5678 user:jion,password:8989