day5模块学习--random模块

 

Python中的random模块用于生成随机数

下面具体介绍random模块的功能:

 

    1.random.random()

    #用于生成一个0到1的浮点数   随机浮点数:0<= n < 1.0

    >>> import random
  >>> random.random()
  0.10014889182317255
  >>> random.random()
  0.9318386759483899
  >>> random.random()
  0.7933067981427825


    2.random.uniform(a,b)

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

    >>> random.uniform(1,4)
  3.1024302829110297
  >>> random.uniform(4,1)
  3.604505878728916
  >>> random.uniform(2,3)
  2.987738694261377
  >>> random.uniform(3,3)
  3.0

    3.random.randint(a, b)

    #用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,生成的随机数n:a <= n <= b

    >>> random.randint(1,3)
  2
  >>> random.randint(3,3)
  3

    4.random.randrange([start], stop[, step])

    #从指定范围内,按指定基数递增的集合中,获取一个随机数

    random.randrange(10,30,2),结果相当于从[10,12,14,16,...,28]序列中获取一个随机数。random.randrange(10,30,2)在结果上与random.choice(range(10,30,2)等效。

    一直以为random.randrange()与random.randint()功能类似,只是randint()包含下限,而random.randrange()不包含下限,原来random.randrange()可以指定步长,说明这是一个区域其实,random.randint()在上下限随机去一个值,random.randrange()是在数列中随机去一个数。

    >>> random.randrange(2,10,3)
  5
  >>> random.randrange(2,10)
  3
  >>> random.randrange(2,10,3)
  8

    5.random.choice(sequence)

    #参数sequence表示一个有序类型。从序列中获取一个随机元素,sequence在Python不是一种特定的类型,而是泛指一系列类型。list,tuple,字符串(str)都属于sequence。

    random.chocice是从sequence中随机取一个元素,如列表,字符串,元组中随机取一个元素。

    >>> name = "alexssb"
  >>> names = ("alex","250","is")
  >>> x = list(range(2,8))
  >>> random.choice(name)     #从字符串中取值
  'a'
  >>> random.choice(names)    #从元组中随机提取元素
  'alex'
  >>> random.choice(names)   
  'is'
  >>> random.choice(x)         #从列表中随机提取元素
  4

    6.random.shuffle(x[, random])

    #用于将一个列表中的元素打乱,即将列表内的元素随机排列。

    >>> random.shuffle(x)
  >>> x
  [3, 4, 7, 5, 6, 2]

    random.shuffle(list)用于将列表里面的元素随机打乱。

    7.random.sample(sequence, k)

    #从指定序列中随机获取指定长度的片断并随机排列。sample函数不会修改原有序列。

    >>> names = ["alex","tenglan","chunyun","geng","aoi","cang"]
  >>> random.sample(names,4)
  ['chunyun', 'alex', 'geng', 'aoi']
  >>> names
  ['alex', 'tenglan', 'chunyun', 'geng', 'aoi', 'cang']

    random.sample(sequence,k)从列表中随机获取一个元素

    下面现在用random模块来写一个随机验证码。我们知道,随机验证码有大小写字母组成。也包含数字。下面来看看如何生成一个随机验证码。

import random

def verification_code():
    '''生成一个随机验证码'''
    lists = list(range(65,91))
    code = ""
    '''大写字母对应的数字编码'''
    '''定义一个空的列表,用于存放大小写字母对应的值'''
    for num in range(97,123):
        '''小写字母对应的数字编码,凭借到一块'''
        lists.append(num)

    for i in range(6):
        random_num = random.randint(1,6)       #随机值,当随机值与循环值相等的时候是字母,不相等的时候是数字,这样就生成了字母加数字的随机验证码
        if i == random_num:
            string = chr(random.choice(lists))
        else:
            string = str(random.randint(0,9))
        code += string

    return code

x = verification_code()
print(x)

    上面代码生成一个6位数的随机验证码。

    也可以生成一个随机验证码,让每次里面都包含数字和字母。如下:

   

import random

def verification_code():
    '''生成一个随机验证码'''
    '''生成一个65-90,97-122的序列'''
    numbers = list(range(65,123))
    for num in range(91,97):
        numbers.remove(num)

    '''把序列进行打乱'''
    random.shuffle(numbers)
    random_strs = random.sample(numbers,2)
    '''生成两个随机数'''
    random_nums = []
    '''存放随机验证码'''
    for random_str in random_strs:
        random_nums.append(chr(random_str))
    for random_num in range(0,2):
        random_nums.append(str(random.randint(1,9)))

    code = "".join(random_nums)

    return code

x_code = verification_code()
print(x_code)

    上面代码生成一个随机验证码,每次都包含字母,不会只有数字或者之后字母的情况发生。

posted @ 2017-07-20 22:56  (野生程序员)  阅读(389)  评论(0编辑  收藏  举报