python总复习

python总复习

模块

具有一定功能的代码集合
	可以是一个py文件
		模块
	也可以是一个文件夹(里面是多个py文件)
		包

模块导入

import 。。。
	整体导入
from 。。。 import 。。。
	局部导入
as 关键字
	起别名

导入模块的本质

import aaa
第一次导入模块会执行模块内的代码产生一个该模块的名称空间
并在导入该模块的执行文件中产生一个aaa的名字指向模块的名称空间

form aaa import name
name会直接存放于当前执行文件中

os模块

可以简单地理解为操作文件和文件夹

由于不同的个操作系统之间路径分隔符不同,涉及路径拼接使用join
	os.path.join()

random随机数

import random
code = ''
n = int(input('位数>>:'))
for i in range(n):
    # 产生一个随机的数字
    random_int = str(random.randint(0, 9))
    # 产生一个随机的大写字母
    random_upper = chr(random.randint(65, 90))
    # 产生一个随机的小写字母
    random_lower = chr(random.randint(97, 122))
    # 三选一
    tmp = random.choice([random_int, random_upper, random_lower])
    code += tmp
print(code)

logging模块

日志模块,了解即可

hashlib模块

加密模块
	将明文变成密文,增加安全性
密文的长度可以反映出算法的复杂程度

json模块

序列化 json.dump
	将其他数据类型的数字转成json格式的字符串(双引号)
反序列化 json.load
	将json格式的字符串转成对应的数据类型

python基础常识

1.python解释器
	python2.X
    	python2.7但是在2020不再维护更新 只有一些老的项目还在使用
    python3.X
    	python3.9但是不推荐使用最新版本的 推荐使用python3.6
    环境变量

2.pycharm编辑器

3.变量与常量
	name = 'jyb'
    	变量的内部本质
		变量的命名规范
    	变量的命名风格
    常量在python中没有真正存在 约定俗成使用全大写作为常量

基本数据类型

基本数据类型
	整型int
    	age = 18
    浮点型float
    	salary = 11.11
	字符串str
    	引号引起来内部主要存放描述性性质的信息
    	name = 'jyb'
        name = "jyb"
        name = '''jyb'''
        name = """jyb"""
    列表list
    	中括号括起来内部可以存放多个元素 元素与元素之间逗号隔开
        元素可以是任意数据类型
        l = [11,22,33,44,55]
    字典dict
    	大括号阔起来内部可以存放多个元素 元素是K:V键值对的形式
        元素与元素逗号隔开
        	K是对v的描述性性质的信息 一般都是字符串
            v是任意数据类型
        d = {'username':'jyb','pwd':123}
    布尔值bool
    	用来表示事物对错 真假等
        	True False
        """
        当涉及到判断的时候所有数据类型都会自动转成布尔值进行判断
        	布尔值为False的数据类型
        		0 None '' [] {} 
        """
    元组tuple
    	小括号括起来内部可以存放多个元素 元素与元素之间逗号隔开
        元素可以是任意数据类型  元组相当于不可变的列表
        l = (11,22,33,44,55)
        """
        元组内元素不可修改 要注意内部到底是什么不可修改
        	l = (1,2,[11,22])
        	l[0] = 111  报错
        	l[2].append(33)  正确  (1,2,[11,22,33])
        """
    集合set
    	大括号括起来内部可以存放多个元素 元素与元素逗号隔开
        元素只能是不可变类型(数字 字符串)
        s = {1,2,3,4,5}
        """
        1.去重
        2.关系运算
        """

流程控制

"""
	在python中使用缩进来表示代码的从属关系
	并不是所有的代码都可以拥有子代码的权限
	同属于一个关键字的多行子代码必须要保持相同缩进
	缩进一般采用四个空格(windows里tab是四个空格)
	"""
	if判断
    	if 条件1:
            条件1成立执行的子代码
        elif 条件2:
            条件2成立执行的子代码
        else:
            上述条件都成立执行的子代码
    
    while循环
    	while 条件:
            条件成立执行子代码
        # break结束本层循环 	continue结束本次循环直接开始下一次循环
      
    for循环
    	for 变量名 in 容器类型:
            子代码块
        # break结束本层循环 	continue结束本次循环直接开始下一次循环
        # else循环没有被主动打断的情况下会执行
        # range方法

数据类型内置方法

