random函数的用法

random函数的用法,第1张

用法:

1、随机生成(0,1)之间的浮点数

randomrandom()

2、随机生成100-200的整数

randomrandint(100,200)

3、随机产生范围为10间隔为2的数

randomrandrange(0,11,2)

注:这里输出(0,2,4,6,8,10)中一个

4、从序列中随机抽选一个数

randomchoice(list)

5、随机排序

randomshuffle(list)

注:list元素为数值型

从序列中获取指定长度为3的字符

扩展资料:

Python的random方法

randomrandom()用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限。如果a > b,则生成随机数 n: a <= n <= b。如果 a < b, 则 b <= n <= a。

print randomuniform(10, 20) print randomuniform(20, 10)

#187356606526 

#125798298022

randomrandint() 用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,Python生成随机数

print randomrandint(12, 20) #生成的随机数n: 12 <= n <= 20 print randomrandint(20, 20) #结果永远是20

print randomrandint(20, 10) #该语句是错误的。

下限必须小于上限。

srand(time(NULL)):这是两个函数,一个是srand函数,这是在调用rand()这个函数之前使用的,rand()是一个产生随机数的函数,而srand是一个设置随机数种子的函数,通常这两个函数是一起使用的,来完成产生随机数的功能。

而time(NULL)这个函数的返回值是作为srand函数的参数的,意思是以现在的系统时间作为随机数的种子来产生随机数,至于NULL这个参数,因为这个话就返回到现在时间时候的long秒,只有设置成NULL才能获得系统的时间。

扩展资料:

计算机并不能产生真正的随机数,而是已经编写好的一些无规则排列的数字存储在电脑里,把这些数字划分为若干相等的N份,并为每份加上一个编号用srand()函数获取这个编号,然后rand()就按顺序获取这些数字,当srand()的参数值固定的时候,rand()获得的数也是固定的,所以一般srand的参数用time(NULL),因为系统的时间一直在变,所以rand()获得的数,也就一直在变,相当于是随机数了。只要用户或第三方不设置随机种子,那么在默认情况下随机种子来自系统时钟。

如果想在一个程序中生成随机数序列,需要至多在生成随机数之前设置一次随机种子。 即:只需在主程序开始处调用srand((unsigned)time(NULL));后面直接用rand就可以了。不要在for等循环放置srand((unsigned)time(NULL))。

首先,「真随机」也有不同的含义,若想要「真正的真随机」目测只能靠量子力学了。一般的所谓真随机不是指这个,而是指统计意义上的随机,也就是具备不确定性,可以被安全的用于金融等领域,下面说的也是这种。

答案是,计算机系统可以产生统计意义上的真随机数。

大部分程序和语言中的随机数(比如 C 中的,MATLAB 中的),确实都只是伪随机。是由可确定的函数(常用线性同余),通过一个种子(常用时钟),产生的伪随机数。这意味着:如果知道了种子,或者已经产生的随机数,都可能获得接下来随机数序列的信息(可预测性)。

直观来想,计算机是一种可确定,可预测的的设备,想通过一行一行的确定的代码自身产生真随机,显然不可能。但是,我们或许可以迂回一下……

实现方法简单说就是软硬结合,或者说,引入系统外的变量(把软件,代码,算法想象成一个封闭的系统)。

一个典型的例子就是 UNIX 内核中的随机数发生器(/dev/random),它在理论上能产生真随机。即这个随机数的生成,独立于生成函数,这时我们说这个产生器是非确定的。

具体来讲,UNIX 维护了一个熵池,不断收集非确定性的设备事件,即机器运行环境中产生的硬件噪音来作为种子。

比如说:时钟,IO 请求的响应时间,特定硬件中断的时间间隔,键盘敲击速度,鼠标位置变化,甚至周围的电磁波等等……直观地说,你每按一次键盘,动一下鼠标,邻居家 wifi 信号强度变化,磁盘写入速度,等等信号,都可能被用来生成随机数。

更具体的,内核提供了向熵池填充数据的接口:

比如鼠标的就是

void add_mouse_randomness(__u32 mouse_data)

内核子系统和驱动调用这个函数,把鼠标的位置和中断间隔时间作为噪音源填充进熵池。

所以,结论是,程序和算法本身不能产生真随机,但是计算机系统作为整体可以迂回产生统计意义上的真随机。

参考:

内核源码在/drivers/char/randomc

Windows 中也有相对的随机数生成器,基本的思想是一致的

如果要求更高的话,也有专用的设备,可收集附近的电磁场等环境噪音来产生随机数

原理太高深,提供方法是可以的

1、

在C++中可以的,函数是这样用,比如0至1的随机数

Random ran=new Random();

int RandKey=ranNext(0,1);

不过这样会有重复,可以给Random一个系统时间做为参数,以此产生随机数,就不会重复了

SystemRandom a=new Random(SystemDateTimeNowMillisecond);

