首页 > 其他分享 >标准库之rand

标准库之rand

时间:2024-03-14 16:12:16浏览次数:19  
标签:rand Rand fmt ---- 标准 func Println

目录

一、rand库介绍

  • 在Go中,有两个包提供了rand,分别为 math/randcrypto/rand, 对应两种应用场景

    • math/rand 包实现了伪随机数生成器。也就是生成 整型和浮点型

    • crypto/rand 包实现了用于加解密的更安全的随机数生成器

二、math/rand

  • 该包中根据生成伪随机数是是否有种子(可以理解为初始化伪随机数),可以分为两类:

​ 1、有种子。通常以时钟,输入输出等特殊节点作为参数,初始化。该类型生成的随机数相比无种子时重复概率较低。

​ 2、无种子。可以理解为此时种子为1, Seed(1)。 // 如果无种子,编译后运行的结果是定值

系统每次都会先用Seed函数初始化系统资源,如果用户不提供seed参数,则默认用seed=1来初始化,这就是为什么每次都输出一样的值的原因,而且,Seed方法是并发安全的.
所谓种子,通俗理解可以理解为一个抽奖的奖池,我们自定义一个奖池,从我们的奖池中进行随机抽奖,种子就是我们奖池中的数据

1. 基本使用

func main(){

	r := rand.New(rand.NewSource(time.Now().UnixNano()))
	fmt.Println(r.Int31())
  	fmt.Println(rand.Int31()) //没有种子, 一旦编译过后(go build),永远不变
  
    //或者如下方式使用种子
    rand.Seed(time.Now().UnixNano())
    fmt.Println(rand.Int31())

}

2. 常用的方法

1. 按类型随机类:
func (r *Rand) Int() int
func (r *Rand) Int31() int32
func (r *Rand) Int63() int64
func (r *Rand) Uint32() uint32
func (r *Rand) Float32() float32  // 返回一个取值范围在[0.0, 1.0)的伪随机float32值
func (r *Rand) Float64() float64  // 返回一个取值范围在[0.0, 1.0)的伪随机float64值


2. 指定随机范围类:
func (r *Rand) Intn(n int) int  // [0,n)
func (r *Rand) Int31n(n int32) int32
func (r *Rand) Int63n(n int64) int64

3. 生成定长的随机数

package main

import (
	"fmt"
	"math/rand"
)
//生成固定长度4位,当位数不够是,可以通过前边补0达到长度一致
func main(){
	for i := 0; i < 10; i++ {
		res:=rand.Int31()
		fmt.Print(res,"----")
		fmt.Printf("%.4d \n", res%10000)  // 对10000取余数,固定4位长度
	}
}

/*
124796837----6837  
1086030680----0680   // 长度不够就补0
254278984----8984  
1138194698----4698 
1118617863----7863 
823792992----2992  
38245577----5577   
1077832759----2759 
1788743202----3202 
349751033----1033 
*/

三、crypto/rand

  • 该包中常用的是 func Read(b []byte) (n int, err error) 这个方法, 将随机的byte值填充到b 数组中,以供b使用
package main

import (
	"crypto/rand"
	"fmt"
)

func main() {
	b := make([]byte, 5)
	fmt.Println(b)
	_, err := rand.Read(b)
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println(b)
}

/*
[0 0 0 0 0]
[223 116 244 224 32]  // 随机生成的
*/

标签:rand,Rand,fmt,----,标准,func,Println
From: https://www.cnblogs.com/Mcoming/p/18073095

相关文章

  • 标准库之path和filepath
    目录一、Path包1.常用函数2.示例二、filepath1.常用函数2.示例一、Path包实现的功能和python的os模块的os.path的方法类似注意:该包只对/路径有效,windows的\路径无效1.常用函数path包实现了对用斜杠进行分隔的路径进行操作的函数funcIsAbs(pathstring)bool//......
  • 标准库之context(很重要)
    目录标准库之context一、为什么需要context1.基本并发的示例2.全局变量方式的并发3.通道方式的并发4.官方版的方案二、Context初识1.Context接口2.两个顶级Context(1)Background()和TODO()(2)区别3.派生Context(With系列函数)(1)WithCancel(可取消context)i.context控制goroutin......
  • 第四章 python的标准库
    第四章python的标准库一、`os`1.1基本功能1.2文件和目录操作1.2.1目录操作1.2.2文件操作1.3路径操作1.4环境变量1.4.1`os.environ`1.4.2`os.pathsep`1.4.3`os.name`1.4.4`os.system()`1.4.5`os.putenv(key,value)`和`os.unsetenv(key)`1.5进程管理1.5......
  • Rust 标准库 Trait 指南
    部分内容来自Rust2021年期刊内容目录引言Trait基础自动Trait泛型Trait格式化Trait操作符Trait转换Trait错误处理迭代器TraitI/OTrait总结引言你是否曾想过下面这些trait有什么不同?Deref<Traget=T>,AsRef<T>,以及Borrow<T>?Clone,Copy,和ToOwned?From......
  • 单据类型参数设置增加自定义参数并通过BOS标准函数调用
     1、BOS函数说明2、创建对应单据的【单据类型参数】,继承自【单据类型参数模版】。 3、在单据参数中绑定【单据类型参数对象】 4、参数设置设置对应参数 5、在BOS中调用标准函数进行使用。 ......
  • python 猜数字 random
    #猜数字如果数字太大则输出Toolarge!如果数字太小则输出Toosmall!如果猜中则输出Justright!importrandomnumber=random.randint(1,100)whileTrue: num=int(input('输入1-100之间的数')) ifnum>number: print('你猜的数字太大了请重新输入') elifnu......
  • STM32标准库低功耗
    STM32标准库低功耗1.睡眠模式1.1.进入以及退出方法睡眠模式较为简单,仅需要简单调用函数即可,且函数定义处于内核层,不需要引用多余的头文件。睡眠模式:仅内核停止,所有外设仍旧运行。调用"__WFI()"函数,退出方式为任意中断。调用"__WFE()"函数,退出方式为唤醒事件。2.停......
  • AtCoder Grand Contest 022 E Median Replace
    洛谷传送门AtCoder传送门考虑对于一个确定的串怎么判断合法性。容易发现删到某个时刻若\(1\)的个数大于\(0\)的个数了,因为我们肯定不会蠢到在不是全\(1\)的时候删\(111\),所以\(c_1-c_0\)在不是全\(1\)的时候至少是不会变小的。所以我们的目标就是让\(c_1-c_0......
  • 短链接资源集合 - Bitly, Tinyurl, Cutt, Shorturl, Rebrandly etc
    ShortURLPlatformhttps://t.co/网站权重PA:81,DA:94,SpamScore:N/Ahttps://bitly.com/网站权重PA:77,DA:92,SpamScore:3%https://tinyurl.com/app 网站权重PA:76,DA:94,SpamScore:1%https://cutt.ly/ 网站权重PA:68,DA:92,SpamScore:2%http://ow.ly/......
  • 20个Python random模块的代码示例
    本文分享自华为云社区《Python随机数探秘:深入解析random模块的神奇之处》,作者:柠檬味拥抱。标准库random函数大全:探索Python中的随机数生成随机数在计算机科学和数据科学领域中扮演着重要角色,Python的标准库中提供了random模块,用于生成各种随机数。本篇博客将深入探讨random模块......