PythonDay5Advance

函数和模块

  • main函数要有,用户自己选择要做的功能,根据选择调用不同的函数
  • 用户注册的信息需要使用一个文件存储,登录需要判断用户是否存在,密码是否正确
  • 注册的时候,需要发送邮件

内置函数

  • 数学类函数

    • abs() 求绝对值
    n = -12
    print(abs(n))
    • sum() 求和 字符串类型的元素不行
    list1 = [11,22,33,44,55]
    res1 = sum(list1)
    print(res1)
    • divmod() 传入两个数值,前一个除以后一个,得到两个值:一个商,一个是余数
    s, y = divmod(16, 5)
    print(s)
    print(y)
    • round() 四舍五入
    n = 12.765
    print(round(n,2)) # 12.77
    • pow 求幂次方
    print(pow(2,3))
  • 聚合类函数

    • max() 求最大值
    list1 = [123,53,225,1123,52,5,3,14]
    res1 = max(list1)
    print(res1)
    • min 求最小值
    list1 = [123,53,225,1123,52,5,3,14]
    res1 = min(list1)
    print(res1)
    • all 判断一个列表中是否出现一个False
    # 只要存在一个元素转bool类型结果是False,all()的结果就是False
    list1 = [12,45,124,'','hello',12.34]
    print(all(list1))
    • any 判断一个列表中是否出现一个True
    # 只要存在一个元素转bool类型结果是True,all()的结果就是True
    list1 = [12,45,124,'','hello',12.34]
    print(any(list1))
  • 和进制相关的函数

    • 二进制

    bin() 将十进制的值转二进制

    print(bin(136)) # 0b10001000

    int() 将某一种进制转10进制

    print(int('0b10001000',2))
    • 八进制

    oct() 将十进制转八进制

    print(oct(136)) # 0o210
    • 十进制

    整数默认都是十进制

    • 十六进制

    hex() 将十进制转16进制

    print(hex(136)) # 0x88
  • 字符类函数

    • ord() 将一个字符转成ASCII码数值

      • '0' - 48
      • 'A' - 65
      • 'a' - 97
      print(ord('0'))
      print(ord('A'))
      print(ord('a'))
    • chr() 将数值转成对应的ASCII码字符

    print(chr(97))
  • 类型转换相关函数

    • int()
    • str()
    • bool()
    • list()
    • dict()
    • tuple()
    • set()
    • bytes()
# s1 = '中国'
# b1 = s1.encode('UTF-8')
# print(b1, type(b1))
b2 = bytes('中国','UTF-8')
print(b2)
  • 获取输出类函数

    • input()
    • print()
    • len()
    • open()
    • 获取索引和元素
    list1 = [1,2,3,4]
    for i,j in enumerate(list1):
    print(i,j)
    • id() 获取对象的地址值
    • callable() 判断一个变量是否是一个函数
    list1 = [1,2,3,4]
    def fun1():
    pass
    print(callable(fun1))
    • sorted() 排序

      list1 = [34,12,5,12,344,53]
      print(f"list1:{list1}")
      list2 = sorted(list1)
      print(f"list1:{list2}")
      # list1:[5, 12, 12, 34, 53, 344]

    自定义排序依据:

    list1 = ['小虎:1007', '黄沪生:1009', '查镕贤:1001', '黄涛:1004', '方直:1002']
    def fun1(e):
    return int(e.split(':')[1]) list2 = sorted(list1, key=fun1)
    print(f"list1:{list2}")
    • zip() 将两个序列中的元素一一对应

      list1 = [1001, 1002, 1003, 1004, 1005]
      list2 = ['小虎', '黄沪生', '查镕贤', '黄涛', '方直']
      for i,j in zip(list1,list2):
      print(f"学号:{i}, 姓名:{j}")

函数生成式

python中提供了一个关键字可以让我们在函数中使用 yield

def fun1():
yield 1
yield 2
yield 3
yield 4
yield 5 res1 = fun1()
print("hello world")
print(res1.__next__()) # 若干行代码后
print(res1.__next__())

有yield关键字的函数,结果是可以使用for循环的

def fun1():
print("hello 1")
yield 1
print("hello 2")
yield 2
print("hello 3")
yield 3
print("hello 4")
yield 4
print("hello 5")
yield 5 res1 = fun1()
for i in res1:
print(i)
print("-----------") def fun1():
for i in range(1,11):
yield i res1 = fun1() for i2 in res1:
print(i2)
print("-----------")

模块

简单理解为就是一个.py后缀的一个文件

  • 内置模块
  • 第三方模块
  • 自定义模块

模块导入的方式

  • import 直接将一个模块导入进来

    import day06.utils.login_tools as t # 导入login_tools模块并起了一个别名叫做t
  • from xxx import xxx 从一个模块中,导入具体的工具

    from lxml import etree
    from day06.utils.login_tools import rand_yzm # 从模块login_tools中导入某一个函数
    from day06.utils.login_tools import rand_yzm,send_email # 一次从模块中导入多个
    from day06.utils.login_tools import * # 导入模块中所有的内容
    from day06.utils.login_tools import rand_yzm as t1 # 导入模块中的函数并重新命名
  • 注意: 切记,自己定义的模块名不要和内置或第三方的模块名重名!!!!!

