Python3实现随机数及问题分析

举报
SHQ5785 发表于 2022/10/19 08:43:14 2022/10/19
【摘要】 一、random 随机函数random是用于生成随机数的,可以利用它随机生成数字或者选择字符串。random.seed(x)改变随机数生成器的种子seed。一般不必特别去设定seed,Python会自动选择seed。random.random() 用于生成一个随机浮点数n,0 <= n < 1random.uniform(a,b) 用于生成一个指定范围内的随机浮点数,生成的随机整数a<=n...

一、random 随机函数

random是用于生成随机数的,可以利用它随机生成数字或者选择字符串。

  • random.seed(x)改变随机数生成器的种子seed。一般不必特别去设定seedPython会自动选择seed

  • random.random() 用于生成一个随机浮点数n,0 <= n < 1

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

  • random.randint(a,b)用于生成一个指定范围内的整数,a为下限,b为上限,生成的随机整数a<=n<=b;若a=b,则n=a;若a>b,报错

  • random.randrange([start], stop [,step]) 从指定范围[start,stop)内,按指定基数递增的集合中获取一个随机数,基数缺省值为1

  • random.choice(sequence)从序列中获取一个随机元素,参数sequence表示一个有序类型,并不是一种特定类型,泛指listtuple,字符串等。

  • random.shuffle(x[,random]) 用于将一个列表中的元素打乱(洗牌),会改变原始列表。

  • random.sample(sequence,k) 从指定序列中随机获取k个元素作为一个片段返回,不会改变原有序列。

但是,有一点需要注意:python random是伪随机数。

那么,可以借用python random实现真随机数吗?答案是No。所谓真随机数,是要求根据绝对随机事件产生的数,也就是说要求要有一个无因果关系的随机事件,那么,这其实只存在与哲学领域……

目前的随机数产生都是统计上的随机,因为随机源都是自然事件,顶天了算是混沌变量,绝对的无因果大概是不存在的。

不过统计随机基本上都够用了吧……还是老老实实的用random模块吧…

二、代码演示

import random
#随机整数
import string

print(random.randint(0,99))
#随机选取0到100间的偶数
print(random.randrange(0, 101, 2))
#随机浮点数
print(random.random())
print(random.uniform(1, 10))
#随机字符
print(random.choice('abcdefg&#%^*f'))
#多个字符中选取特定数量的字符
print(random.sample('abcdefghij',3))
#多个字符中选取特定数量的字符组成新字符串
# print(string.join(random.sample(['a','b','c','d','e','f','g','h','i','j'], 3)).replace(" ",""))
#随机选取字符串
print(random.choice ( ['apple', 'pear', 'peach', 'orange', 'lemon'] ))
#洗牌
items = [1, 2, 3, 4, 5, 6]
random.shuffle(items)
print("洗牌:", items)
#从指定序列中随机获取k个元素作为一个片段返回,不会改变原有序列
list = []
list = random.sample(items,2)
print(list)

执行结果:

这里写图片描述

这个问题很囧,在外面定义了一个变量 xxx ,然后在Python的一个函数里面引用这个变量,并改变它的值,结果报错local variable 'xxx' referenced before assignment,代码如下:

xxx = 23  
def PrintFileName(strFileName):   
    if xxx == 23:  
        print strFileName  
        xxx = 24  
  
PrintFileName("file")  

错误的意思就是xxx这个变量在引用前还没有定义,这上面不是定义了么?但是后来我把xxx = 24这句去掉之后,又没问题了,后来想起python中有个global关键字是用来引用全局变量的,尝试了一下,果然可以了:

xxx = 23  
def PrintFileName(strFileName):  
    global xxx  
    if xxx == 23:  
        print strFileName  
        xxx = 24  
  
PrintFileName("file")  

原来在python的函数中和全局同名的变量,如果你有修改变量的值就会变成局部变量,在修改之前对该变量的引用自然就会出现没定义这样的错误了,如果确定要引用全局变量,并且要对它修改,必须加上global关键字。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。