Python 创建函数以生成随机数

Python 创建函数以生成随机数,python,Python,注意:我不能使用任何内置函数来解决这个问题 问题是: 给定一个返回1到5之间的随机整数的函数,创建一个创建1到7之间的随机整数的函数。显然如下所示。请参阅链接答案和其他答案 好吧,这是我正在考虑的一种方法。这可能是错误的。我的假设是,结果应该在更大的范围内随机分布 使用给定的随机函数(生成数字[1,5])生成7个随机数,并计算其总和 这将导致值介于7(1*7)和35(5*7)之间 由于该值可被目标范围平均整除并随机分布,因此在不失去均匀性的情况下,将中间范围[7,35]压缩回[1,7]似乎是有

注意:我不能使用任何内置函数来解决这个问题

问题是:

给定一个返回1到5之间的随机整数的函数,创建一个创建1到7之间的随机整数的函数。

显然如下所示。请参阅链接答案和其他答案


好吧,这是我正在考虑的一种方法。这可能是错误的。我的假设是,结果应该在更大的范围内随机分布

使用给定的随机函数(生成数字[1,5])生成7个随机数,并计算其总和

这将导致值介于7(1*7)和35(5*7)之间

由于该值可被目标范围平均整除并随机分布,因此在不失去均匀性的情况下,将中间范围[7,35]压缩回[1,7]似乎是有效的


或者可能不是这样-但似乎利用数字之间的公倍数是关键。

正如刚才所回答的,您可以尝试使用类似于下面的算法:

import random
def winningFunc():
   return originalFuncReturning1to5() + random.randint(0,2)
int i;
do
{
  i = 5 * (rand5() - 1) + rand5();  // i is now uniformly random between 1 and 25
} while(i > 21);
// i is now uniformly random between 1 and 21
return i % 7 + 1;  // result is now uniformly random between 1 and 7
编辑:转换为python:

def rand7():
i = 0;

while True:
    i = 5 * (rand5() -1) + rand5()
    if i > 21:
        break
return i % 7 + 1

是的,这是我在采访中遇到的一个问题!你尝试了什么?你在哪里卡住了?(如果你不能使用内置的东西,听起来像是一个家庭作业主题?)。这是家庭作业,你显然没有做任何努力。@SpliFF这是一个有点著名的谷歌面试问题。在这个网站上已经有了答案完美的解决方案这是投反对票的原因吗?因为他不能使用内置函数。
注意:我不能使用任何内置函数来解决这个问题。
即使他能够使用内置函数,这也不是很好的随机函数,因为它不是统一的。但好吧,我添加了一个python版本。请检查一下,因为我对这门语言没有经验。