内置模块random的学习

  1. 理论上,python模块中,任意一个地方都可以进行导入
  2. 但是规范上,我们开发潜规则上,将导入的部分放在python模块文件最开始的位置编写
  • randint() 随机生成一个范围内的整数

    n = random.randint(1000,2000)
    print(n)
  • uniform() 随机生成一个范围内的小数

    n = round(random.uniform(0, 1),2)
    print(n)
  • choice() 随机抽取列表中的一个元素

    res1 = random.choice(list1)
    print(res1)
    print(list1)
  • sample() 随机抽取列表中若干个元素

    list1 = ['张三','李四','王五','赵六','王麻子','小李子']
    # res1 = random.choice(list1)
    # print(res1)
    # print(list1)
    n = random.sample(list1,2)
    print(n, type(n))
  • shuffle() 随机打乱列表中的元素

    list1 = ['张三','李四','王五','赵六','王麻子','小李子']
    # res1 = random.choice(list1)
    # print(res1)
    # print(list1)
    # n = random.sample(list1,2)
    # print(n, type(n))
    random.shuffle(list1)
    print(f"list1:{list1}")

练习:使用random模块以及之前学习的知识,编写一个抽奖程序。

list1 = ['小虎', '张成阳', '黄涛', '方直', '杨浩东', '黄沪生', '查镕贤'] 

jiang_xiang = [ ('一等奖', 1, 'mate70 pro'), ('二等奖', 1, '小米手环'), ('三等奖', 2, '按摩仪'), ('四等奖', 2, '京东购物卡') ]
def chou_jiang(l1):
for i, num, goods in jiang_xiang:
print(f"正在抽取{i}".center(50, '-'))
name_list = random.sample(l1,num) # 将中奖名单从原名单中删除 for n in name_list:
if n in l1:
l1.remove(n) info = f"恭喜{','.join(name_list)} 中得{i}!!!!"
yield info res1 = chou_jiang(list1)
input("开始抽一等奖....按下回车开始!")
print(res1.__next__())
input("开始抽二等奖....按下回车开始!")
print(res1.__next__())
input("开始抽三等奖....按下回车开始!")
print(res1.__next__())
input("开始抽四等奖....按下回车开始!")
print(res1.__next__())

随机推荐

  1. springboot 集成 onlyoffice 实现文档预览、编辑、pdf转化、缩略图生成

    开源地址 https://gitee.com/lboot/lucy-onlyoffice 介绍 lucy-onlyoffice是依赖于onlyoffice的springboot文档预览编辑集成解决方案 ...

  2. CSS – ellipsis and line-clamp

    前言 CSS 很早就有 build-in 方案 for 省略号 ellipsis 了. 但是只能 one line, 遇到多行的时候只能用 JS. 后来出了 line-clamp 终于把 multip ...

  3. Spirng Aop 实现自定义注解及实现

    需求:日志记录 需要记录当前用户访问的每个接口对应的前端页面功能信息 声明一个注解 @Documented @Retention(RetentionPolicy.RUNTIME) @Target({E ...

  4. 【赵渝强老师】Weblogic域和域的组成

    一.什么是Weblogic WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于Java EE架构的中间件,WebLogic是用于开发.集成.部署和 ...

  5. ZRAM的Swap功能和 SWAP分区有什么区别

    ZRAM(压缩内存块设备)和传统的SWAP分区都是Linux系统中用来增加可用内存的方法,但它们的工作原理和实现方式有很大的区别: ZRAM 压缩内存:ZRAM使用压缩算法将数据存储在内存中.这样,当 ...

  6. 使用nacos上传配置文件报错

    1.使用nacos导入配置文件报错:未读取到合法数据,请检查导入的数据文件. 对比在naocs server中导出的文件,发现是少了一级目录.需要创建一个文件夹,名称为组的名称.因为在nacos上传文 ...

  7. KubeSphere 部署 Kafka 集群实战指南

    本文档将详细阐述如何利用 Helm 这一强大的工具,快速而高效地在 K8s 集群上安装并配置一个 Kafka 集群. 实战服务器配置(架构 1:1 复刻小规模生产环境,配置略有不同) 主机名 IP C ...

  8. 云原生周刊:Harbor v2.11 版本发布 | 2024.6.17

    开源项目推荐 Descheduler Descheduler 是一个工具,可用于优化 Kubernetes 集群中 Pod 的部署位置.它可以找到可以移动的 Pod,并将其驱逐,让默认调度器将它们重新 ...

  9. 干货收藏!Calico 路由反射模式权威指南

    1. 概述 作为 Kubernetes 最长使用的一种网络插件,Calico 具有很强的扩展性,较优的资源利用和较少的依赖,相较于 Flannel 插件采用 Overlay 的网络,Calico 可以 ...

  10. 基于 CoreDNS 和 K8s 构建云原生场景下的企业级 DNS

    容器作为近些年最火热的后端技术,加快了很多企业的数字化转型进程.目前的企业,不是在使用云原生技术,就是在转向云原生技术的过程中.在容器化进程中,如何保持业务的平稳迁移,如何将现有的一些服务设施一并进行 ...