0

0

python怎么生成一个随机数_python随机数生成方法汇总

冰火之心

冰火之心

发布时间:2025-09-13 11:10:02

|

810人浏览过

|

来源于php中文网

原创

Python生成随机数主要使用random模块,提供random()、uniform()、randint()、randrange()等函数生成浮点数和整数,choice()、sample()、shuffle()处理序列随机操作,而secrets模块用于加密安全的随机性需求。

python怎么生成一个随机数_python随机数生成方法汇总

Python要生成随机数,核心就是使用内置的

random
模块。它能提供各种类型的随机数,无论是简单的整数、浮点数,还是从序列中随机选择元素,甚至对序列进行洗牌,都能轻松实现。

解决方案

在Python中,生成随机数主要围绕

random
模块展开。这个模块提供了一系列函数来满足不同的随机数需求。

  • 生成0到1之间的随机浮点数:

    random.random()
    会返回一个0.0到1.0之间(不包含1.0)的浮点数。这是最基础的随机数生成方式,很多时候我们会基于它来构造其他范围的随机数。

    import random
    print(random.random()) # 示例输出:0.73289...
  • 生成指定范围内的随机浮点数:

    random.uniform(a, b)
    可以生成一个在
    a
    b
    之间(包含
    a
    b
    )的随机浮点数。这比先生成0到1再手动缩放要方便得多。

    立即学习Python免费学习笔记(深入)”;

    import random
    print(random.uniform(10, 20)) # 示例输出:14.567...
  • 生成指定范围内的随机整数:

    random.randint(a, b)
    会返回一个在
    a
    b
    之间(包含
    a
    b
    )的随机整数。这个函数用起来非常直观,是我最常用来获取整数随机数的方法。

    import random
    print(random.randint(1, 10)) # 示例输出:5
  • 从指定范围按步长生成随机整数:

    random.randrange(start, stop, step)
    range()
    函数类似,但它会从
    range(start, stop, step)
    生成的序列中随机选择一个整数。
    stop
    是不包含的。

    import random
    print(random.randrange(0, 100, 5)) # 示例输出:75 (必须是0, 5, 10...这样的数)
  • 从序列中随机选择一个元素:

    random.choice(sequence)
    能从非空序列(如列表、元组、字符串)中随机挑选一个元素。这在需要随机抽取选项时非常有用。

    import random
    choices = ['apple', 'banana', 'cherry']
    print(random.choice(choices)) # 示例输出:banana
  • 从序列中随机选择K个不重复的元素:

    random.sample(population, k)
    会从
    population
    序列中随机抽取
    k
    不重复的元素,以列表形式返回。这对于抽奖、生成不重复的随机组合等场景非常关键。

    import random
    numbers = list(range(1, 11))
    print(random.sample(numbers, 3)) # 示例输出:[7, 2, 9]
  • 打乱序列的顺序:

    random.shuffle(sequence)
    会将序列中的元素随机排列原地修改序列。注意,这个函数没有返回值。

    import random
    cards = ['A', 'K', 'Q', 'J', '10']
    random.shuffle(cards)
    print(cards) # 示例输出:['Q', '10', 'A', 'J', 'K']

Python中生成随机整数有哪些具体方法?它们之间有什么区别

在Python里,生成随机整数主要靠

random.randint()
random.randrange()
这两个函数。虽然它们都能生成整数,但在使用场景和参数处理上还是有些细微的差别,我个人觉得理解这些差异能帮助我们更精确地控制随机数的生成。

random.randint(a, b)
是最直接的,它会返回一个在
a
b
之间(包括
a
b
两端)的随机整数。比如说,
random.randint(1, 10)
就可能生成1、2、...直到10的任何一个整数。它的优点就是直观,边界条件明确,你想要一个闭区间的整数,用它准没错。在我需要一个比如1到100的随机分数时,我通常会毫不犹豫地选择
randint

random.randrange(start, stop, step)
则更像是
range()
函数的随机版本。它会从
range(start, stop, step)
这个序列中随机挑选一个整数。这里的
stop
不包含的,和
range()
的行为一致。
step
参数允许你指定步长,这意味着你可以生成只包含特定倍数的随机数。比如
random.randrange(0, 100, 5)
,它只会生成0, 5, 10, ... 95这些数字中的一个。我发现当我们需要生成一个符合特定模式的随机数,比如只取偶数、只取某个间隔的数时,
randrange
的灵活性就体现出来了。比如,要从1到100之间生成一个随机偶数,用
randrange(2, 101, 2)
就比
randint
后再判断是否为偶数要优雅得多。所以,简单直接的闭区间用
randint
,需要步长或开区间的灵活性时,
randrange
则是更好的选择。

如何在Python中生成随机浮点数?精度和范围如何控制?

生成随机浮点数,Python的

random
模块提供了
random.random()
random.uniform(a, b)
两个主要工具。它们各有侧重,用起来也挺顺手的。

random.random()
是最基础的,它会返回一个
[0.0, 1.0)
区间内的随机浮点数,也就是说,它可能等于0.0,但永远不会等于1.0。这个函数通常作为更复杂随机数生成的基础。比如,如果你想生成一个
[min_val, max_val)
范围的浮点数,你可以这样做:
min_val + (max_val - min_val) * random.random()
。这虽然有效,但有时会觉得有点绕。

