python基础-note-4.16

昨日内容

  • 1.数据类型的内置方法
* 字典
len()	d[key]	d.get[key]	d[key]=value
d.pop(key)	keys()	values()	items()
* 元组
len()	索引切片	
* 集合
去重	关系运算
  • 2.字符编码
#最好能够自己用话术描述出字符编码的由来
1.计算机存储数据的本质
2.字符编码概念
	人类字符与数字对应关系
3.字符编码发展史
4.字符编码应用
	要想文件不乱码	以什么编码村就以什么编码解
	编码与解码	encode()	decode()
  • 3.文件处理
* 文件:操作系统暴露给用户操作硬盘的快捷方式

* 文件处理的代码
with open(文件路径,模式,编码) as 变量名:
	子代码块

* 文件路径:绝对路径与相对路径

* 转义	r

* 读写模式
r(rt)
w(wt)
a(at)

* 操作模式
r	
t
#文件拷贝
  • 4.作业讲解
#注册
#1.获取用户输入
username=input("username>>>").strip()
password=input("password>>>").strip()
#2.文件操作 写入
with open(r'userinfo.txt','a',encoding='utf8') as f:
	f.write("%s|%s"%(username,password))

#登陆
#1.获取用户输入
username=input("username>>>").strip()
password=input("password>>>").strip()
#2.文件操作 读取
with open(r'userinfo.txt','r',encoding='utf8') as f:
	data=f.read()
#将文件内容拆分成用户名和密码
real_name,real_pwd=data.split('|')	#解压赋值
#4.比较文件数据跟用户输入的数据是否相同
if username==real_name and password ==real_pwd:
	print("登陆成功")
else:
	print("用户名或密码错误")

""""""""""""""""""扩展"""""""""""""""""""
with open(r'a.txt','r',encoding='utf8') as f:
	data=f.read()
#当文件内容过大的情况下,不推荐使用,因为其是一次性读取所有文件
for line in f:
	print(line)	#一行行的读取文件内容,同一时刻内存中只会有一行文件内容

#注册
#1.获取用户输入
username=input("username>>>").strip()
password=input("password>>>").strip()
flag=True
#3.先校验用户名是否重复
with open(r'userinfo.txt','r',encoding='utf8') as f:
	for line in f:
	#比较用户名是否重复 获取文件中一个个用户名
	real_name=line.split('|')[0]
	#判断是否重复
	if username==real_name:
		print("用户名已存在")
		flag=False
		break
if flag:
	#2.文件操作 写入
	with open(r'userinfo.txt','a',encoding='utf8') as f:
		f.write("%s|%s\n"%(username,password))
	print("注册成功")

#登陆
#1.获取用户输入
username=input("username>>>").strip()
password=input("password>>>").strip()
#2.文件操作 读取
with open(r'userinfo.txt','r',encoding='utf8') as f:
	for line in f:
		#3.将文件内容拆分成用户名和密码
		real_name,real_pwd=line.split('|')	#解压赋值
		#4.比较文件数据跟用户输入的数据是否相同
		if username==real_name and password==real_pwd.strip('|'):
			print('登陆成功')
			break
	else:
		print('用户名或密码错误')
#for循环也可以跟else一起使用,当for循环自动结束没有被break主动打断,则会执行else

今日内容

1.文件操作补充

with open(r'userinfo.txt','r',encoding='utf8') as f:
	print(f.read())	#read()读完数据之后,光标停留在文件末尾
	print(f.read())	#后续无法再读取内容

seek(位移,模式)#可以控制光标的移动
0	基于文件开头
1	基于当前位置
2	基于文件末尾
#1和2模式只能在b模式下使用

f.flush()	#将内存中的文件数据立刻写入硬盘
f.readable()	#判断是否可读
f.writeable()	#判断是否可写

2.函数

1.定义
函数类似于某种工具,提前定义好之后,后续可以反复使用,从而避免重复劳动

def get_info():	#先制造工具
	username=input("username>>>").strip()
	password=input("username>>>").strip()
get_info()	#再使用工具

2.函数语法结构
def 函数名(参数1,参数2,……)"""函数的注释"""
	函数体代码
	return 返回值
"""
注意:
1.函数在定义阶段只识别语法,不执行代码
2.函数在调用阶段才会执行函数体代码
	函数名加括号(如果有参数还需要额外的传入参数)
3.函数必须先定义后调用
"""
#1.def	定义函数的关键字
#2.函数名	命名方式与变量名的命名类似
#3.参数	函数在定义的时候也可以添加额外的参数,之后在使用的时候必须先传入参数才能使用,参数可有可无,需要结合实际情况。
#4.函数的注释	用来介绍函数的主要功能及使用方法
#5.函数体代码	就是程序员使用python编写的具有一定功能的逻辑代码
#6.return	调用函数之后返回给函数调用者的反馈信息,没有可以不反馈。

3.函数的种类
* 无参函数	定义和调用时不含参数
def index():
	print('hello world')

* 有参函数
def my_max(x,y):
	if x>y:
		print(x)
	else:
		print(y)

* 空函数	有助于组织逻辑架构
	def run():
		pass
	def fight():
		pass
	del study():
		pass

4.补充
* 三元表达式
res=666 if 1>2 else 4
print(res)	#4
#if后面的条件如果为True,则使用if前面的值;如果为False则使用else后面的值	这样做的目的是节省代码

* 列表生成式
new_list=["jason","kevin","tom","jack"]	将所有人名后面加上一个NB
new_list=[]
for name in name_list:
	new_list.append(name+"NB")	#字符串的加法就是拼接
