数据分析4.16

昨日内容回顾

  • 数据类型的内置方法

    # 字典
       len()
       d[key]
       d.get(key)
       d[key] = value
       pop(key)
       keys()
       values()
       items()
    # 元组
       len()
       索引切片
       # 面试题
    # 集合
       去重
       关系运算
       
    
  • 字符编码

    # 最好能够自己用话术面熟出字符编码的由来
    1.计算机存储数据的本质
    
    2.字符编码概念
        人类字符与数字对应关系
    
    3.字符编码发展史
        一家独大
        群雄割据
        天下一统
        
    4.字符编码应用
        1.要想文件不乱码  以什么编码就以什么编码解
        2.编码与解码
            encode()
            decode()
    
  • 文件处理

    文件
       操作系统暴露给用户操作硬盘的快捷方式
        
    代码格式
       with open(文件路径,模式,编码) as 变量名:
            子代码块
            
    文件路径
       绝对路径和相对路径
       转义
    
    读写模式
       r
       w
       a
        
    操作模式
       t
       b
    
    #文件拷贝
    

今日内容概要

  • 作业讲解

  • 文件操作补充

  • 函数

  • 面向对象(了解基本概念即可)

今日内容详细

作业讲解

# 注册
# 1.获取用户输入
username = input('username>>>:').strip()
password = input('password>>>:').strip()
# 2.文件操作  写入
with open(r'userinfo.txt','a',encodeing='utf8') as f:
    f.write('%s|%s'%(username,password))
    
    
# 登录
# 1.获取用户输入
username = input('username>>>:').strip()
password = input('password>>>:').strip()
# 文件操作  读取
with open(r'userinfo.txt','r',encoding='utf8') as f:
    data = f.read()  # jason|123
# 将文件内容拆分成用户名和密码
real_name,real_pwd = data.split('|') # 解压赋值
# 比较文件数据跟用户输入的数据是否相同
if username == real_name and password == real_pwd:
    print('登陆成功')
else:
    print('用户名或密码错误')
    
    
    
#######################拔高
# 注册
# 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('\n'):
            print('登录成功')
            break
    else:  # for循环也可以跟else一起使用 当for循环自动结束没有被break主动打断 则会执行else
        print('用户名或密码错误')

其他方法补充

'''其实我们也可以控制光标的移动'''
# f.seek(3,0)
# print(f.read())
"""
     seek(位移,模式)
     0  基于文件开头
     1  基于当前位置
     2  基于文件末尾
  ps:1和2模式只能在b模式下使用

"""
f.flush()   #将内存中文件数据立刻写入硬盘
f.readable()
f.writable()

函数

函数就类似于是工具
	提前定义好之后
    后续就可以反复使用 从而避免重复劳动
    
# 先制造工具
def get_info():
    username = input('username>>>:').strip()
    password = input('password>>>:').strip()
# 再使用工具
get_info()

函数语法结构

def 函数名(参数1,参数2,...)
    '''函数的注释'''
    函数体代码
    return 返回值

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

