一、概述

这个模块实现的伪随机数生成器。 
对于整数,从区间选取。对于序列,随机元素。 
在实线的,有功能来计算均匀分布,正态分布(高斯) ,对数正态分布,负指数,γ和β分布。对于生成的角度分布,冯·米塞斯的分布是可用的。 
几乎所有的模块功能依赖于基本功能随机的( ) ,它生成一个随机浮点均匀的半开区间[ 0.0 , 1.0 ) 。 Python使用Mersenne扭曲为核心的发电机。它产生53位精度浮点值,周期为2**19937-1 。 C语言底层实现是快速和线程。梅森倍捻机是最广泛的测试,随机数生成器的存在之一。然而,作为完全确定性的,所以不适合用于所有目的,并且是完全不适合加密的目的。

该模块提供的功能实际上是必然的random.Random类的隐藏的实例的方法。你可以实例化你自己随机的情况下获得的发电机不共享状态。这对于多线程程序特别有用,创建随机的为每个线程使用不同的实例,并使用jumpahead ( )方法,使之有可能看到每个线程生成的序列不重叠。

在这种情况下,覆盖随机的有getstate ( )的setstate ()和jumpahead ( )方法:随机类也可以,如果你想使用你自己设计的不同的基本生成子类。或者,一种新型的发电机可以提供一个getrandbits ( )方法 - 这让randrange ( )产生的选择了一个任意大的范围内。

random.getstate() 
返回对象捕获发生器的当前内部状态。这个对象可以传递给setstate()来恢复状态

random.setstate(state) 
状态应该已经从以前的调用中获得getstate(),以及setstate()恢复发生器的getstate()被调用的时候的内部状态。

random.getrandbits(k) 
返回具有k随机位的一个Python整数。这种方法是与梅森旋转算法发生器供给和其他一些发生器也可以提供它作为API的可选部分。如果可用,getrandbits()使randrange()来处理任意大的范围。

