PythonDay5Advance
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的学习
- 理论上,python模块中,任意一个地方都可以进行导入
- 但是规范上,我们开发潜规则上,将导入的部分放在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__())
随机推荐
- QT疑难杂症之QML程序中如何使用文件系统模型QFileSystemModel?
简介 本文介绍了 QML程序中如何使用树状控件TreeView展示QT文件系统模型QFileSystemModel中的数据,并给出了两种实现模式. 目录 QML程序中使用文件系统模型的代码 树状控件自 ...
- 一条 SQL 语句在 MySQL 中是如何执行的?
本篇文章会分析下一个 SQL 语句在 MySQL 中的执行流程,包括 SQL 的查询在 MySQL 内部会怎么流转,SQL 语句的更新是怎么完成的. 在分析之前我会先带着你看看 MySQL 的基础架构 ...
- [OI] 二项式期望 DP
OSU OSU yet Another OSU yet yet Another OSU OSU 的题目是这样的:有一些相邻的块,给定每一个块的联通概率,每个连通块对答案有 \(size^{3}\) 的 ...
- request和response请求包中的各项解释
Request Response
- Winrar 免广告、去评估版的解决办法 ( 实测有效 )
事件起因: 在打开 Winrar 压缩软件的时候,总是会弹出广告弹窗,而且上面还是显示评估版本. 解决办法: 1. 正常安装 Winrar 软件 2. 安装破解软件--Restorator http: ...
- Android Studio自带Profiler工具内存泄露分析步骤
1.运行需要检测内存泄露的程序 这里以"com.example.opengltest"程序为例. 2.点击Profiler按钮 3.点击SESIONS "+"号 ...
- Java日期时间API系列31-----Jdk8中java.time包中的新的日期时间API类,时间戳的获取方式对比、转换和使用。
时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到.Java中本来已经有相关获取时间戳的方法,Java8后增加新的类In ...
- js的作用域有哪些 and 他们的特点
全局作用域:是所有代码的执行环境,比如script标签里所有的代码 或 独立的js 文件: 局部作用域:是函数内部代码的执行环境: 块级作用域:是 {} 内的代码执行环境:
- Kali && Debain 防火墙规则
Kali && Debain 防火墙规则 查看防火墙规则 iptables -L -n -v iptables -L -n -v 增加防火墙规则:开放指定的端口 iptables -A ...
- Edge缓存清理操作说明
1. 打开Edge浏览器 2. 点击屏幕右上角三个点的按钮 3. 在出现的菜单里面选择"设置" 4. 在出现页面里面左侧选择"隐私.搜索和服务",然后右侧点击& ...