"""

函数种类

1.无参函数
	def index():
        print('from index')
2.有参函数
	def get_max(x,y):
        if x > y:
            print(x)
        else:
            print(y)
3.空函数
	def run():
        pass

补充知识

1.三元表达式
	res = 666 if 1 > 2 else 4
    print(res)  # 4
    """
    if后面的条件如果为True则使用if前面的值
    如果为False则使用else后面的值

    目的仅仅是为了节省代码
    """
2.列表生成式
   name_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)

函数的返回值

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

函数的参数

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


1.位置参数
	按照位置顺序一一传值
   	 	多一个不行少一个也不行
        def index(a,b):
            print(a,b)
        index(1,2)
               
2.关键字参数
	指名道姓的给指定的形参传值(打破位置顺序)
    	index(b=5,a=9)
        index(9,b=5)
     # 注意:关键字参数一定要在位置参数的后面 并且同一个参数不能重复传值
    
3.默认参数
	# 一般默认,特别给出就按给出的
	def register(name,age,gender='male'):
    	print(name,age,gender)
    register('tony',38)
	register('lili',28,'female')

4.可变长参数
	def func(a,*b):
    	print(a,b)
    func(1)  # 1 ()
    func(1,2,3,4)  # 1 (2, 3, 4)
    func(1,2,3,4,5,6,7,8,9)  # 1 (2, 3, 4, 5, 6, 7, 8, 9)
    """
    单星号
    *在形参中 可以用来接收剩余的位置参数
        并且组织成元组的形式赋值给*后面的变量名
    """
    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
    

面向对象

对象
	就是数据与功能的结合体
  
类
	多个对象相同数据和功能的结合体
    
# 学生1:
    数据:
        学校=清华大学
        姓名=李建刚
        性别=男
        年龄=28
    功能:
        选课
        
# 学生2:
    数据:
        学校=清华大学
        姓名=王大力
        性别=女
        年龄=18
    功能:
        选课
        
# 学生3:
    数据:
        学校=清华大学
        姓名=牛嗷嗷
        性别=男
        年龄=38
    功能:
        选课
        
# 学生类
    相同的特征:
        学校=清华大学
    相同的功能:
        选课   

代码实现

在程序中是先有类 才能产生对象
# 先定义类
class Student:  # 类名推荐首字母大写(大驼峰)
    # 对象共同的数据
    school = '清华大学'
    # 对象共同的功能
    def choice_course(self):
        print('选课功能')

# 类产生对象
obj = Student()

# 对象访问数据和功能
obj.school
obj.choice_course()
"""
在类中定义的函数 默认都必须有一个形参self
并且在对象调用该函数的时候不需要传 默认自动将对象当作第一个参数传入
"""

# 对象还可以有自己独有的数据(功能不考虑)
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)
        
obj1 = Student('jason',18,'male')
obj2 = Student('kevin',28,'female')
obj3 = Student('jack',38,'female')
# print(obj1.name)
# print(obj2.name)
# print(obj3.name)
# print(obj1.school,obj2.school,obj3.school)
obj1.choice_course()
obj2.choice_course()
obj3.choice_course()        

模块

写好的功能 拿过来直接使用即可

使用模块之前必须先导入模块
import 模块名
	# 相当于将模块中所有的代码全部执行并加载到当前环境下
from 模块名 import 字模块名1,字模块名2...
	# 指名道姓的导入指定的功能
    
模块的种类
	 1.内置模块
    	python解释器已经帮你下载好了 你直接导入使用即可
     2.第三方模块
    	别人写的模块 我们要想使用必须
        1.先基于网络下载
        2.之后才能导入使用
        
#########################如何下载模块#########################
pip3是专门用来下载第三方模块的工具

方式1  命令行模式
	pip3 install 模块名
	pip3 install 模块名==版本号  # 下载指定的版本
方式2  pycharm快捷方式
	file
    	settings
        	project interpreter 
            	点加号或者双击任意模块名
                	输入模块名 右下角勾选选择版本
						下载
                        
"""
pip3下载第三方模块的时候默认是从国外的仓库下载 速度很慢
我们可以切换仓库地址
1.百度直接搜索pip3源
2.拷贝地址
	pip3 install 模块名 -i 国内源地址
3.pycharm配置仓库地址
	参考群内截图
"""

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

作业

1.认真消化吸收今日内容
	笔记一定要自己动手结合自己的语言写一遍
	涉及到代码自己手敲一遍
2.将今日登录注册的作业改成函数版本
3.模块要自己先预习
	https://www.cnblogs.com/Dominic-Ji/articles/11109067.html#_label7
4.花一定的时间总结本周所学内容

pip3源
2.拷贝地址
pip3 install 模块名 -i 国内源地址
3.pycharm配置仓库地址
参考群内截图
“”"

当你下载模块的时候报错可能的原因有

1.pip版本过低 需要先更新
	python3 -m pip install --upgrade pip
2.网络不稳定
	timeout  换一个稳定的网络再次执行命令下载
3.当前模块需要提前做相应的环境配置
	具体结合实际情况分析(百度搜索)

##############################################################


### 作业

```python
1.认真消化吸收今日内容
	笔记一定要自己动手结合自己的语言写一遍
	涉及到代码自己手敲一遍
2.将今日登录注册的作业改成函数版本
3.模块要自己先预习
	https://www.cnblogs.com/Dominic-Ji/articles/11109067.html#_label7
4.花一定的时间总结本周所学内容
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值