Python Random和UUID内置库



文章开篇

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模块则确保全局唯一标识符的生成,为数据标识和安全性提供了坚实的保障。

  • 9
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

需要休息的KK.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值