"""可以借助编程工具自动提示功能查看具体的内置方法"""
    整型
    	int()
    浮点型
    	float()
    字符串
    	len()	统计长度
        strip()	 移除字符串首尾指定的字符 默认移除空格
        split()	 切割  
        replace() 替换
        upper()	 转大写
        islower() 判断是否是小写
        format()  格式化输出
        ...
    列表
    	len()	统计长度
        count()	 统计某个元素出现的次数
        append() 尾部追加元素
        insert() 按照索引指定的位置插入元素
        extend() 扩展列表
        pop()	 弹出元素
        remove() 移除元素
        sort()	 排序
        ...
    字典
    	len()	统计长度
        get()	按照key取值  key不存在不报错 返回默认None
        d[key]	按照key取值  key不存在会报错
        d[key] = value	key存在则修改 不存在则添加
        pop()	弹出键值对 拿到值
    集合

文件处理

文件处理
    读写模式
    	r	只读
        w	只写
        a	只追加
    操作模式
    	t	文本模式
        	默认的操作模式
            	1.只能操作文本文件
            	2.需要只读encoding参数
        b	二进制模式
        		1.可以操作任意类型的文件
            	2.不需要指定encoding参数

函数

函数的语法结构
    	def 函数名(参数1,参数2):
            '''函数注释'''
            函数体代码
            return 返回值
    函数就类似于是工具,必须先定义后使用
    	函数名(需要参数则传参数)
  	函数的返回值
    	return
    		1.返回值
        	2.结束函数的运行
    函数的参数
    	两大分类
        	形参
            	函数在定义阶段括号内写的变量名
            实参
            	函数在调用阶段括号传入的数据(值)
            函数调用阶段临时绑定
        多种类型
        	1.位置参数
            	按照位置顺序一一传值 不能多不能少
            2.关键字参数
            	指名道姓的给形参传值
            3.默认参数
            	函数在定义阶段就可以给形参赋值 
                后续调用不传默认使用定义阶段的值 传了则使用传了的
            4.可变长参数
            	在函数定义阶段形参中使用*和**来接收调用阶段传入的多余
                位置参数和关键字参数分别组织成元素和字典赋值给两个符号
                后面的变量名
            """
            *和**在实参中也有一定的功能
            	*可以将列表内多个元素变成位置参数一一传入
            	**可以将字典内多个键值对变成关键字参数传入
            """

注册登陆功能

import os
import hashlib
import json


def get_info():
    username = input('username>>>:').strip()
    password = input('password>>>:').strip()
    if len(username) == 0 or len(password) == 0:
        print('用户名或密码不能为空')
        return False
    return username, password


def auth_user(username):
    # 1.1 先获取用户数据文件夹下面所有文件名称
    all_list = os.listdir(r'用户数据')  # ['jyb','tony']
    # 1.2 循环比对文件名与用户名是否重复
    if username in all_list:
        return True
    return False


def get_pwd(password):
    md5 = hashlib.md5()
    md5.update(password.encode('utf8'))
    hash_pwd = md5.hexdigest()
    return hash_pwd


def write_data(username, hash_pwd):
    user_dict = {'username': username, 'password': hash_pwd}
    file_path = os.path.join(r'用户数据', username)
    with open(r'%s' % file_path, 'w', encoding='utf8') as f:
        json.dump(user_dict, f)


def read_data(username):
    file_path = os.path.join(r'用户数据', username)
    with open(r'%s' % file_path, 'r', encoding='utf8') as f:
        json_data = json.load(f)
    return json_data


def register():
    res = get_info()
    if not res: return
    # 解压赋值 获取原生的用户名和密码
    username, password = res
    # 1.先校验当前用户名是否已存在
    is_exist = auth_user(username)
    if is_exist:
        print('用户名已存在')
        return
        # 2.对密码加密处理
    hash_pwd = get_pwd(password)
    # 3.构造用户数据并写文件
    write_data(username, hash_pwd)
    print("%s注册成功" % username)


def login():
    res = get_info()
    if not res: return
    # 解压赋值 获取原生的用户名和密码
    username, password = res
    # 1.先判断用户名是否存在
    is_exist = auth_user(username)
    if not is_exist:
        print('用户名不存在')
        return
        # 2.用户存在则校验密码是否一致
    input_pwd = get_pwd(password)
    user_dict = read_data(username)
    real_pwd = user_dict.get('password')
    # 3.比对两者加密之后的密码是否一致
    if input_pwd == real_pwd:
        print("登录成功")
    else:
        print('密码错误')


func_dict = {'1': register, '2': login}
# 先判断存储用户数据的文件夹是否存在 不存在则创建
if not os.path.exists(r'用户数据'):
    os.mkdir(r'用户数据')

while True:
    print("""
    1.注册
    2.登录
    """)
    choice = input('请选择您想要执行的功能>>>:')
    if choice in func_dict:
        func_name = func_dict.get(choice)
        func_name()
    else:
        print('当前没有该功能 请输入正确的功能序号')
posted @ 2021-08-29 21:34  wddwyw  阅读(65)  评论(0编辑  收藏  举报