首页 > 其他分享 >模块1

模块1

时间:2024-01-24 17:11:41浏览次数:15  
标签:__ users res1 list1 a1 模块 print

函数与模块

课程安排

  • python
  • linux
  • mysql
  • 项目+可视化
  • java
  • redis
  • clickhouse
  • hadoop
  • hive
  • zookeeper
  • hbase
  • 数据采集
  • 项目(数据仓库+hive)
  • 阿里云
  • 项目(数据仓库+阿里云)
  • scala
  • spark
  • flink
  • 6个组件
  • 项目(2-3)
  • 模拟面试

课程回顾与完善

import time
import random

'''
定义一个函数,展示菜单栏
'''


def random_code():
    number = random.randint(100000, 999999)
    return number


# 定义一个函数发送邮箱
def send_email(receiver_email, info):
    # zyxkyiufoghagije
    import smtplib
    from email.mime.text import MIMEText
    from email.header import Header
    msg_from = '1165872335@qq.com'  # 发送方邮箱
    passwd = 'zyxkyiufoghagije'  # 填入发送方邮箱的授权码(填入自己的授权码,相当于邮箱密码)
    msg_to = receiver_email  # 收件人邮箱
    # msg_to = ['','','']

    subject = '数加系统'  # 主题
    content = info
    # 生成一个MIMEText对象(还有一些其它参数)
    msg = MIMEText(content)
    # 放入邮件主题
    msg['Subject'] = subject
    # 也可以这样传参
    # msg['Subject'] = Header(subject, 'utf-8')
    # 放入发件人
    msg['From'] = msg_from
    # 放入收件人
    # 通过ssl方式发送,服务器地址,端口
    s = smtplib.SMTP_SSL("smtp.qq.com", 465)
    # 登录到邮箱
    s.login(msg_from, passwd)
    # 发送邮件:发送方,收件方,要发送的消息
    s.sendmail(msg_from, msg_to, msg.as_string())
    print('验证码发送成功!!')


def init():
    print('欢迎进入数加登录系统'.center(50, '-'))
    print('''1.注册\n2.登录\n3.查看用户信息\n
    ''')


# 写一个公共的获取所有用户的信息,返回一个用户字典
def get_all_users():
    # 新建一个字典,存储用户信息
    users_dict = {}

    # 打开文件
    with open('data/users.txt', mode='r', encoding='UTF-8') as f:
        content = f.read()  # 读取全文的内容
        user_list = content.split('\n')  # ['root,qwerdf', 'xiaohu,123456', '']
        # 最后一个是空字符串
        user_list.pop(-1)  # ['root,qwerdf', 'xiaohu,123456']
        # 遍历列表得到字典
        for user in user_list:
            # 'root,qwerdf'
            users_dict[user.split(',')[0]] = user.split(',')[1]

    return users_dict


def register():
    print('-' * 50)
    print('欢迎注册!!')
    while True:
        name = input('请输入您的用户名:')
        # 验证用户是否重复
        users_dict = get_all_users()
        if name not in users_dict:
            break
        print('*******************')
        print('该用户名已经被使用!!')
        print('*******************')

    password = input('请输入您的密码:')
    # TODO: 自己加邮箱发送验证码的功能
    user_email = input('请输入您的邮箱: ')
    # 生成验证码
    yzm = random_code()
    # 调用发送验证码的功能,发送验证码
    send_email(user_email, f'【数加科技】您的验证码是: {yzm}, 在60秒之内使用,请勿泄露给他人。')
    yzm_code = input('请输入验证码: ')
    if yzm_code != str(yzm):
        print('注册失败!!')
        return None
    with open('data/users.txt', 'a', encoding='UTF-8') as f:
        f.write(f'{name},{password}\n')
    time.sleep(3)
    print(f'{name}用户注册成功!!')


def login():
    print('欢迎进入数加登录页面'.center(50, '-'))
    username = input('请输入要登录的用户名: ')
    # 打开文件,读取用户数据
    users_dict = get_all_users()
    if username not in users_dict:
        print('该用户不存在,请先注册!!')
        return None

    password = input('请输入密码: ')
    if password != users_dict.get(username):
        print('登录失败!!')
        return None
    print('登录成功!!')


