import hashlib
import time
def random():
hashtime = str(int(time.time() * (10 ** 6)))
encoded = hashlib.new("sha3_512", hashtime.encode())
decoded = int(encoded.hexdigest(), 16)
dcsmall = decoded / (10 ** (len(str(decoded))))
return (dcsmall)
我试过这段代码来模拟函数 random.random() 没有模块随机。我想生成一个介于 0 和 1 之间的随机数,但由于“解码”的长度,此代码不会输出介于 0 和 0.1 之间的数字,我不知道如何修复它。 请不要对我的代码进行巨大的更改,而是给我一个解决问题的想法。 谢谢
你的解码值范围和你的除法分母不一致。一个是二进制值,另一个是基于十进制的。结果分数的潜在范围不能为 0...1,因为
decode
的最大值与其字符串表示形式的位数不匹配。
您需要做的是取一大块值,您可以在其中强制或确定
decode
的最小和最大范围。我建议使用 decode
值的模并使用相同的分母来获得 0...1 分数:
dcsmall = decoded%2**64 / 2**64
这可能会做到:
import hashlib
import time
def random():
hashtime = str(int(time.time() * (10 ** 6)))
encoded = hashlib.new("sha3_512", hashtime.encode())
decoded = int(encoded.hexdigest(), 16)
dcsmall = decoded / (2 ** 512)
return (dcsmall)
SHA3-512 哈希为 512 位长——无需担心它们在十进制或十六进制表示法中的长度。