int RandKey =aNext(10);

2、

在EXCEL中也有相应的函数

RAND( )

注解

若要生成 a 与 b 之间的随机实数:

=RAND()(b-a)+a

如果要使用函数 RAND 生成一随机数,并且使之不随单元格计算而改变,可以在编辑栏中输入“=RAND()”,保持编辑状态,然后按 F9,将公式永久性地改为随机数。

示例

RAND() 介于 0 到 1 之间的一个随机数(变量)

复制到其它单元格中就可以同时产生多个

产生 0-40之间的随机数

pascal里的随机数

随机数是指理论上没有规律可循、在指定范围内每个数的出现几率相等、无法根据之前的数来预测下一个数的数列。一般随机数生成器的基本原理是:首先初始化一个随机种子,其初始值可以是任意的整数;在每次获取随机数时,以随机种子为基础进行某种特殊的运算,获得一个随机数并返回之,然后再对随机种子进行某种运算,改变随机种子的值。这样,就可以生成许多比较随机的数,但同一个初始值的随机种子将会生成完全相同的随机数列。

Pascal的System单元提供了两个与随机数有关的子程序:Randomize和Random。

Randomize过程用于初始化随机种子,其初始值取决于当前的系统时钟。

Random函数用于获取随机数

它有两种调用形式:

Random,返回一个0到1之间(不包括1)的随机实数;

Random(N),返回0至N之间(不包括N)的随机整数,N为Word类型整数。

另外,System单元中随机种子变量的标识符为RandSeed,你也可以手动修改它。随机数在信息学奥林匹克中可用于随机化搜索、穷举等算法,以优化其性能,也可用于在快速排序中选择关键数,以使其快速排序算法的最坏情况没有固定的相应数列。如果你希望使用了随机数的程序对同一个输入数据能有恒定的输出结果,可以设置RandSeed为一个定值。

 rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种了,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子的值,C提供了 srand()函数,它的原形是void srand( int a)

  初始化随机产生器既rand()函数的初始值,即使把种子的值改成a; 从这你可以看到通过sand()函数,我们是可以产生可以预见的随机序列,那我们如何才能产生不可预见的随机序列呢?我们可能常常需要这样的随机序列,是吧。利用srand((unsign)(time(NULL))是一种方法,因为每一次运行程序的时间是不同的

  下面讲一讲在C语言里所提供的随机数发生器的用法。现在的C编译器都提供了一个基于ANSI标准的伪随机数发生器函数,用来生成随机数。它们就是rand()和srand()函数。这二个函数的工作过程如下:

1) 首先给srand()提供一个种子,它是一个unsigned int类型,其取值范围从0~65535;

2) 然后调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到32767之间)

3) 根据需要多次调用rand(),从而不间断地得到新的随机数;

4) 无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。

以下是一个产生随机数的例子:

需要首先使用随机数“种子”初始化,srand函数:

#i nclude <stdlibh>

#i nclude <stdioh>

#i nclude <timeh>//使用当前时钟做种子

void main( void )

{

int i;

srand( (unsigned)time( NULL ) );//初始化随机数

/ 打印10个随机数 /

for( i = 0; i < 10;i++ )

printf( " %d\n", rand() );

}#include <stdlibh>

#include <timeh>

main

{

int i;

srand(time(0)); //初始化随机种子

i = rand(); //产生随机数

}

 

 

首先,加一个"#include<stdlibh>

然后设一个变量,如j,j=rand(),就可以给j赋一个1~32767的随机数,如果要获得一个随机函数的十位(其它类似),只需令j=j%10就行

 

 

 

添加头文件 #include<timeh>

然后在文件中添加 srand((unsigned)time(NULL));

srand()是用来初始化随机种子数的,因为rand的内部实现是用线性同余法做的,它不是真的随机数,只不过是因为其周期特别长,所以有一定的范围里可看成是随机的

上面是有个随机种子的说明及方法,为了避免重复然后再 用 随机函数,rand() 就行了

头文件是 stdlibh

 

 

random() 产生随机数为 0或1

random(n) 产生随机数为 0到n之间的一个随机数 

rand() 产生 0到32768之间的一个随机数

 

 

 

函数名: randomize

功  能: 初始化随机数发生器

用  法: void randomize(void);

程序例:

#include <stdlibh>

#include <stdioh>

#include <timeh>

int main(void)

{

   int i;

   randomize();

   printf("Ten random numbers from 0 to 99\n\n");

   for(i=0; i<10; i++)

       printf("%d\n", rand() % 100);

   return 0;

}

seed叫做种子,LONG你肯定理解,为什么叫SEED你不理解,这和伪随机函数的原理有关系,RANDOM这个函数必须要一个种子,然后根据算法,从这个种子做为起点来运算,给出一个随机数。呵呵,被英文给唬了吧

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/12157132.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-21
下一篇2023-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存