讲师中心 微信公众号
AI工具推荐 视频效率加速

Python怎么生成随机数_random模块randint与choice用法

酷晨同学_3084

酷晨同学_3084

发布时间:2026-03-31 10:20:52

|

783人浏览过

|

来源于php中文网

原创

randint(a, b) 生成包含两端的整数随机数,如 randint(1, 6) 返回 1~6(含),易与 range 或 randrange 的左闭右开混淆,导致逻辑错误;使用时须确保 a ≤ b。

python怎么生成随机数_random模块randint与choice用法

randint 生成整数随机数,但边界值容易搞反

randint 是最常用的整数随机函数,但它和 range 不同:两个参数都**包含在内**。比如 randint(1, 6) 可能返回 1、2、3、4、5 或 6 —— 不是 1 到 5。新手常误以为它像 random.randrange(1, 6) 那样左闭右开,结果多出一个值或少一个值。

常见错误现象:ValueError 倒不常有,但逻辑错位很隐蔽,比如模拟骰子却出现 0 或 7;或者做索引时越界(如用 randint(0, len(lst)) 而不是 randint(0, len(lst)-1))。

  • 用 randint(a, b) 时,确保 a ,否则直接抛 <code>ValueError
  • 需要「左闭右开」行为(如取索引),优先用 randrange(a, b) 或 choice(range(a, b))
  • 如果只是想从固定范围选一个整数,且边界明确,randint 最直白;但涉及循环、索引、分片时,建议统一用 randrange 避免混淆

choice 适合从序列里抽一个元素,但不能传字符串字面量当“单个选项”

choice 的输入必须是**非空序列**(list、tuple、str、bytes 等),但它对 str 的处理常被误解:传入 "abc" 会随机返回 'a'、'b' 或 'c',而不是把整个字符串当一个选项。

典型翻车场景:想从几个字符串中随机选一个,却写成 choice("apple", "banana", "cherry") —— 这会报 TypeError: choice() takes exactly one argument;或者误写成 choice("apple"),结果只在字母间挑。

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

Li Python Sec Check
Li Python Sec Check

Python 安全规范检查工具:基于 CloudBase 规范、腾讯安全指南,LLM 智能分析(默认禁用,优先本地执行)

下载
  • 从多个字符串中选一个,得包成列表:choice(["apple", "banana", "cherry"])
  • 如果序列只有一个元素(比如 [42]),choice 永远返回它,不会报错,但可能掩盖逻辑漏洞
  • choice 对 str 和 bytes 是按字符/字节抽,不是按“单词”抽 —— 这是设计如此,不是 bug

randint 和 choice 性能差异小,但 choice 依赖序列长度,randint 不依赖数据

两者底层都调用同一个随机数生成器(_random.Random().random()),所以性能差别几乎可以忽略。真正影响选择的是语义和输入结构。

例如,要从 [10, 20, 30, 40] 里随机取一个数,用 choice([10, 20, 30, 40]) 更自然;但如果只是要 10~40 之间任意整数,randint(10, 40) 不用构造列表,内存更省,也更清晰。

  • choice(seq) 时间复杂度是 O(1),但前提是 len(seq) 是 O(1) 操作(list、str 是,而某些自定义迭代器可能不是)
  • randint(a, b) 完全不检查输入内容,只做算术运算,所以哪怕 a 和 b 是超大整数(如 10**100),只要不溢出 Python int,它就照算
  • 如果序列很大(比如百万级 list),又只需要一个随机元素,choice 仍是首选 —— 它不会遍历,只取索引

别忘了先 import random,且不要重命名模块破坏可读性

几乎所有问题都卡在这一步:NameError: name 'randint' is not defined 或 AttributeError: module 'random' has no attribute 'randint'。根本原因只有两个:没导入,或导入方式不对。

常见错误写法:from random import *(污染命名空间)、import random as r 然后写 r.randint(1,6)(看似省事,但团队协作时别人看不懂 r 是啥)。

  • 标准写法就是 import random,然后用 random.randint(1, 6) 和 random.choice([...])
  • 如果确定只用这两个函数,可以用 from random import randint, choice,但别加 as 改名
  • 绝对不要在函数里反复 import random —— 模块导入是全局的,重复 import 没副作用但显得慌乱

真正容易被忽略的是:当你在类方法或闭包里多次调用 randint 或 choice,却没意识到它们共享同一个全局随机状态。如果需要隔离随机行为(比如单元测试、多线程),得显式创建 random.Random() 实例,而不是依赖模块级别的函数。

热门AI工具

更多
音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

1671

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

4164

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1669

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

24157

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2967

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2987

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

1163

2023.08.11

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

596

2023.08.10

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

100

2026.09.30

热门下载

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

精品课程

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn