2020-07-17 Python学习笔记22 内置模块

2020-07-17  本文已影响0人  建渐升辉

一些关于自己学习Python的经历的内容,遇到的问题和思考等,方便以后查询和复习。

声明:本人学习是在扇贝编程通过网络学习的,相关的知识、案例来源于扇贝编程。如果使用请说明来源。

练习:打印当前时间

用 time 和 datetime 模块。要求:

打印现在的时间;

暂停 3 秒;

再次打印现在的时间。

import time  #最初忘记导入时间了,结果停3秒报错,说没有定义

from datetime import datetime

print('现在的时间是:%s' %datetime.now()) #最初我只是要求打出现在的时间

time.sleep(3)   # time和datetime都是内置模块,使用需要导入

print('现在的时间是:%s' %datetime.now())  #字符串格式化输出

现在的时间是:2020-07-10 16:17:02.336350

现在的时间是:2020-07-10 16:17:05.340135

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

内置函数和常量的网址

练习:随机选择函数

刚刚我们讲过 random.choice() 方法可以从非空序列中随机返回一个元素,但条条大路通罗马,你能在不使用 random.choice() 的情况下,实现一个自己的 choice() 函数吗?

提示:随机返回一个元素只需随机生成一个范围在 0 到序列长度减 1 的索引,然后通过该索引获取对应的元素即可。

import random

choice = []

def choice(seq):

  #写一个你自己的 choice() 函数

 global choinc

 choice = choice[random.randint(0, 4)]

print(choice(['🍉', '🍑', '🥝', '🍇']))

我定义了一个空列表,然后用choice作为变量,结果系统老是说局部变量什么什么的。总之不对。这样肯定不对,choice是变量又是列表。

import random

# 答案一

def choice(seq):

  return seq[random.randint(0, len(seq)-1)]

# 答案二(Python 官方实现方式)

def choice(seq):

  return seq[int(random.random()*len(seq))]

print(choice(['🍉', '🍑', '🥝', '🍇']))

答案其实很简单,直接返回结果就可以了

