一、随机库
1.随机生成数值
在random库中可以随机生成数值的方法有uniform()、random()、randint()、randrange()等。
(1)uniform()方法
uniform(参数1, 参数2)方法用于生成参数1到参数2之间的随机小数,其中参数的类型都为数值类型。
示例代码:
python
import random
a = random.uniform(1, 5)
print(a)
执行代码后的输出结果为2.2913853063272107,因为是随机输出的数值,所以每次运行结果都可能不同。
(2)random()方法
random()方法用于生成0~1(不包含1)的随机小数,无须填入参数。
示例代码:
python
import random
a = random.random()
print(a)
执行代码后的输出结果为0.6109992072802352,因为是随机输出的数值,所以每次运行结果都可能不同。
(3)randint()方法
randint(参数1, 参数2)方法用于生成在参数1到参数2之间的整数。
示例代码:
python
import random
a = random.randint(2, 9)
print(a)
第2行代码表示在执行代码后将输出一个2~9的整数,结果为5。
(4)randrange()方法
randrange(参数1, 参数2, 参数3)方法用于生成在参数1到参数2之间且步长为参数3的随机整数。
示例代码:
python
import random
a = random.randrange(0, 20, 5)
print(a)
第2行代码表示从0~20的范围内且步长为5的数值(0、5、10、15)中随机选取一个数值,执行代码后的输出结果为15。
2.随机选择
random库中的choice()、shuffle()、sample()函数可以实现从一些数据中随机选择一个或多个元素。
(1)choice()函数
choice(参数)用于从参数中随机选择一个元素,参数通常是序列类型(可以通过索引的方式获取元素)数据,例如列表、字符串。
示例代码:
python
import random
ls = ['一等奖', '二等奖', '三等奖', '谢谢惠顾']
a = random.choice(ls)
print(a)
第3行代码从列表ls中随机选取一个元素,与抽奖活动的程序代码相似。执行代码后的输出结果为"谢谢惠顾"。由于是随机从ls中选择一个元素,因此每次运行的结果都可能不同。
(2)shuffle()函数
shuffle(参数)用于将列表ls中的元素顺序随机打乱,参数是序列类型数据。
示例代码:
python
import random
ls = ['一等奖', '二等奖', '三等奖', '谢谢惠顾']
random.shuffle(ls)
print(ls)
第3行代码使用shuffle()将列表ls中的元素顺序随机打乱。由于是随机从ls中选择一个元素,因此每次运行的结果都可能不同。
代码执行结果:
python
['一等奖', '二等奖', '谢谢惠顾', '三等奖']
(3)sample()函数
sample(参数1, 参数2)用于从参数1中随机选取参数2个元素,其中参数1为序列类型数据,参数2为整数。
示例代码:
python
import random
ls = ['一等奖', '二等奖', '三等奖', '谢谢惠顾']
a = random.sample(ls, 2)
print(a)
第3行代码表示从ls列表中随机选择2个元素。
代码执行结果:
python
['一等奖', '谢谢惠顾']
3.随机种子
在某些场景下并不希望用户每次运行代码后的结果都不相同,例如小王抽奖为"二等奖",王五抽奖为"谢谢惠顾",每人只能抽取一种结果,且每次运行结果都相同,这时需要用到随机种子seed()函数。其使用形式如下:
python
seed(种子)
功能:在随机数中设置一个随机种子,下一次随机获取的值必须由该随机种子发出。
参数种子:可以是任何数据类型的,例如整数类型或字符串类型。
示例代码:
python
import random
ls = ['一等奖', '二等奖', '三等奖', '谢谢惠顾']
random.seed('张三')
print(random.choice(ls))
random.seed('王五')
print(random.choice(ls))
代码执行结果:
python
二等奖
谢谢惠顾
二、正则表达式库
匹配字符串表示从字符串中筛选出满足条件的信息,这里的条件要使用一种特殊的表达式,即正则表达式表示。本小节主要介绍3种匹配字符串的方法,分别是re库中的match()函数、search()函数和findall()函数。
1.匹配字符串
(1)match()函数
match()函数的使用形式如下:
python
match(参数1, 参数2)
功能:表示从参数2(字符串类型数据)中查找满足参数1(正则表达式)的内容,如果参数2起始位置匹配不成功的话,就返回none;如果起始位置匹配成功,就返回匹配的内容。
示例代码:
python
import re
message = '张三、李四、王五、赵六'
result = re.match('张三', message)
print(result)
第3行代码表示从message字符串中匹配'张三',这里参数2并没有用到正则表达式。由于message中'张三'位于开头,因此可以正确地匹配到。
代码执行结果:
python
<re.Match object; span=(0, 2), match='张三'>
返回的结果以正则的类型输出,其中span=(0,2)指明匹配的位置,表示在字符串索引号为0~2的位置匹配成功,匹配的内容为'张三'。现将以上代码进行修改,修改后的代码如下:
python
import re
message = '张三、李四、王五、赵六'
result = re.match('三', message)
print(result)
执行代码后将返回None,虽然字符'三'在message中,但并不位于message的开头,所以匹配不成功。
(2)search()函数
search()函数的使用形式如下:
python
search(参数1, 参数2)
功能:表示从参数2(字符串类型数据)中查找满足参数1(正则表达式)的内容,如果匹配了多个参数1,则只返回第1个匹配成功的信息。
示例代码:
python
import re
message = '张三、李四、王五、赵六、王五'
result = re.search('王五', message)
print(result)
第3行代码使用search()函数从message中匹配字符串'王五',由于message中存在两个'王五',因此执行代码后会输出第1个'王五'所在的位置及内容。
代码执行结果:
python
<re.Match object; span=(6, 8), match='王五'>
(3)findall()函数
findall()函数的使用形式如下:
python
findall(参数1, 参数2)
功能:表示从参数2(字符串类型数据)中查找满足参数1(正则表达式)的内容,如果匹配了多个参数1,则返回匹配成功的全部信息。
示例代码:
python
import re
message = '张三、李四、王五、赵六、王五'
result = re.findall('王五', message)
print(result)
findall()并不返回匹配的位置,只返回匹配的全部内容。
代码执行结果:
python
['王五', '王五']
2.正则表达式
上小节介绍的match()、search()、findall()函数中,参数1均是字符串,并没有涉及正则表达式。正则表达式是一种使用特殊符号表示字符串的规则。本小节将分别从字符范围、字符出现的次数及同一类字符这3个方向来介绍正则表达式。
(1)表达字符范围
xyz\]:字符集合,即匹配所包含的任意一个字符。例如\[abc\]可以匹配plain中的a。
\[a-z\]:字符范围,即匹配指定范围内的任意字符。例如\[a-z\]可以匹配a到z范围内的任意小写字母。
示例代码:
```python
import re
message = 'Python93,C87,Java63,C++88'
result_1 = re.search('[cn]', message)
result_2 = re.findall('[0-9]', message)
result_3 = re.findall('[cn][0-9]', message)
print(result_1, result_2, result_3)
```
第3行代码表示从message中匹配字符c或n,只要message中包含c或n,执行代码后就会输出匹配到的第一个字符。需要注意的是大写的C是不能匹配的。
第4行代码表示从message中匹配0\~9的任何一个数字,即匹配全部数字,由于使用了findall()函数,因此程序会将message中的全部数字输出。
第5行代码中的正则表达式包含\[cn\]\[0-9\],表示需要匹配两个字符,且第1个字符是c或n、第2个字符是数字。
代码执行结果:
```python