print(new_list)

#列表生成式
new_list=[name+"NB" for name in name_list]
print(new_list)
new_list=[name+"DSB" for name in name_list if name!="jason"]
print(new_list)

5.函数的返回值
如何获取函数的返回值	用变量接收即可
变量名=函数名叫括号调用
"""
1.没有关键字return	默认都是返回None
2.写了return		return后面写什么就返回什么
如果一次性返回多个元素,那么会自动组织成元组返回
3.return额外的功能
函数体代码只要遇到return就会立刻结束整个函数的运行
"""

6.函数的参数
函数在定义阶段括号内写的都叫函数的形式参数,简称:形参
函数在调用阶段括号内传入的叫做函数的实际函数,简称:实参
函数的形参类似于变量名,函数的实参则类似于变量值
两者在函数调用的时候才会绑定关系,函数运行结束自动结束绑定
def index(x,y):	#x,y就是函数的形参,本质上就是变量名
	print(x,y)
index(1,2)	#1,2就是函数的实参,本质就是变量值
在调用的时候会将1绑定给x,2绑定给y

参数种类
* 位置参数
按照位置顺序逐一传值,参数个数必须相同
def index(a,b):
	print(a,b)
index(1,2)

* 关键字参数
指名道姓的给指定的形参传值(打破位置顺序)
	index(b=5,a=9)
#关键字参数一定要跟在位置参数的后面,并且同一个参数不能重复传值

* 默认参数
如果不给参数赋值则使用默认参数,也可以重新赋值
def register(name,age,gender="male")
	print(name,age,gender)
register("jason",18)
register("lucy",23,"female")

* 可变长参数
def func(a,*b):	
	print(a,b)
func(1)	#1 ()
func(1,2,3,4)	#1 (2,3,4)
# *在形参中可以用来接收多余的位置参数,并且组织成元组的形式赋值给*后面的变量名
def login(a,**b):
	print(a,b)
login(a=1)	# 1 {}
login(a=1,b=2,c=3)	#1 {'b':2,'c':3}
#	**在形参中可以用来接收多余的关键字参数,并组织成字典的形式赋值给**后面的变量名

#需求:写一个函数,无论怎么传值都可以正常执行
def my_func(*a,**b):
	print(a,b)
my_func()	#() {}
my_func(1,2,3,4,5)	#(1,2,3,4,5) {}
my_func(a=1,b=2,c=3)	#() {'a':1,'b':2,'c':3}
my_func(1,2,3,4,a=1,b=2,c=3)	#(1,2,3,4) {'a':1,'b':2,'c':3}

"""
针对可变长形参变量名,习惯使用args kwargs
def MyFunc(*args,**kwargs):
	pass
"""

3.面向对象(了解基本概念)

对象:就是数据与功能的结合体
类:多个对象系统数据和功能的结合体
程序中要先有类,才能产生对象
#先定义类:
class Student:	#类名推荐首字母大写(大驼峰)
	#对象共同的数据
	school='清华大学'
	#对象还可以有自己独有的数据(不考虑独特的功能)
	#固定写法,独有的数据
	def __init__(self,name,age,gender):
		self.name=name
		self.age=age
		self.gender=gender
	#对象共同的功能
	def choice_course(self):
		print("%s正在选课"%self.name)
# 类产生对象
obj=Student()

#对象访问数据和功能
obj.school
obj.choice_course()

obj1=Student('jason',19,'male')
obj2=Student('kevin',29,'female')
obj3=Student('jack',39,'male')
"""
在类中定义的函数,默认必须有一个形参self
并且在对象调用该函数的时候不需要传,默认自动将对象当作第一个参数传入
"""

4.模块

写好的功能,直接使用即可
使用模块前必须先倒入模块
import 模块名	#相当于将模块中所有的代码全部执行并加载到当前环境中
from 模块名 import 子模块名1,子模块名2……	#导入指定的功能

* datatime
* time
time.time()	#时间戳 以秒为单位
time.sleep()	#程序原地阻塞/等待一定时间
time.strftime("%Y-%m-%d %H:%M:%S")
time.strftime("%Y-%m-%d %X")
* os模块
os.path.join()	#可以自动识别操作系统,从而调整\/

模块种类
1.内置模块
python解释器已经下载好,直接导入使用即可
2.第三方模块
别人写的模块,要想使用必须先基于网络下载,之后才能导入使用

"""**如何下载模块**
pip3是专门用来下载第三方模块的工具

方式1 命令行模式
pip3 install 模块名
pip3 install 模块名==版本号	#下载指定版本
当下载模块的时候报错可能的原因有
1.pip版本过低,需要先更新
	python3-m pip install --upgrade pip
2.网络不稳定
	timeout 换一个稳定的网络再次执行命令下载
3.当前模块需要提前做相应的环境配置
	具体结合实际情况分析(百度搜索)

#方式2	pycharm快捷方式
file > settings > project interpreter > 点击加号或者双击任意模块名 > 输入模块名 > 右下角勾选选择版本下载

pip3下载第三方模块的时候默认是从国外的仓库下载,速度很慢
可以切换仓库地址
1.百度搜索pip源
2.拷贝地址
	pip3 install 模块名 -i 国内源地址
3.pycharm配置仓库地址
![仓库配置操作](https://img-blog.csdnimg.cn/20210416162827567.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L29hX3NfaV9z,size_16,color_FFFFFF,t_70#pic_center)

"""

作业

1.消化吸收今日内容
2.将今日登陆注册的作业改成函数版本
3.看一看模块相关的博客文章
4.总结本周所学的内容
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值