def show():
    print('当前系统用户信息'.center(50, '-'))
    users_dict = get_all_users()
    for user in users_dict.items():
        print(f'用户名:{user[0]}, 密码:{user[1]}')


if __name__ == '__main__':
    # 列出菜单
    init()
    dict1 = {
        '1': register,
        '2': login,
        '3': show
    }

    flag = True
    while flag:
        choice = input('请输入您的选择(1/2/3): ')
        if choice not in dict1:
            print('没有您所选的选项!重新输入')
            continue
        fun1 = dict1.get(choice)
        fun1()
        flag = False

1、内置函数

python内部也提供了大量的函数,可以让我们直接在程序中使用

db61bb40f63980cd71cb1783678afe1

第一类函数(数学运算相关的) 5个

  • abs() 求绝对值
a1 = abs(-10)
print(a1)  # 10
  • pow() 次方
a1 = pow(2,3)  # 计算2的3次方
print(a1)  # 8
  • sum() 求和
list1 = [1, 2, 3, 4, 5]
res1 = sum(list1)
print(res1)
  • divmod() 两个数相除得到一个商,一个余数
a1, b1 = divmod(3, 5)
print(a1)  # 商
print(b1)  # 余数
  • round() 四舍五入保留小数
a1 = round(1.2367538,2)
print(a1)

第二类函数(和聚合相关)

  • min() 最小值
a1 = min([21,3,55,62,3,1])
print(a1)
  • max() 最大值
a1 = max([21,3,55,62,3,1])
print(a1)
  • all 判断一个序列中,是否都是True,
0
''
()
{}
[]
0.0

list1 = [1,2,3,0,5]
res1 = all(list1)
print(res1)  # False
  • any 只要有一个是True就可以
list1 = [1,2,3,0,5]
res1 = any(list1)
print(res1)  # True
list1 = [0.0,1,[],0,()]
res1 = any(list1)
print(res1)  # True

第三类函数(和进制相关)

'0b111011'  # 二进制
'0100'  # 八进制
'100'   # 十进制
'0x100' # 十六进制
  • 十进制、二进制

    • 十进制---> 二进制
    a1 = bin(100)
    print(a1)
    
    • 二进制---> 十进制
    a1 = int('0b1100100',2)
    print(a1)
    
  • 十进制、八进制

    • 十进制-->八进制
    a1 = oct(100)
    print(a1)  # 0o144
    
    • 八进制-->十进制
    res1 = int('0o144',8)
    print(res1)
    
  • 十进制、十六进制

    • 十进制-->十六进制
    a1 = hex(100)
    print(a1) # 0x64
    
    • 十六进制-->十进制
    res1 = int('0x64',16)
    print(res1)
    

作业1:将自己的IP地址,转换成二进制的形式 (1、将IP地址转2进制 2、传二进制的ip地址转点分十进制)

win+R cmd ipconfig

第四类函数(字符相关)

  • ord() 获取对应的ASCII码值
a1 = ord('A') 
print(a1)
  • chr() 获取ASCII码值对应的字符
a1 = chr(65)
print(a1)

作业2:生成验证码,包含数字和字母

第五类函数(转型相关)

  • int()

  • str()

  • bool()

  • list()

  • tuple()

  • dict()

  • bytes()

name = '小虎'
res1 = name.encode('UTF-8')
print(res1,type(res1))  # b'\xe5\xb0\x8f\xe8\x99\x8e' <class 'bytes'>
res2 = bytes('小虎',encoding='utf-8')
print(res2)

第六类函数(获取属性数据相关)

  • len()
  • print()
  • input()
  • open()
  • range()
  • hash 计算一个值的哈希值(计算存储位置的)
# 相同的数据,哈希值是一样的
print(hash('ABC'))
print(hash('ABC'))
  • type() 查看元素的数据类型的
# 数据类型是可以直接使用==进行比较
  • callable 判断一个变量是不是一个函数,判断是否可以执行
a1 = 'abc'
res1 = callable(a1)
print(res1) # False
def fun1():
    print('hello world')
    
res1 = callable(fun1)
print(res1) # True
  • enumerate() 获取序列中的索引以及元素值
