【每日一题0729】随机整数

:woman_mage:已知一个能随机返回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吗 :sweat_smile:

不懂这个题的考点,每日打卡

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 :rofl:

	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) 

按照自己的理解写了一下,写的有点糙 :joy:

@fwj 这题不行哈。也就是只利用0和1两个数字,来生成指定范围的随机数。@lifq1984

参考题解:由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

:partying_face: :partying_face: :partying_face: :partying_face: :partying_face: :partying_face:

没理解题目,求解答下

感觉不对啊,你这样比较字符串大小得到的结果不是0-1000啊

0b1<f’0b{b}’<0b1111101000 这个怎么比较大小

这样得到的都是512以上的数字

你这得到的不是1到999之间吗