一、概述
随机数在程序设计中的属于比较基础的内容,主要用于验证场景(如验证码,生成账号对应的密码等),今天结合random模块和string模块来谈谈python中随机数那些事儿。
二、随机数实现相关模块
2.1 random模块
random.random()
返回一个随机浮点数。

>>> import random >>> print(random.random()) 0.1955361585993899 >>> print(random.random()) 0.5912462104266011
andom.randint(a,b)
随机返回a到b之间的一个整型数,注意包括b。

>>> print(random.randint(1, 3)) 1 >>> print(random.randint(1, 3)) 3 >>> print(random.randint(1, 3)) 2 >>> print(random.randint(1, 3)) 3
random.randrange(start, stop, step=1)
返回一个随机整型数,但不包括stop这个值,start和step为可选项,默认值分别为0和1。

>>> print(random.randrange(6, step = 2)) 2 >>> print(random.randrange(6, step = 2)) 3 >>> print(random.randrange(6, step = 2)) 3 >>> print(random.randrange(3, 6, step = 2)) 3 >>> print(random.randrange(3, 6, step = 2)) 3 >>> print(random.randrange(3, 6, step = 2)) # 如果start和stop之间的区间太小,然后有设定了start和step,实际取值范围很有限 5
randome.sample(population, k)
从Population中随机抽取k个值来,以列表形式输出。注意这里的Population必须为一个序列或列表。

>>> print(random.sample([1,2,3,4,5],3)) [2, 1, 5] >>> print(''.join(random.sample('Hello world', 6))) # 通过join拼接输出即可得到一般的随机数格式 6 0da09 ellwor
2.2 string模块
string.ascii_letters
返回包括所有字母在内的大小写字符串。

>>> import string >>> string.ascii_letters 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
string.ascii_lowercase
返回包含所有小写字母在内的字符串。

>>> string.ascii_lowercase 'abcdefghijklmnopqrstuvwxyz'
string.ascii_uppercase
返回包含所有大写字母在内的字符串。

>>> string.ascii_uppercase 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
string.digits
返回0-9数字字符串。

>>> string.digits '0123456789'
string.punctuation
以字符串形式返回所有特殊字符。

>>> string.punctuation '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
三、实战生成随机数
结合random和string实现
>>> import string, random >>> string2 = random.sample(string.ascii_letters + string.punctuation, 12) >>> print(''.join(string2)) kEr>];)<Lu:Z
增强版
上述程序虽然基本实现了生成随机数的需求,但是随机数的随机性感觉还是比较low,下面使用编辑器来一个增强版的:
import random, string checkcode = '' string1 = '%*^@#!' for i in range(4): current = random.randrange(0, 4) if current != i: temp = ''.join(random.sample(string.ascii_letters + string1, 3)) else: temp = random.randrange(0, 9) checkcode += str(temp) print(checkcode) 输出: sSynyHf!gvPt
增强版程序的不足之处在于随机数的长度不固定,
固定长度版
该版本解决上述增强版中随机数长度不固定的问题,看起来更简单。
import random, string checkcode = '' string1 = '%*^@#!' for i in range(8): if i % 2 == 0: temp = ''.join(random.sample(string.ascii_letters + string1, 2)) else: temp = str(random.randint(0, 9)) checkcode += temp print(checkcode) 输出: TC1Tq6wz2gk0 #可基本满足随机码的要求了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理