list1 = [11, 22, 33, 44, 55]
for index, value in enumerate(list1):
    print(f'{index}.{value}')
  • sorted() 排序 产生排序后的新列表
list1 = [11, 2, 14, 45, 16]
res1 = sorted(list1)
print(res1)  # [2, 11, 14, 16, 45]
print(list1) # [11, 2, 14, 45, 16]

name_list = ['小虎:1001', '丁义杰:1006', '李超超:1003', '温文涛:1002']
# print(name_list)

def get_key(e):
    return int(str(e).split(':')[1])


res1 = sorted(name_list, key=get_key)
print(res1)

2、函数生成器

def fun1(a1):
	print(a1)
	return a1
fun1()

def fun2(a1):  # [11,22,33,44]
    print('hello1')
    yield a1[0]
    print('hello2')
    yield a1[1]
    print('hello3')
    yield a1[2]
    print('hello4')
    yield a1[3]
    # 这里的代码需要再调用一次__next__()函数,但是__next__()必须要取yield后面的值,已经没有yield的了,所以报错
    # print('hello5')  


res1 = fun2([11, 22, 33, 44])
# print(res1)

a1 = res1.__next__()  # yield
print(a1)
a2 = res1.__next__()
print(a2)
a3 = res1.__next__()
print(a3)
a4 = res1.__next__()
print(a4)
a5 = res1.__next__() # StopIteration
print(a5)

def fun2(a1):  # [11,22,33,44]
    print('hello1')
    yield a1[0]
    print('hello2')
    yield a1[1]
    print('hello3')
    yield a1[2]
    print('hello4')
    yield a1[3]
    # 这里的代码需要再调用一次__next__()函数,但是__next__()必须要取yield后面的值,已经没有yield的了,所以报错
    # print('hello5')  


res1 = fun2([11, 22, 33, 44])# 函数生成器可以使用for循环代替调用__next__()函数
for i in res1:
    print(i)

这个东西具体有什么用呢?

需求:在不创建列表的前提下,创建1000w个数字

def fun1():
    for i in range(1,11):
        yield i

3、模块

  • 自定义模块 py文件
  • 内置模块 time random ...
  • 第三方模块 requests lxml ...

3.1 导入模块的方式

  • import xxx 直接将大的模块进行导入
  • from xxx import xxx 从大的模块中导入小的功能
  • as 的方式,对导入的东西的重命名

将来开发的时候,将功能的功能放入到一个模块中,其他的模块要想使用该功能,就必须导入

3.2 易错点!!!!!!!

# 将来定义模块名字的时候,千万不要与内置模块或者与第三方模块重名,会导致功能用不了
random.py

import random

res = random.randint(1000, 9999)
print(res)

image-20240111155934987

4、常用内置模块

4.1 random

import random

# 获取随机的整数
res = random.randint(10, 20)  # [10,20]
print(res)

# 获取随机的小数
res2 = round(random.uniform(10, 20), 2)
print(res2)

# 从列表中随机获取一个元素
list1 = [11, 22, 33, 44, 55, 66, 77, 88]
res3 = random.choice(list1)
print(res3)

# 从列表中随机获取n个元素
list1 = [11, 22, 33, 44, 55, 66, 77, 88]
res3 = random.sample(list1,2)
print(res3)

print('-----------------------------')
# 随机打乱顺序
list1 = [11, 22, 33, 44, 55, 66, 77, 88]
random.shuffle(list1)
print(list1)

使用random模块编写一个抽奖小程序

# 使用列表推导式生成一个列表
users_list = [f'学生-小虎{i}' for i in range(13)]
print(users_list)

# 设置奖项以及人数
data_list = [
    ('特等奖', 1, '华为问界汽车一辆'),
    ('一等奖', 1, '10万元现金以及问界汽车10元优惠券'),
    ('二等奖', 3, '华为mate60 pro'),
    ('三等奖', 5, '华为手表')
]


def choujiang(data_list):
    # 开始抽奖
    for grade, counts, goods in data_list[::-1]:
        print(f'开始抽{grade}'.center(50, '-'))
        res_list = random.sample(users_list, counts)

        # 将中奖的人从列表中删除
        for user in res_list:
            users_list.remove(user)

        info = f'恭喜{",".join(res_list)}!! 每人获得{goods}奖品!!'
        yield info

