random_randomaccessfile - CSDN
random 订阅
random即随机数发生器,使用之前需要使用Randomize语句进行随机数种子的初始化。RANDOM产生的是伪随机数或者说是用一种复杂的方法计算得到的序列值,因此每次运算时需要一个不同的种子值。种子值不同,得到的序列值也不同。因此也就是真正的随机数了。这也正是RANDOMIZE随机初始化的作用。 VB里用 NEW RANDOM()来表示初始化。 展开全文
random即随机数发生器,使用之前需要使用Randomize语句进行随机数种子的初始化。RANDOM产生的是伪随机数或者说是用一种复杂的方法计算得到的序列值,因此每次运算时需要一个不同的种子值。种子值不同,得到的序列值也不同。因此也就是真正的随机数了。这也正是RANDOMIZE随机初始化的作用。 VB里用 NEW RANDOM()来表示初始化。
信息
所属学科
软件工程
外文名
random
中文名
随机数发生器
用    法
nt random(int num)
random基本介绍
功 能: 随机数发生器用 法: int random(int num);程序例:#include #include #include /* prints a random number in the range 0 to 99 */int main(void){randomize(); printf("Random number in the 0-99 range: %d\n", random (100));return 0;}注意:在使用Random之前需要使用Randomize语句进行随机数种子的初始化。例如:vara,i,,j:integer;begin{RANDOMIZE;}for j:=1 to 2 dobeginfor i:=1 to 10 dobegina:=random(1000);writeln(a);end;writeln;end;end.这两组数据输出的是一样的结果,如果在程序前加上RANDOMIZE(即把大括号去掉)再运行程序,输出数据就不一样了.RANDOM产生的是伪随机数或者说是用一种复杂的方法计算得到的序列值,因此每次运算时需要一个不同的种子值。种子值不同,得到的序列值也不同。因此也就是真正的随机数了。这也正是RANDOMIZE随机初始化的作用。 VB里用 NEW RANDOM()来表示初始化。对调用者的说明在Random类中的随机数生成器的实现不能保证.NET Framework 的主版本之间保持相同。。结果是,应用程序代码不应假定相同的种子将产生不同版本的 .NET 框架中的相同伪随机序列。对继承者的说明在 .NET Framework 1.0 和 1.1 版中,派生自Random的类的最小实现需要重写Sample方法,以定义用于生成随机数的新算法或修改算法。然后,该派生类便可依赖Random.Next()、Random.Next(Int32)、Random.Next(Int32, Int32)、NextBytes和NextDouble方法的基类实现来调用Sample方法的派生类实现。在 .NET Framework 2.0 及更高版本中,Random.Next()、Random.Next(Int32, Int32)和NextBytes方法的行为发生了更改,因此这些方法不必再调用Sample方法的派生类实现。因此,派生自Random并且面向 .NET Framework 2.0 及更高版本的类还应重写这三种方法。
收起全文
  • random

    千次阅读 2019-06-25 12:16:26
    一. 简介  ramdom模块提供了一个随机数的函数:random() 它可以返回一个随机生成的实数,范围在[0,1)范围内。需要注意的是random()是不能直接访问的,需要导入模块... 4 print ("random() : ", random.random())...

    一. 简介

       ramdom模块提供了一个随机数的函数:random() 它可以返回一个随机生成的实数,范围在[0,1)范围内。需要注意的是random()是不能直接访问的,需要导入模块random才可以使用。

    二. 使用

     1 import random
     2  
     3 # 第一个随机数
     4 print ("random() : ", random.random())
     5 # 输出:random() :  0.09690599908884856
     6  
     7 # 第二个随机数
     8 print ("random() : ", random.random())
     9 # 输出:random() :  0.8732120512570916
    10  
    11 # 随机输出1到2之间的整数包含2
    12 print(random.randint(1,2))
    13 # 输出: 1或者2
    14  
    15 # 随机输出一个数,范围在[1, 10)
    16 print(random.randrange(1,10))
    17  
    18 #random.choice从序列中获取一个随机元素
    19 print(random.choice('liukuni'))  #i

     

     
    随机生成5位大小写字母和数字的验证码
    import random
    li = []
    for i in range(6):
         """
         随机生成5位大写字母和数字的验证码
         """
         r = random.randrange(0, 5)
         if r == 4 or r == 2:  # 如果随机数为2或4就生成数字
             temp = random.randrange(0, 10)  # 生成随机数字
             li.append(str(temp))  # int型无法用list的join方法,用str转换为字符串
         else:  # 否则随机生成字母
             temp = random.randrange(65, 91)  # 数字对应的ascii码数字对应的字符
             c = chr(temp)
             li.append(c)
      
     result = "".join(li)  # join把列表所有元素拼接为一个字符串时,要求所有元素都是字符串
     print(result)

     

     

    转载于:https://www.cnblogs.com/minorblog/p/8849441.html

    展开全文
  • 随机数Random的两种写法

    千次阅读 2018-04-21 11:57:04
    Math.random: 这是一个默认方法,不接受任何参数随机范围: 0<Math.random ( ) < 1.0 double r = Math.random ( ) ; //默认是double类型,转别的类型需要强转 int a = (int) (Math.random( )*100); ...

    Math.random:   这是一个默认方法,不接受任何参数

    随机范围: 0<Math.random ( ) < 1.0
    
    double r = Math.random ( ) ;        //默认是double类型,转别的类型需要强转
    
    
    int a = (int) (Math.random( )*100);    //从0到100之间 不包含100
    //Math.random后面的括号里面不能写东西
    
    
    double x = Math.random ( )+15;    // [ 15,15+1)
    
    double y = Math.random ( )*15;    //  [ 0,15)
    
    double o = Math.random ( ) *15 +10; 
    
    double p = (Math.random ( )*15) +10;

    o和p的写法虽不同 但是 范围是一样的 都是 [ 10,25) 

     左包含 右不包含



    Random方法
    使用这个方法需要先new 一个Random类型的对象

    Random r = new Random();        //用Random方法需要新建一个对象
    
    int a = r.nextInt ( 100 ) ;         //  [ 0,100 ) ; 
    
    int b = r.nextInt(180)+121;    // (0到180)+121  范围是121到301  不包含301的整数
    
    double c = (r.nextDouble ( )*121)+15;    //15到135的小数
    
    
    double d = (r.nextDouble ( )+121)+15;    //136到136+1的小数





    展开全文
  • Random用法详解

    千次阅读 2018-09-07 16:12:12
    Random类 (java.util)  Random类中实现的随机算法是伪随机,也就是有规则的随机。在进行随机时,随机算法的起源数字称为种子数(seed),在种子数的基础上进行一定的变换,从而产生需要的随机数字。 相同种子数的...

    Random类 (java.util)        

    Random类中实现的随机算法是伪随机,也就是有规则的随机。在进行随机时,随机算法的起源数字称为种子数(seed),在种子数的基础上进行一定的变换,从而产生需要的随机数字。

    相同种子数的Random对象,相同次数生成的随机数字是完全相同的。也就是说,两个种子数相同的Random对象,第一次生成的随机数字完全相同,第二次生成的随机数字也完全相同。这点在生成多个随机数字时需要特别注意。

    下面介绍一下Random类的使用,以及如何生成指定区间的随机数组以及实现程序中要求的几率。

    1、Random对象的生成

    Random类包含两个构造方法,下面依次进行介绍:

    a、public Random()

    该构造方法使用一个和当前系统时间对应的相对时间有关的数字作为种子数,然后使用这个种子数构造Random对象。

    b、public Random(long seed)

    该构造方法可以通过制定一个种子数进行创建。

    示例代码:

     

    复制代码代码如下:


    Random r = new Random();
    Random r1 = new Random(10);

     

    再次强调:种子数只是随机算法的起源数字,和生成的随机数字的区间无关。

    2、Random类中的常用方法

    Random类中的方法比较简单,每个方法的功能也很容易理解。需要说明的是,Random类中各方法生成的随机数字都是均匀分布的,也就是说区间内部的数字生成的几率是均等的。下面对这些方法做一下基本的介绍:

    a、public boolean nextBoolean()

    该方法的作用是生成一个随机的boolean值,生成true和false的值几率相等,也就是都是50%的几率。

    b、public double nextDouble()

    该方法的作用是生成一个随机的double值,数值介于[0,1.0)之间。

    c、public int nextInt()

    该方法的作用是生成一个随机的int值,该值介于int的区间,也就是-231到231-1之间。

    如果需要生成指定区间的int值,则需要进行一定的数学变换,具体可以参看下面的使用示例中的代码。

    d、public int nextInt(int n)

    该方法的作用是生成一个随机的int值,该值介于[0,n)的区间,也就是0到n之间的随机int值,包含0而不包含n。

    如果想生成指定区间的int值,也需要进行一定的数学变换,具体可以参看下面的使用示例中的代码。

    e、public void setSeed(long seed)

    该方法的作用是重新设置Random对象中的种子数。设置完种子数以后的Random对象和相同种子数使用new关键字创建出的Random对象相同。

    3、Random类使用示例

    使用Random类,一般是生成指定区间的随机数字,下面就一一介绍如何生成对应区间的随机数字。以下生成随机数的代码均使用以下Random对象r进行生成:

    Random r = new Random();

    a、生成[0,1.0)区间的小数

     

    复制代码代码如下:


    double d1 = r.nextDouble();

     

    直接使用nextDouble方法获得。

    b、生成[0,5.0)区间的小数

     

    复制代码代码如下:


    double d2 = r.nextDouble() * 5;

     

    因为nextDouble方法生成的数字区间是[0,1.0),将该区间扩大5倍即是要求的区间。

    同理,生成[0,d)区间的随机小数,d为任意正的小数,则只需要将nextDouble方法的返回值乘以d即可。

    c、生成[1,2.5)区间的小数

     

    复制代码代码如下:


    double d3 = r.nextDouble() * 1.5 + 1;

     

    生成[1,2.5)区间的随机小数,则只需要首先生成[0,1.5)区间的随机数字,然后将生成的随机数区间加1即可。

    同理,生成任意非从0开始的小数区间[d1,d2)范围的随机数字(其中d1不等于0),则只需要首先生成[0,d2-d1)区间的随机数字,然后将生成的随机数字区间加上d1即可。

    d、生成任意整数

     

    复制代码代码如下:


    int n1 = r.nextInt();

     

    直接使用nextInt方法即可。

    e、生成[0,10)区间的整数

     

    复制代码代码如下:


    int n2 = r.nextInt(10);
    n2 = Math.abs(r.nextInt() % 10);

     

    以上两行代码均可生成[0,10)区间的整数。

    第一种实现使用Random类中的nextInt(int n)方法直接实现。

    第二种实现中,首先调用nextInt()方法生成一个任意的int数字,该数字和10取余以后生成的数字区间为(-10,10),然后再对该区间求绝对值,则得到的区间就是[0,10)了。

    同理,生成任意[0,n)区间的随机整数,都可以使用如下代码:

     

    复制代码代码如下:


    int n2 = r.nextInt(n);
    n2 = Math.abs(r.nextInt() % n);

     

    f、生成[0,10]区间的整数

     

    复制代码代码如下:


    int n3 = r.nextInt(11);
    n3 = Math.abs(r.nextInt() % 11);

     

    相对于整数区间,[0,10]区间和[0,11)区间等价,所以即生成[0,11)区间的整数。

    g、生成[-3,15)区间的整数

     

    复制代码代码如下:


    int n4 = r.nextInt(18) - 3;
    n4 = Math.abs(r.nextInt() % 18) - 3;

     

    生成非从0开始区间的随机整数,可以参看上面非从0开始的小数区间实现原理的说明。

    h、几率实现

    按照一定的几率实现程序逻辑也是随机处理可以解决的一个问题。下面以一个简单的示例演示如何使用随机数字实现几率的逻辑。

    在前面的方法介绍中,nextInt(int n)方法中生成的数字是均匀的,也就是说该区间内部的每个数字生成的几率是相同的。那么如果生成一个[0,100)区间的随机整数,则每个数字生成的几率应该是相同的,而且由于该区间中总计有100个整数,所以每个数字的几率都是1%。按照这个理论,可以实现程序中的几率问题。

    示例:随机生成一个整数,该整数以55%的几率生成1,以40%的几率生成2,以5%的几率生成3。实现的代码如下:

     

    复制代码代码如下:


    int n5 = r.nextInt(100);
    int m; //结果数字
    if(n5 < 55){ //55个数字的区间,55%的几率
        m = 1;
    }else if(n5 < 95){//[55,95),40个数字的区间,40%的几率
        m = 2;
    }else{
        m = 3;
    }

     

    因为每个数字的几率都是1%,则任意55个数字的区间的几率就是55%,为了代码方便书写,这里使用[0,55)区间的所有整数,后续的原理一样。

    当然,这里的代码可以简化,因为几率都是5%的倍数,所以只要以5%为基础来控制几率即可,下面是简化的代码实现:

     

    复制代码代码如下:


    int n6 = r.nextInt(20);
    int m1;
    if(n6 < 11){
        m1 = 1;
    }else if(n6 < 19){
        m1 = 2;
    }else{
        m1 = 3;
    }

     

    在程序内部,几率的逻辑就可以按照上面的说明进行实现。

    4、其它问题

    a、相同种子数Random对象问题

    前面介绍过,相同种子数的Random对象,相同次数生成的随机数字是完全相同的,下面是测试的代码:

     

    复制代码代码如下:


    Random r1 = new Random(10);
    Random r2 = new Random(10);
    for(int i = 0;i < 2;i++){
         System.out.println(r1.nextInt());
         System.out.println(r2.nextInt());
    }

     

    在该代码中,对象r1和r2使用的种子数都是10,则这两个对象相同次数生成的随机数是完全相同的。

    如果想避免出现随机数字相同的情况,则需要注意,无论项目中需要生成多少个随机数字,都只使用一个Random对象即可。

    b、关于Math类中的random方法

    其实在Math类中也有一个random方法,该random方法的工作是生成一个[0,1.0)区间的随机小数。

    通过阅读Math类的源代码可以发现,Math类中的random方法就是直接调用Random类中的nextDouble方法实现的。

    只是random方法的调用比较简单,所以很多程序员都习惯使用Math类的random方法来生成随机数字。

    展开全文
  • random函数汇总

    千次阅读 2018-09-21 22:35:09
    1. random.random random.random()用于生成一个0到1之间的随机浮点数:0&lt;=n&lt;=1 &gt;&gt;&gt; random.random() 0.7086588033796296 2. random.uniform random.uniform(a,b)用于生成一...

    1. random.random

    random.random()用于生成一个0到1之间的随机浮点数:0<=n<=1

    >>> random.random()
    0.7086588033796296

    2. random.uniform

    random.uniform(a,b)用于生成一个指定范围内的随机浮点数若a<b,则a<=n<=b;若a>b,则b<=n<=a.

    >>> random.uniform(12,5)
    6.128208009182529
    
    >>> random.uniform(5,12)
    5.373996230739382
    
    >>> random.uniform(5,5)
    5.0

    3. random.randint

    random.randint(a,b)用于生成一个指定范围内的整数:a<=n<=b;下限必须小于等于上限值,random.randint(20,10)是错误的

    >>> random.randint(10,10)
    10
    
    >>> random.randint(10,21)
    15
    
    >>> random.randint(100,100)
    100

    4. random.randrange

    random.randrange([start],[stop],[step])从指定范围内,按指定基数递增的集合中获取一个随机数。等于random.choice(range([start],[stop],[step]))

    >>> random.randrange(1,100,10)
    61
    
    >>> random.randrange(1,100,10)
    21
    
    >>> random.choice(range(1,100,10))
    71
    
    >>> random.choice(range(1,100,10))
    41
    
    >>> random.randrange(100,100)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/random.py", line 199, in randrange
        raise ValueError("empty range for randrange() (%d,%d, %d)" % (istart, istop, width))
    ValueError: empty range for randrange() (100,100, 0)

    5. random.choice

    random.choice(seq)从序列中获取随机一个元素

    choices(population, weights=None, *, cum_weights=None, k=1)这个方法平时比较少用,population是一个可迭代对象,weights是相对权重,cum_weights是绝对权重,k表示随机获取的个数。

    需要注意2点:

    1. weights和cum_weights不能同时使用。

    2.population与weights,population与cum_weights需一一对应

    >>> random.choice("abcde")
    'd'
    
    >>> random.choice([1,2,3,4])
    2
    
    >>> random.choice((1.1,2.2,3.3,4.4))
    3.3
    
    >>> for i in range(10):
    ...     print(random.choices("abcd",weights=[1,1,7,1],cum_weights=[70,10,5,15],k=1))
    ...
    Traceback (most recent call last):
      File "<stdin>", line 2, in <module>
      File "E:\Programs\Python36\lib\random.py", line 356, in choices
        raise TypeError('Cannot specify both weights and cumulative weights')
    TypeError: Cannot specify both weights and cumulative weights
    
    >>> for i in range(10):
    ...     print(random.choices(['x','y','z'],cum_weights=[70,10,5,15],k=1))
    ...
    Traceback (most recent call last):
      File "<stdin>", line 2, in <module>
      File "E:\Programs\Python36\lib\random.py", line 358, in choices
        raise ValueError('The number of weights does not match the population')
    ValueError: The number of weights does not match the population
    
    >>> for i in range(10):
    ...     print(random.choices(['x','y','z','u'],cum_weights=[70,10,5],k=1))
    ...
    Traceback (most recent call last):
      File "<stdin>", line 2, in <module>
      File "E:\Programs\Python36\lib\random.py", line 358, in choices
        raise ValueError('The number of weights does not match the population')
    ValueError: The number of weights does not match the population
    
    >>> for i in range(10):
    ...     print(random.choices("abcd",weights=[1,1,7,1],k=1))
    ...
    ['b']
    ['c']
    ['c']
    ['c']
    ['c']
    ['c']
    ['a']
    ['a']
    ['c']
    ['c']
    由上可以明显发现,随机获得c的概率更高
    
    >>> for i in range(10):
    ...     print(random.choices(['x','y','z','w'],cum_weights=[70,10,5,15],k=1))
    ...
    ['w']
    ['w']
    ['w']
    ['w']
    ['x']
    ['x']
    ['w']
    ['x']
    ['x']
    ['x']

    6. random.shuffle

    random.shuffle(x[, random])用于将一个列表中的元素打乱

    >>> l=['a','b','c','d','e']
    >>> random.shuffle(l)
    >>> l
    ['d', 'b', 'e', 'c', 'a']

    7. random.sample

    random.sample(seq,k)从指定序列中随机获取指定长度的,且不重复出现的片段

    >>> l=['a','b','c','d','e']
    >>> s=random.sample(l,2)
    >>> s
    ['c', 'a']
    
    >>> l
    ['a', 'b', 'c', 'd', 'e']

    8. random.seed

    random.seed(n)用于改变随机数生成器的种子,指定随机数生成时所用的算法

    >>> random.seed(2)
    >>> random.random()
    0.9560342718892494
    
    >>> random.random()
    0.9478274870593494
    
    

    9. 实践

    写一个函数:随机生成n个整数,n个整数的和等于m

    import random
    def random_num(n, m):
        # 随机生成n个数字
        numbers = [random.random() for _ in range(n)]
        # 计算出 m 与 n个随机数的商
        k = m / sum(numbers)
        # n个随机数分别乘以k,n个数的和接近于m
        result = [int(i * k) for i in numbers]
        # 从result中随机选择一个数,加上m与sum(result)的差数,从而实现sum(result) = m
        result[random.randint(0,n-1)] += m - sum(result)
        print("sum(result)=", sum(result))
        print("result=", result)
    
    
    >>> random_num(5, 100)
    sum(result)= 100
    result= [5, 21, 15, 33, 26]
    >>> random_num(2, 15)
    sum(result)= 15
    result= [2, 13]
    >>>

     

    展开全文
  • JAVA中的Random()

    万次阅读 2019-06-05 14:06:51
    Java中存在着两种Random函数: 一、java.lang.Math.Random; 二、java.util.Random 第一种: 调用这个Math.Random()函数能够返回带正号的double值,该值大于等于0.0且小于1.0,即取值范围是[0.0,1.0)的左闭右开...
  • 生成随机数的类Random和ThreadLocalRandom

    千次阅读 2017-06-21 10:04:18
    java里有伪随机型和安全型两种随机数生成器,伪随机生成器根据特定公式将seed转换成新的伪随机数据的一部分,安全随机生成器在底层依赖到操作系统提供的随机事件来生成数据。安全随机生成器 需要生成加密性强的随机...
  • ThreadLocalRandom类是jdk1.7在juc包下新增的随机数生成器,该类继承于Random类,那既然有Random随机数生成器了,为什么在jdk1.7的时候又新增一个呢?,这是因为Random在多线程坏境下的效率并不理想,在多线程下使用...
  • JAVA 如何使用Random()和ThreadLocalRandom()生成指定范围随机数? 在学习时,看到有Rand()和ThreadLocalRandom()两个类都可以生成随机数,但是Rand()在使用时,默认是从0开始到指定位置内取随机数。 如果想生成例如...
  • 1. Random类及其局限性 一般情况下,我们都会使用java.util.Random来生成随机数(Math.random()也是使用Random实例生成随机数)。 1.1 使用案例: public class RandomTest { public static void main(String[] ...
  • Java中的随机数生成器:Random,ThreadLocalRandom,SecureRandom
  • random()

    千次阅读 2019-03-03 19:19:49
    java中存在两个随机函数,它们分别来自 java.long.Math.random() 和 java.util.Random()其中前者的适用范围比较小,完全可以被后者取代。 java.lang.Math.random() public static double random(); 此方法是一个...
  • random的用法

    千次阅读 2018-03-12 23:39:13
    1,random.random()用于生成一个0到1之间的随机符点数(注意不包含0和1)for i in range(5): a = random.random() print(a)计算结果:0.25408617416039125 0.6985496750082875 0.12241542147176376 0....
  • java中random的用法详解

    万次阅读 多人点赞 2018-04-04 10:52:09
    java中存在两个随机函数,它们分别来自java.long.Math.random()和 java.util.Random();其中前者的适用范围比较小,完全可以被后者取代。一、java.lang.Math.random()方法的用法 ①、方法类型: public static ...
  • Random()

    2019-06-04 11:37:22
    Random() 在Delphi中,有一随机函数,是这样定义的: function Random [ ( Range: Integer) ]; 其中,参数Range为一整数, 该函数返回值也为整数,其范围为: 0< =Random(Range)< Range   ...
  • Java基础入门 Random

    千次阅读 2018-08-11 16:01:41
    在JDK的java.util包中有一个Random类,他可以在指定的取值范围内随机产生数字。在Random类中有两种构造方法 Random() 无参构造方法,用于创建一个伪随机数生成器。 Random(long seed) 有参构造方法,使用一个...
  • np.random.rand()函数

    万次阅读 多人点赞 2018-03-13 09:01:00
    np.random.rand()函数 语法: np.random.rand(d0,d1,d2……dn) 注:使用方法与np.random.randn()函数相同 作用: 通过本函数可以返回一个或一组服从“0~1”均匀分布的随机样本值。随机样本取值范围是[0,1),不...
  • numpy教程:随机数模块numpy.random

    万次阅读 2019-07-15 16:27:43
    随机数种子 RandomState RandomState exposes a number of methods for generating random numbersdrawn from a variety of probability distributions. 使用...
  • numpy.random.uniform介绍

    万次阅读 多人点赞 2016-09-11 23:02:12
    numpy.random.uniform介绍: 1. 函数原型: numpy.random.uniform(low,high,size) 功能:从一个均匀分布[low,high)中随机采样,注意定义域是左闭右开,即包含low,不包含high.
  • numpy.random用法

    万次阅读 2018-08-23 11:25:33
    最近发现numpy的random用法有很多,不注意很容易混淆,今天参考几个博客内容整理了一下。 numpy.random.randint low、high、size三个参数。默认high是None,如果只有low,那范围就是[0,low)。如果有high,范围就是...
  • 【题目】Python之Random.randint()与numpy.random.randint()的区别 参考:Python之Random.randint()与numpy.random.randint()的区别  一、random.randint(a,b):用于生成一个指定范围内的整数。其中参数a是下限...
1 2 3 4 5 ... 20
收藏数 758,257
精华内容 303,302
关键字:

random