已知一个能随机返回0或1的函数
rand()
,请编写一个python函数,利用这个rand函数来随机生成0~1000
之间的整数。题目难度:中等
题目来源:shoppe面试真题
import random
def rand():
return random.choice([0, 1])
def big_rand() -> int:
n = rand()
pass
assert big_rand() in range(1000)
已知一个能随机返回0或1的函数
rand()
,请编写一个python函数,利用这个rand函数来随机生成0~1000
之间的整数。题目难度:中等
题目来源:shoppe面试真题
import random
def rand():
return random.choice([0, 1])
def big_rand() -> int:
n = rand()
pass
assert big_rand() in range(1000)
可以直接用random.randint吗
不懂这个题的考点,每日打卡
def rand():
return random.choice([0, 1])
def big_rand() -> int:
while True:
maxSum = rand()
if maxSum:
break
return random.randint(0, maxSum * 1000)
assert big_rand() in range(1000)
randint是包含右边的值的?你应该改成乘以999
def rand():
return random.choice([0, 1])
def big_rand() -> int:
n = rand()
low = 0
max = 999
mid = int((low + max)/2)
while(1):
n = rand()
if mid == low:
if n == 0:
return mid
if n == 1:
return max
if mid == max:
if n == 0:
return low
if n == 1:
return mid
if n == 0:
max = mid
mid = int((low + max)/2)
if n == 1:
low = mid
mid = int((low + max)/2)
if low == mid and mid == max:
return mid
assert big_rand() in range(1000)
按照自己的理解写了一下,写的有点糙
参考题解:由0和1想到了使用二进制。
import random
def rand():
return random.choice([0, 1])
def big_rand():
while True:
b = ''.join([str(rand()) for x in range(10)])
if bin(1) < '0b{}'.format(b) < bin(1000):
return int(b, 2)
assert 0 < big_rand() < 1000
没理解题目,求解答下
感觉不对啊,你这样比较字符串大小得到的结果不是0-1000啊
0b1<f’0b{b}’<0b1111101000 这个怎么比较大小
这样得到的都是512以上的数字
你这得到的不是1到999之间吗