但是这个里面的逻辑我没有看懂,seq不是变量吗,加入返回的是seq[2],那么打印的是choice(seq[2])?而程序中是print(choice((['🍉', '🍑', '🥝', '🍇'] )),这二者是等同的吗?

疑问

练习:剪刀、石头、布

你肯定玩过“石头、剪刀、布”的游戏,学完了 random 模块后,我们来写一个 Python 版的“石头、剪刀、布”,然后和电脑玩一次“石头、剪刀、布”吧!

import random

choices = ['石头', '剪刀', '布']

winner = random.choice(['石头', '剪刀', '布'])

print('电脑的选择是:',winner)

your_choice = input('请输入石头、剪刀或布')

print('我的选择是:',your_choice)

这个里面比较难的,也是比较关键的是在列表中随机选择,参考文中讲解的例子,我写出随机选择的的语句。

现在的程序能显示电脑的选择、以及我的选择。如何判断输赢呢?

我有些不知所措。

看了答案,有了惊喜

答案就能根据双方的选择做出输赢判断,这个真好。

import random

choices = ['石头', '剪刀', '布']

win = [

  ['石头', '剪刀'],  # 所有可能赢的状况,每种情况是一个列表,列表中的元素是列表

  ['剪刀', '布'],     # 注意各个元素之间用英文逗号隔开

  ['布', '石头']

  ]

your_choice = input('请输入石头、剪刀或布')

if your_choice in choices:  #这是游戏的前提条件

 computer_choice = random.choice(choices) # 电脑的选择也符合要求,前提条件

  if[your_choice,

computer_choice]in win:  if 条件,还能这么用,列表在列表里

   print('你出了%s,电脑出了%s,你赢了!'% (your_choice, computer_choice))

 elif your_choice == computer_choice:

   print('你出了%s,电脑出了%s,平局!'% (your_choice, computer_choice))

 else:

   print('你出了%s,电脑出了%s,你输了!'% (your_choice, computer_choice))

else:

 print('输入有误')

先把可能的赢的情况列举出来,每种情况作为一个列表,所有列表合在一起,作为一个大的列表,所有赢的空间。

加入电脑和你的选择都在可选的范围内,这个是游戏的前提条件,然后比较

赢的情况、平局的情况和输的情况,

两个选择合在一起作为一个元组,用在输出格式化中。

最后还有输入有误的情况,这个一般可能考虑不到。

内置模块I

time 模块

time.sleep(3) 这个方法我们在第一课就见到过,它用于暂停程序的执行,参数为秒。它可以用于防止程序执行过快,比如爬取数据时降低爬取速率防止被封等。

import time #使用之前需要先导入,即使是内置模块

# 获取当前时间的 Unix 时间戳

print(time.time())

# 输出:1558329240.201314

Unix 时间戳对计算机来说稍微计算一下就知道现在是什么时间了,但对人类来说可读性就大打折扣了,所以还有对人类友好的ctime() 方法:

print(time.ctime())

# 输出:Mon May 2013:14:00 2019

datetime 模块

datetime 模块包括很多函数和类,这些函数和类均用于日期和时间的解析、格式化以及计算。老师今天只给你介绍其中的几个,更多的内容等你需要时再自行探索。

# 导入 datetime 模块中的 datetime 对象

from datetime import datetime   #导入datetime变量

# 获取当前时间

print(datetime.now())

# 输出:2019-05-2013:14:00.201314

# 将 Unix 时间戳转换成时间

print(datetime.fromtimestamp(1558329240.201314))

# 输出:2019-05-2013:14:00.201314

注意,datetime 模块里有一个同名的 datetime 类,因此我们要写成 from datetime import datetime。

datetime.now() 和 time.ctime() 类似,都是获取人类可读的时间格式,只是 datetime.now() 没有星期几的信息。

有些时候我们拿到 Unix 时间戳却不知道具体时间,可以使用 datetime.fromtimestamp() 方法来将其转换成人类可读的时间格式。

有些时候我们还要进行日期的计算,比如 5 天前是几月几号,10 天后又是几月几号等。这在 Python 中实现起来也不难,我们来看个例子:

from datetime importdatetime, timedelta

print(datetime.now() - timedelta(days=5))

# 输出:2019-05-1513:14:00.201314

timedelta() 在日期计算中很实用,上面代码中的 timedelta(days=5) 表示 5 天,用现在的时间减去 5 天就能得到5 天前的日期。同理,如果加上 5 天就能得到5 天后的日期了。

你应该注意到了,调用timedelta() 时传的是关键字参数 days=5,表示 5 天。其实除了天之外,timedelta() 还支持传入周、时、分、秒、毫秒和微秒,我们来看看这些参数名都是什么:

from datetime import datetime, timedelta

# 周(weeks)

print(datetime.now() - timedelta(weeks=2))

# 输出:2019-05-0613:14:00.201314

# 时(hours)

print(datetime.now() + timedelta(hours=2))

# 输出:2019-05-2015:14:00.201314

# 分(minutes)

print(datetime.now() + timedelta(minutes=2))

# 输出:2019-05-2013:16:00.201314

# 秒(seconds)

print(datetime.now() + timedelta(seconds=2))

# 输出:2019-05-2013:14:02.201314

# 毫秒(milliseconds)

print(datetime.now() + timedelta(milliseconds=2))

# 输出:2019-05-2013:14:00.203314

# 微秒(microseconds)

print(datetime.now() + timedelta(microseconds=2))

# 输出:2019-05-2013:14:00.201316

如果你英文还不错,这些参数对你来说肯定很简单吧!还有,timedelta() 可以支持同时传入多个参数,比如计算两个半小时前的时间:

from datetime import datetime, timedelta

print(datetime.now() - timedelta(hours=2, minutes=30))

# 输出:2019-05-2010:44:00.201314

在进行日期计算、时间计算的时候,前面都是datetime.now(),后面都是timedelta,只是时间参数变化

内置模块II

random 模块

random 模块之前也有提及,今天我们来正式学习它。从模块名称我们就能猜出它应该和 随机 有关,random 模块本身很简单,我们直接来看几个例子:

# 导入 random 模块

import random

# 随机生成0-1 之间的浮点数,包括 0,不包括 1

print(random.random())

# 输出:0.878022926133

# 随机生成 0-5 之间的整数,包括 0 和 5

print(random.randint(0,

5))

# 输出:3

# 随机生成 0-5 之间的浮点数,包括 0 和5

print(random.uniform(0, 5))

# 输出:4.86369987147

# 从非空序列中随机返回一个元素

print(random.choice([1, 2, 3]))

# 输出:2

random.random() 可以生成 0-1 之间的随机小数,包括 0,不包括 1。这是最基本的生成随机数的方法,同时 random 模块还帮我们封装了一些更好用的方法——random.randint()、random.uniform() 和 random.choice()。

random.randint(m, n) 可以生成一个随机整数,该整数大于等于 m,小于等于 n。random.uniform(m,

n) 也是类似的,只不过生成的是随机小数,该小数大于等于 m,小于等于 n。

注意:random.randint() 和 random.uniform() 生成的随机数是包含后面一个数的,这点和 random.random() 还有分片不同。

random.choice() 可以从一个非空序列中随机返回一个元素,常常用于抽奖:

import random

winner = random.choice(['小贝', '闻闻', '黄帮主'])

print('大奖得主是' +winner)

# 输出:大奖得主是黄帮主

需要注意的是,参数一定得是非空序列,否则将会报错:

import random

random.choice([])

# 报错:IndexError:Cannot choose from an empty sequence

random.shuffle() 用于将序列的所有元素随机排序。

math 模块

math 模块从名称也可知是和数学相关的,在做一些数学计算时会用到,这里简单介绍一下:

# 导入 math 模块

import math

# 向上取整

print(math.ceil(2.3))

# 输出:3

# 向下取整

print(math.floor(2.3))

# 输出:2

# 取平方根

print(math.sqrt(4))

# 输出:2.0

# 数学常数π

print(math.pi)

# 输出:3.14159265359

# 数学常数e

print(math.e)

# 输出:2.71828182846

上面这些方法是比较常用的,同时 math 模块里还有很多其他方法和常数。对数学计算有需要的同学可以查看文档了解更多,文档地址是:

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

自学模块

讲了这么多模块及其用法,你肯定会觉得:要记住这么多东西真是太难了!其实,像常用模块、常用函数之类的并不需要花大量时间去记,忘记了就查,用多了之后就不经意间记住了。

除了在学习交流群中寻求小伙伴的帮助外,我希望你能先独立思考、培养独立解决问题的能力。现如今获取知识非常便捷,我们只需使用搜索引擎搜索对应的关键字即可。

比如当我们不知道 choice 方法怎么用时,我们可以用 Python choice 用法 作为关键字进行搜索。

比如你连 random 模块都不知道,却想用 Python 生成随机数。我们可以用 Python 如何生成随机数 作为关键字进行搜索。

又比如当我们遇到不明白的报错时,我们可以用 Python + 报错信息 作为关键字进行搜索。

第22关 思维导图
上一篇 下一篇

猜你喜欢

热点阅读