import struct
import time
def lastbit(f):
return struct.pack('!f', f)[-1] & 1
def getrandbits(k):
"Return k random bits using a relative drift of two clocks."
# assume time.sleep() and time.clock() use different clocks
# though it might work even if they use the same clock
#XXX it does not produce "good" random bits, see below for details
result = 0
for _ in range(k):
time.sleep(0)
result <<= 1
result |= lastbit(time.clock())
return result
def randint(a, b):
"Return random integer in range [a, b], including both end points."
return a + randbelow(b - a + 1)
def randbelow(n):
"Return a random int in the range [0,n). Raises ValueError if n<=0."
# from Lib/random.py
if n <= 0:
raise ValueError
k = n.bit_length() # don't use (n-1) here because n can be 1
r = getrandbits(k) # 0 <= r < 2**k
while r >= n: # avoid skew
r = getrandbits(k)
return r
from time import time
def time_random():
return time() - float(str(time()).split('.')[0])
def gen_random_range(min, max):
return int(time_random() * (max - min) + min)
if __name__ == '__main__':
for i in range(20):
print gen_random_range(20,60)
import datetime
def rand(s,n):
'''
This function create random number between the given range, its maximum range is 6 digits
'''
s = int(s)
n = int(n)
list_sec = datetime.datetime.now()
last_el=str(list_sec).split('.')[-1]
len_str=len(str(n))
get_number_elements = last_el[-int(len_str):]
try:
if int(get_number_elements)<=n and int(get_number_elements)>=s:
return get_number_elements
else:
max_value = int('9'*len_str)
res = s+int(get_number_elements)*(n-s)/(max_value)
return res
except Exception as e:
print(e)
import time
def rand_val(x,y):
sub=y-x
random=int(time.time()*1000)
random %=sub
random+=x
return random
x=int(input())
y=int(input())
print(rand_val(x,y))
8条答案
按热度按时间b1payxdu1#
问题是我得做点什么来利用时间
您可以根据时钟漂移生成随机性:
一旦你有了
getrandbits(k)
,就可以直接得到一个范围[a,B]中的随机整数,包括两个端点。基于CPython库/random.py:例如,要生成从10到110的20个随机数,包括:
输出:
如果
getrandbits(k)
返回k
随机位,则randint(a, b)
应按原样工作(由于模等原因而没有偏斜)。要测试
getrandbits(k)
的质量,可以使用dieharder
实用程序:其中
random-from-time.py
生成无限(随机)二进制流:其中
getrandbits(k)
如上所定义。上面的代码假设您不允许使用
os.urandom()
或ssl.RAND_bytes()
,或一些已知的PRNG算法(如Mersenne Twister)来实现getrandbits(k)
。使用“
time.sleep()
+time.clock()
”实现的getrandbits(n)
未通过dieharder
测试(太多,不可能是巧合)。这个想法仍然是合理的:时钟漂移可以用作随机性(熵)的来源,但不能直接使用(分布不均匀和/或某些位是相关的);这些比特可以作为种子被传递到接受任意熵源的PRNG。参见"Mixing" section。
v64noz0r2#
你是否被允许读取一些特殊文件中的随机数据?在Linux下,文件`/dev/urandom'提供了一种获取随机字节的方便方法。你可以这样写:
但这在Windows下不起作用。
cbeh67ev3#
我们的想法是使用时间模块得到0到1之间的数字,并使用它来得到一个范围内的数字。下面将随机打印20个数字,范围为20到60
rwqw0loc4#
这里我们需要了解一件事,即随机变量是通过使用运行时给出的随机值生成的。为此我们需要时间模块
time()提供随机值(数字计数接近17)。我们需要以毫秒为单位,所以我们需要乘以1000,如果我需要从0到10的值,那么我们需要得到小于10的值,这意味着我们需要以下:time.time%10(但它是浮点数,我们需要转换为int)int(time.time%10)
vx6bjr1n5#
如果允许,使用API?。
hmmo2u0o6#
6ljaweal7#
查找范围(x,y)中的随机值
你需要从x的高存储中减去低范围
然后从0-x中找出random
然后将值添加到低范围->低范围+x(x是随机的)
tcbh2hod8#