random.randrange([start], stop[, step]) 
  random.randrange的函数:从指定范围内,按指定基数递增的集合中 获取一个随机数。如:random.randrange(10, 100, 2),结果相当于从[10, 12, 14, 16, … 96, 98]序列中获取一个随机数。random.randrange(10, 100, 2)在结果上与 random.choice(range(10, 100, 2) 等效。

import random
r = random.randrange(10,100,2)
print (r) #

random.randint(A,B) 
返回一个随机整数N使得一个<= N <= B。也可写作randrange(A,B + 1)

r = random.randint(1,10)
print(r) #

random.choice() 
  random.choice从序列中获取一个随机元素。其函数原型为:random.choice(sequence)。参数sequence表示一个有序类型。这里要说明 一下:sequence在python不是一种特定的类型,而是泛指一系列的类型。list, tuple, 字符串都属于sequence。有关sequence可以查看python手册数据模型这一章。下面是使用choice的一些例子:

>>>random.choice(‘abcdefghij’) # Single random element
# ‘c’ >>>weighted_choices = [(‘Red’, 3), (‘Blue’, 2), (‘Yellow’, 1), (‘Green’, 4)]
>>>population = [val for val, cnt in weighted_choices for i in range(cnt)] # 列表生成式
>>>population
# [‘Red’, ‘Red’, ‘Red’, ‘Blue’, ‘Blue’, ‘Yellow’, ‘Green’, ‘Green’, ‘Green’, ‘Green’] >>>random.choice(population)
# ‘Green’

random.shuffle() 
random.shuffle的函数原型为:random.shuffle(x[, random]),用于将一个列表中的元素打乱。如:

>>>p = [“studying”,”python”,”makes”,”me”,”fun”]
>>>random.shuffle(p) # 乱序
>>>print (p)
#结果: [‘fun’, ‘python’, ‘studying’, ‘makes’, ‘me’]

random.sample() 
  random.sample的函数原型为:random.sample(sequence, k),从指定序列中随机获取指定长度的片断。sample函数不会修改原有序列。

li=[1,2,3,4,5,6,7,8,9,10,11,12,13]
s = random.sample(li,2)
print(s) # [7, 11] s = random.sample(li,5)
print(s) # [2, 3, 9, 13, 12] s = random.sample("asddsfsf",3)
print(s) # ['f', 'd', 's']

random.random() 
返回范围为[0.0,1.0)的下一个随机浮点数。

print(random.random) # <built-in method random of Random object at 0x0313C340>

print(random.random()) # 0.9765901824412893

random.uniform(A,B) 
返回一个随机浮点数N使得一个<= N <= b的要<= B和B <= N <=一对B <一个。

print(random.uniform(1,10)) # 2.4537297196491257

print(random.uniform) # <bound method Random.uniform of <random.Random object at 0x02F9C2D8>>

洗牌:

>>>items = [1, 2, 3, 4, 5, 6, 7]
>>>random.shuffle(items) >>>print(items) # [7, 3, 2, 5, 6, 4, 1]

练习1 : 写函数生成一个6位数的验证码

def get_code(n=6):
code = ""
for i in range(n):
num = random.randint(0,9)
code += str(num)
return code
print(get_code())

结果

练习2 : 写函数生成一个包含数字,小写字母和大写字母的验证码

  提示:ascii码 A-Z为 65-90,a-z为97-122

def get_code(n=6):
code = ""
for i in range(n):
num = str(random.randint(0,9))
alpha_upper = chr(random.randint(65, 90))
alpha_lower = chr(random.randint(97,122))
c = random.choice([num,alpha_lower,alpha_upper])
code += c
return code
print(get_code())

结果

练习3 : 写一个发红包函数,接受两个参数:金额 个数,每个人取到钱的几率是一样的

import random
def lucky_money(money,num): # 传入金额和个数
ret = random.sample(range(1,money*100),num-1)
ret.sort()
ret.insert(0,0)
ret.append(money*100)
for i in range(len(ret)-1):
money = ret[i+1] - ret[i]
yield money/100
for money in lucky_money(200,15): 传入参数,循环取出所有值
print(money)

发红包1

import random
def bouns(money,amount):
while amount:
if amount == 1:
yield float("%.2f" % money)
else :
money1 = random.uniform(0,money)
money2 = random.uniform(1/amount,3/amount)*money1
money -= float("%.2f" % money2)
yield float("%.2f" % money2)
amount -= 1
g = bouns(200,10)
print(list(g))

发红包2

python 随机数模块 -- random的更多相关文章

  1. python模块 | 随机数模块—random模块

    python随机数模块 random - 生成伪随机数,该模块实现了各种分布的伪随机数生成器. 对于整数,从范围中有统一的选择. 对于序列,存在随机元素的统一选择.用于生成列表的随机排列的函数.以及用 ...

  2. [ Python入门教程 ] Python生成随机数模块(random)使用方法

    1.使用randint(a,b)生成指定范围内的随机整数.randint(a,b)表示从序列range([a,b])中获取一个随机数,包括b. >>> random.randint( ...

  3. python常用模块——random模块

    参考博客:http://www.360doc.com/content/14/0430/11/16044571_373443266.shtml 今天突然想起python该怎么生成随机数?查了一下,贴出实 ...

  4. python shutil模块&random模块

    shutil模块 import shutil shutil.copyfileobj(open("os_.py", "r"), open("os_2.p ...

  5. Python:time模块/random模块/os模块/sys模块

    time 模块 #常用方法 1.time.sleep(secs) (线程)推迟指定的时间运行.单位为秒. 2.time.time() 获取当前时间戳 python中时间日期格式化符号: %y 两位数的 ...

  6. python 基本模块 random、os、sys

    一.random模块 所有关于随机相关的内容都在random模块中 import random print(random.random()) # 0-1⼩数 print(random.uniform( ...

  7. python常用模块: random模块, time模块, sys模块, os模块, 序列化模块

    一. random模块  import random # 任意小数 print(random.random()) # 0到1的任意小数 print(random.uniform(-10, 10)) # ...

  8. python之模块random,time,os,sys,序列化模块(json,pickle),collection

    引入:什么是模块:   一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类型. 1.使用python编写的代码(.py ...

  9. Python3学习笔记(十六):随机数模块random

    一.random模块 1.random.random(): 返回0-1之间的随机浮点数 import random print(random.random()) 0.9348690085059901 ...

随机推荐

  1. ArrayList源码中的两个值得注意的问题

    1.“拖泥带水”的删除 测试代码: package com.demo; import java.util.ArrayList; public class TestArrayList { public ...

  2. 使用awk按照行数切割文件

    最近在做一个事情,需要将一个文本文件按照行数进行切割,然后用了,awk的方法,感觉很好用, 记录一下. 脚本如下: #!/bin/bash ## 文件效果: 根据行数来切割文件 ## 参数1为要切割的 ...

  3. Ionic app 上传图片之webApi接口

    App上传图片对应的webApi服务端是怎么处理的呢? using System; using System.Collections.Generic; using System.Diagnostics ...

  4. 关于LCA

    LCA:最近公共祖先 指在有根树中,找出某两个结点u和v最近的公共祖先 如图,5,7的最近公共祖先就是3 接下来,我们来了解如何求解LCA No.1 暴力 首先想到的肯定是暴力,我们搜索,从两个节点一 ...

  5. 蓝牙 link timeout分析

    蓝牙主机和蓝牙设备建立连接之后,会在l2cap 层面上建立相应的channel,这些channel 基本上是用于各种不同的profile 或者protocol 进行通信用的. 当相应的profile或 ...

  6. Python从菜鸟到高手(2):清空Python控制台

    执行python命令会进入Python控制台.在Python控制台中可以用交互的方式执行Python语句.也就是执行一行Python语句,会立刻返回执行结果.   当Python控制台输入过多的Pyt ...

  7. hadoop-mapreduce-(1)-统计单词数量

    编写map程序 package com.cvicse.ump.hadoop.mapreduce.map; import java.io.IOException; import org.apache.h ...

  8. pair work结对编程(张艺 杨伊)

    一.结对编程人员: 张艺(学号后三位:185) 杨伊(学号后三位:151) 二.这是我们工作的样子:(图片) 三.结对编程优缺点:  优点:  1.结对编程时间紧密,在一定程度上可以督促双方学习,提高 ...

  9. 结构化分析(SA)

    1.什么叫模型?我觉得它的关键字:抽象 重要特征 降低复杂度. 2.软件设计的方法 分类:面向功能~,面向对象的设计. 面向数据流的方法是在结构化分析中提到的. 哦~ 3.面向数据流的结构化分析 特点 ...

  10. 软件工程项目之摄影App

    摄影app 开发人员:Ives & Dyh 开发功能: 摄影师注册与认证,为年轻摄影师提供成长的空间,发挥一技之长的平台. 用户注册与验证,为有摄影需求的人提供选择摄影师进行个性化拍摄的平台. ...