随机抽奖程序_016 内置模块,做一个抽奖程序

之前我们学过 sleep 函数,使用这个函数可以让程序暂停几秒钟,但是,使用这个函数需要导入 time 模块。那么模块是什么呢?

在 Python 开发过程中,随着程序代码越写越多,写在一个文件里的代码就会越来越长,越来越不容易维护。

为了让代码方便维护,我们将代码进行分类,分别放到不同的文件里。这样,所有的代码都按照一定的规则分布在各个文件里,需要使用的时候只要导入相应的文件即可。在 Python 中,这样的文件被称之为模块(Module)。

具体模块是怎么开发的,我们下一节再说。这节我们来了解一些 Python 系统自带的一些模块,又叫内置模块。

之前我们学过的 time 模块,就是内置模块中的一个。time 模块除了 sleep 函数,还有获得当前时间和获得时间戳的函数:

6304cc0d5a6ac05be76a701a8dae4cbf.png

拷贝代码试一试:

import time# 输出当前时间print(time.ctime())# 输出时间戳print(time.time())# 暂停 3 秒钟time.sleep(3)# 再来一遍print(time.ctime())print(time.time())

大家可以看到,输出的当前时间还是很好理解的,但是时间戳却是一个很长的难以理解的数字。其实,时间戳是指格林威治时间 1970 年 01 月 01 日 00 时 00 分 00 秒起至现在的总秒数。Unix 时间戳只是一个单纯不断增长的数字,所以不会存在时区等问题,全球统一,简单便捷。

有时候我们会在一些网站上发现一些 bug(即程序漏洞,逻辑错误),比如展示的用户生日是 1970 年 1 月 1 日,或者某篇文章的发表时间是1970 年 1 月 1 日等,你会觉得不可思议,其实这就是错误的把 0 当做时间戳存进了数据库。可见,在数据存储的时候,日期和时间一般都是存时间戳的。

datetime 模块是跟 time 相似的一个模块,不过功能更加强大一些,我们来做个示例:

37ce35c4cd1b7ddbee77d1d7bf8ccba9.png

拷贝代码试一试:

# datetime 文件中有多个模块,所以导入的时候,用 from ... import ... 的格式from datetime import datetime, timedelta# 获取当前时间print(datetime.now())# 将时间戳转换成时间print(datetime.fromtimestamp(1607250163.3933873))# 获得当前时间减去 5 天的时间print(datetime.now() - timedelta(days=5))# 获得当前时间减去 5 周的时间print(datetime.now() - timedelta(weeks=2))# 获得当前时间加上 2 小时的时间print(datetime.now() + timedelta(hours=2))# timedelta 函数支持多个参数,比如把分钟,秒,毫秒,微秒都放进去print(datetime.now() + timedelta(minutes=2, seconds=-200))print(datetime.now() + timedelta(days=1, milliseconds=-200, microseconds=-100))

当然,datetime 模块和 time 模块的功能并不止这些,大家可以通过百度去了解更多。一定要多了解,多练习。

下面我们再来了解一下比较常用的 random 模块和 math 模块。

random 模块是用来生成随机数的工具,常用的函数示例:

b7bf592b1b2b321f21adc19c6e917f1a.png

拷贝代码试一试:

# 导入 random 模块import random# 随机生成 0-1 之间的浮点数,包括 0,不包括 1print(random.random())# 随机生成 0-5 之间的整数,包括 0 和 5print(random.randint(0, 5))# 随机生成 0-5 之间的浮点数,包括 0 和 5print(random.uniform(0, 5))# 从非空序列中随机返回一个元素print(random.choice([1, 2, 3]))

我们可以根据上面的函数调用方式,来做一个简单的抽奖程序:

1fdbbd4f487979cbf3c3e049440dd5bc.png

拷贝代码试一试:

# 来搞一个抽奖程序import random# 前来抽奖的人someone = ["路人甲", "路人乙", "路人丙"]# 自己人friends = ["暖场A", "暖场B"]# 抽奖,让自己人被抽中的概率是其他人的二倍print(random.choice(friends*2 + someone))

上面的程序,虽然给了自己人一些“照顾”,但是大奖还是被路人甲给拿走了,看来运气也是一种实力啊。不过大家一定要理解一下这里的“照顾”是什么原理,以后说不定会用上。

下面我们来了解一些 math 模块常用的方法:

67dc48c33141f4edd52c7b8dacbcd176.png

拷贝代码试一试:

import math# 向上取整print(math.ceil(2.3))print(math.ceil(2.9))# 向下取整print(math.floor(2.3))print(math.floor(2.9))# 取平方根print(math.sqrt(4))# 数学常数 πprint(math.pi)# 数学常数 eprint(math.e)

更多的 math 模块方法请参考官网教程:

https://docs.python.org/zh-cn/3/library/math.html

本节学习的内置模块都是 Python 中众多模块的一部分,以后大家用到更多的话,需要靠百度来自行学习。

今天我们来两个作业,第一个是去百度查一下如何给列表中的元素随机排序(当然是用 random 中的某个函数),并写一个实例。

第二个作业是为你们公司写一个抽奖程序,并设置每个人被抽中概率的权重,普通员工一倍权重,领导二倍权重,对公司有特殊贡献的三倍权重,你自己五倍权重。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值