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

酷晨同学_3084

酷晨同学_3084

2026-03-31

783人浏览

原创

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"),结果只在字母间挑。

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

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

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

Li Python Sec Check
Li Python Sec Check

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

下载

例如,要从 [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() 实例,而不是依赖模块级别的函数。

Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

python

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

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

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

2023.07.20

1651

4

python能做什么
python能做什么

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

2023.07.25

4124

7

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

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

2023.07.31

1669

3

python教程
python教程

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

2023.08.03

23897

23

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

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

2023.08.04

2927

5

python eval
python eval

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

2023.08.04

2967

5

scratch和python区别
scratch和python区别

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

2023.08.11

1143

5

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

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

2023.08.10

596

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2283

5

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程