这时候

random.uniform(a, b)
就显得更方便了。它能直接生成一个在
a
b
之间(包含
a
b
,即
[a, b]
[b, a]
,取决于
a
b
的大小)的随机浮点数。比如,
random.uniform(1.5, 3.8)
就能直接给你一个在这个范围内的数。我个人在模拟一些连续变量,比如传感器读数或者某个物理量时,经常会用到
uniform
,因为它能直接设定上下限,代码看起来也更清晰。

至于精度控制,Python的浮点数默认是双精度(通常是64位),这意味着它们已经有相当高的精度了。如果你需要将随机浮点数限制在特定的十进制位数,通常的做法是先生成浮点数,然后使用

round()
函数进行四舍五入。例如,
round(random.uniform(1.0, 10.0), 2)
就能得到一个两位小数的随机浮点数。不过要注意,
round()
函数在处理浮点数时,可能会因为浮点数本身的表示问题,在某些边缘情况下表现得不那么“直观”,但对于大多数应用来说,这已经足够了。如果对精度有极高的要求,或者需要进行大量精确的十进制运算,可能需要考虑使用
decimal
模块,但那通常是更专业的场景了。

除了基本的数字,Python还能如何处理序列和加密安全的随机性?

除了生成基础的数字,

random
模块在处理序列方面也提供了非常实用的功能,这在很多实际场景中都非常有用。同时,当涉及到安全敏感的随机性需求时,我们还需要引入另一个模块:
secrets

对于序列处理,我们有:

  • 随机选择一个元素 (

    random.choice
    ): 这个函数非常简单直观。比如,你有一个选项列表
    ['石头', '剪刀', '布']
    ,想随机选一个,
    random.choice(['石头', '剪刀', '布'])
    就能轻松搞定。它会从给定的非空序列中随机挑出一个元素返回。这在模拟抽奖、随机分配任务等场景中特别方便。

  • 随机选择多个不重复的元素 (

    random.sample
    ): 当我们需要从一个集合中抽取多个不同的样本时,
    random.sample(population, k)
    是不二之选。它会从
    population
    中随机选择
    k
    个唯一的元素,并以列表的形式返回。比如,从一副牌中抽五张牌,或者从班级里随机选三名同学参加活动,
    random.sample
    就能完美胜任。它保证了抽取的元素不会重复,这在很多实际应用中是至关重要的。

  • 打乱序列顺序 (

    random.shuffle
    ):
    random.shuffle(x)
    会将序列
    x
    中的元素原地随机打乱。这意味着它直接修改了原始列表,没有返回值。这个功能在模拟洗牌、随机化实验顺序或者需要打乱数据以消除潜在偏差时非常有用。我经常用它来打乱数据集,确保模型训练的随机性。

谈到加密安全的随机性,这里就有一个非常重要的区分了。

random
模块生成的随机数是伪随机数,它们是通过一个确定性算法从一个“种子”值生成的。这意味着,如果知道种子,就能预测接下来的所有随机数。这对于一般的模拟或游戏是没问题的,但对于密码学应用(比如生成密码、安全令牌、密钥等)来说,这是绝对不安全的。

在这种需要高强度随机性的场景下,Python提供了

secrets
模块。
secrets
模块旨在生成适用于加密用途的强随机数。它内部依赖于操作系统提供的随机源(比如
/dev/urandom
CryptGenRandom
),这些随机源被认为是密码学安全的。

secrets
模块的一些常用功能包括:

  • 生成安全整数 (

    secrets.randbelow(n)
    ): 返回一个
    [0, n)
    范围内的随机整数,这个整数是密码学安全的。

  • 生成安全随机选择 (

    secrets.choice(sequence)
    ):
    random.choice
    类似,但它使用的随机源是密码学安全的。

  • 生成随机字节串 (

    secrets.token_bytes([nbytes])
    ): 生成指定长度的随机字节串,非常适合用作密钥或加密盐。

  • 生成随机十六进制字符串 (

    secrets.token_hex([nbytes])
    ): 生成一个随机的十六进制字符串,通常用于生成API密钥、会话令牌等。

  • 生成随机URL安全字符串 (

    secrets.token_urlsafe([nbytes])
    ): 生成一个URL安全的随机文本字符串,常用于生成密码重置链接中的令牌。

我个人认为,理解

random
secrets
之间的区别至关重要。我见过不少开发者在需要生成密码或安全令牌时,不假思索地使用了
random
模块,这无疑埋下了严重的安全隐患。只要是涉及用户数据安全、身份验证或者任何需要防止预测的场景,
secrets
模块才是唯一正确的选择。记住,安全性不是小事,选对工具是第一步。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

298

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

212

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1500

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

623

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

613

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

588

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

171

2025.07.29

c++字符串相关教程
c++字符串相关教程

本专题整合了c++字符串相关教程,阅读专题下面的文章了解更多详细内容。

83

2025.08.07

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

84

2026.01.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.3万人学习

Django 教程
Django 教程

共28课时 | 3.6万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号