文章目录
文章开篇
Python的魅力,犹如星河璀璨,无尽无边;人生苦短、我用Python!
random
在Python编程中,随机性是一个常见的需求,用于模拟随机事件、生成随机数据、密码学等多个领域;
Python的random模块提供了多种函数来生成伪随机数和执行随机操作,满足随机性的需求;
1.随机生成小于1的浮点数
random.random() 随机获取[0, 1]范围内的一个浮点数(左闭右开)
import random
print(random.random()) # 0.745664547872975
print(random.random()) # 0.3986480302847861
print(random.random()) # 0.6906876486820739
2.随机生成范围内的浮点数
random.uniform(a,b) 随机获取[a, b]范围内的一个浮点数(左闭右开)
import random
print(random.uniform(10, 20)) # 17.232380991788812
print(random.uniform(10, 20)) # 14.36141969561725
print(random.uniform(10, 20)) # 11.299131946950412
3.随机生成范围内整数
random.randint(a,b) 随机获取[a, b]范围内的一个整数(左闭右闭)
import random
print(random.randint(10, 20)) # 15
print(random.randint(10, 20)) # 19
print(random.randint(10, 20)) # 20
4.从列表中随机抽取一个
random.choice(x) 随机从参数x(字符串/列表/元祖等对象)中抽取一个元素
import random
x1 = "abcdefg1234567"
print(random.choice(x1)) # b
print(random.choice(x1)) # g
print(random.choice(x1)) # 6
x2 = [1, 3, 5, 7, 9]
print(random.choice(x2)) # 3
print(random.choice(x2)) # 5
print(random.choice(x2)) # 1
5.从列表中随机抽取多个
random.sample(x, k) 从x中随机抽取k个不重复的元素,组成一个列表返回;
import random
# 生成一个序列,将range的步长设为1~5随机
numbers = list(range(50, 80, random.randint(1, 5)))
print("numbers:", numbers) # [50, 53, 56, 59, 62, 65, 68, 71, 74, 77]
print(random.sample(numbers, 5)) # [65, 59, 71, 68, 56]
print(random.sample(numbers, 5)) # [74, 53, 56, 71, 50]
print(random.sample(numbers, 5)) # [53, 74, 65, 77, 71]
6.随机排列指定列表顺序
random.shuffle(x) 将参数x中的元素顺序随机排列
import random
x1 = ['apple', 'banana', 'orange', 'grape']
random.shuffle(x1)
print("打乱后的列表:", x1) # 打乱后的列表: ['banana', 'grape', 'apple', 'orange']
x2 = ['1', '7', '5', '9', '3', 'b', 'c', 'a']
random.shuffle(x2)
print("打乱后的列表:", x2) # 打乱后的列表: ['7', '5', 'b', '3', '9', 'c', '1', 'a']
7.随机种子
在某些情况下,我们希望生成的随机数是可预测的,
这时可以使用random.seed(a=None, version=2)来初始化随机种子;
import random
# 设置随机种子
random.seed(5)
random_number = random.randint(1, 10)
print("随机整数:", random_number) # 10
print("随机整数:", random_number) # 10
print("随机整数:", random_number) # 10
random.seed(50)
random_number = random.randint(20, 100)
print("随机整数:", random_number) # 83
print("随机整数:", random_number) # 83
print("随机整数:", random_number) # 83
8.随机生成范围内的奇数或偶数
random.randrange(a,b) 随机获取[a, b)范围内的一个数字(左闭右开),可加步长;
import random
print(random.randrange(50, 100)) # 64
print(random.randrange(50, 100)) # 77
print(random.randrange(50, 100)) # 59
# 随机获取大于等于11且小于100之间的奇数
print(random.randrange(11, 100, 2)) # 35
print(random.randrange(11, 100, 2)) # 19
print(random.randrange(11, 100, 2)) # 35
应用案例代码
1.模拟骰子掷骰子游戏
import random
def roll_dice():
die1 = random.randint(1, 6)
die2 = random.randint(1, 6)
return die1, die2
# 模拟掷骰子游戏
roll_result = roll_dice()
total = sum(roll_result)
print(f"骰子1: {roll_result[0]}, 骰子2: {roll_result[1]}, 总和: {total}")
2.随机密码生成
import random
import string
def generate_random_password(length):
characters = string.ascii_letters + string.digits
password = ''.join(random.choice(characters) for _ in range(length))
return password
# 生成一个包含8个字符的随机密码
random_password = generate_random_password(8)
print(random_password)
UUID
UUID是一种用于生成全局唯一标识符的方法。
Python的uuid模块提供了多种生成UUID的方法。
1.UUID的不同版本
UUID 目前有5个版本:
- **uuid1():**基于时间戳,由MAC地址、当前时间戳、随机数生成。可以保证全球范围内的唯一性,但MAC的使用同时带来安全性问题,局域网中可以使用 IP 来代替 MAC。
- **uuid2():**将版本 1 的时间戳前四位换为 POSIX 的 UID 或 GID,问题同上;
- **uuid3():**基于名字的 MD5 散列值,通过计算 name 和 namespace 的 MD5 散列值得到,保证了同一命名空间中不同名字的唯一性,和不同命名空间的唯一性,但同一命名空间的同一名字会生成相同的 uuid。
- **uuid4():**基于随机数,由伪随机数得到,有一定的重复概率,该概率可以计算出来。
- **uuid5():**基于名字的 SHA-1 散列值,算法与uuid3相同,不同的是使用「Secure Hash Algorithm 1」算法。
因为 uuid4() 是基于随机数生成 Id,所以有一定的概率生成相同的 Id,在 Id 需要唯一性时最好不用,此时可以使用 uuid1() 或 uuid5()。
2.生成UUID
import uuid
# 基于时间戳
print(uuid.uuid1()) # 9bb8463e-da02-11ee-b8de-d2b7251988b5
# print(uuid.uuid2()) # Python中没有这个uuid2函数
# 基于名字的MD5散列值
print(uuid.uuid3(uuid.NAMESPACE_DNS, name="zhangsan")) # d51a47a6-3157-39a9-94d3-70ecb9fda86e
# 基于随机数
print(uuid.uuid4()) # b2af1c04-27e0-4286-bbba-2e821cc26779
# 基于名字的SHA-1散列值
print(uuid.uuid5(uuid.NAMESPACE_DNS, name="zhangsan")) # 8e117ce0-eb96-5ae8-84b7-621521f751b6
3.UUID的属性和方法
import uuid
# 创建UUID对象
my_uuid = uuid.uuid4()
# 获取UUID的十六进制表示
hex_representation = my_uuid.hex
print("Hex Representation:", hex_representation)
# 获取UUID的整数表示
int_representation = my_uuid.int
print("Integer Representation:", int_representation)
# 获取UUID的版本号
version_number = my_uuid.version
print("Version Number:", version_number)
总结
在Python中,random和uuid模块各自扮演着不可或缺的角色。
random模块为随机数生成提供了丰富的功能,广泛应用于数学、安全、机器学习等领域,助力算法效率和灵活性的提升。
而uuid模块则确保全局唯一标识符的生成,为数据标识和安全性提供了坚实的保障。