res = choujiang(data_list)
a1 = res.__next__()
print(a1)
a1 = res.__next__()
print(a1)
a1 = res.__next__()
print(a1)
a1 = res.__next__()
print(a1)

标签:__,users,res1,list1,a1,模块,print
From: https://www.cnblogs.com/peculiar/p/17970566

相关文章

  • Logging模块的使用
    一、日志等级Logging中的日志等级如下:importloggingimportlogging#设置打印日志的级别,level级别以上的日志会打印出#level=logging.DEBUG、INFO、WARNING、ERROR、CRITICALdeflog_testing():#此处进行Logging.basicConfig()设置,后面设置无效logging.ba......
  • requests模块和网站的请求(get、post请求)
    get请求,传参数paramsresponse=requests.get(url,headers=headers,params=params)importrequests#s最后有没有问号结果都一样url='https://www.baidu.com/s?'#请求头是一个字典headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)App......
  • python安装包(模块)的八种方法
    1.使用easy_installeasy_install这应该是最古老的包安装方式了,目前基本没有人使用了。下面是easy_install的一些安装示例#通过包名,从PyPI寻找最新版本,自动下载、编译、安装$easy_installpkg_name#通过包名从指定下载页寻找链接来安装或升级包$easy_install-fhttp:/......
  • 深入解析网页结构解析模块BeautifulSoup
    引言在当今的信息化时代,网络爬虫已经成为获取数据的重要手段。而BeautifulSoup作为Python中常用的网页结构解析模块,在数据抓取过程中扮演着不可或缺的角色。本文将对BeautifulSoup进行深入解析,探讨其工作原理、使用方法和最佳实践,以期为读者提供有价值的参考。一、BeautifulSoup概......
  • 若依框架解读(微服务版)——2.模块间的调用逻辑(ruoyi-api模块)(OpenFeign)(@innerAuth)
    模块之间的关系我们可以了解到一共有这么多服务,我们先启动这三个服务其中rouyi–api模块是远程调用也就是提取出来的openfeign的接口ruoyi–commom是通用工具模块其他几个都是独立的服务ruoyi-api模块api模块当中有几个提取出来的OpenFeign的接口分别为文件,日志,用户服务......
  • BOSHIDA DC电源模块的特点及应用案例分享
    BOSHIDADC电源模块的特点及应用案例分享DC电源模块是一种可以将交流电转换为直流电的设备,具有以下特点: 1.高效稳定:DC电源模块采用高效稳定的电源转换技术,可以将输入的交流电转换为输出的稳定直流电,并且具有高效能的转换效率。2.多功能性:DC电源模块通常具有多种输出电压和电......
  • 基于ESP32C3与RS485模块实现Modbus通讯
    参考网页:https://lingshunlab.com/book/esp32/esp32-use-rs485-model-to-modbus-by-library-emodbushttps://www.elecfans.com/d/2040842.htmlMODBUS是一种广泛使用的工业通信协议,它允许通过串行线路在不同设备之间进行通信和数据交换。RS485模块是一个在ESP32上实现MODBUS协......
  • Unity3D 游戏服务端哪些模块可以做成无状态详解
    Unity3D游戏服务端是指在使用Unity3D引擎开发的游戏中,负责处理与游戏客户端的通信以及游戏逻辑的服务器端。在设计游戏服务端时,有一种常见的设计模式叫做无状态模式。本文将详细介绍Unity3D游戏服务端哪些模块可以做成无状态,并给出技术详解和代码实现。对啦!这里有个游戏开发交流......
  • python3使用socket模块实现简易syslog服务器
    废话不多说直接上代码1importsocket2importtime345defsocket_bind(server_socket,host,port=514,max_retries=5):6retries=07whileretries<max_retries:8try:9server_socket.bind((host,port))10......
  • 模块,包,库,框架的使用
    一、模块Module 模块是一个变量、数组、函数和类的集合。另外,模块是一种以.py为后缀的文件,用于表示程序的一部分,模块的名称是该.py文件的名称。模块的名称**作为一个全局变量__name__**的取值可以被其他模块获取或导入。 模块的导入通过ipmort来实现,导入模块的方式如下: i......