Python中random.seed函数如何处理字符串?字符串会转为哪个数字?
字符串种子"hello world!"对应的数字种子
在Python的random模块里,当你传入字符串作为种子时,它不会直接报错,因为内部会把字符串转换成一个固定的整数种子来使用。
具体转换逻辑
字符串会先被编码成字节序列,接着通过SHA-1哈希算法生成一个160位的哈希值,最后把这个哈希值转成十进制整数,这就是实际用来初始化随机数生成器的种子。
对应数字
"hello world!"对应的整数种子是:1258229191115973813532038269555766883030868369389
验证代码
你可以用下面的代码确认这个结果,两次调用random.choices的输出会完全一致:
import random import hashlib def get_string_seed(s): sha1_digest = hashlib.sha1(s.encode()).digest() return int.from_bytes(sha1_digest, byteorder='big') # 计算字符串对应的种子数值 seed = get_string_seed("hello world!") print(seed) # 用数字种子生成随机序列 random.seed(seed) print(random.choices([1,2,3,4,5,6,7], k=10)) # 用字符串种子生成随机序列 random.seed("hello world!") print(random.choices([1,2,3,4,5,6,7], k=10))
内容的提问来源于stack exchange,提问作者Johannes
相关产品推荐
相关产品推荐

