大家好,我是郭立员~,本文所讲内容仅供学习参考,请勿非法使用。
python基础语法里面并没有随机数命令,但是有自带的随机数模块 random。
import randomnum = random.randint(1, 10)print(num)
常见用途
1、短信验证码
注册各种app时会收到一条短信,短信内容中包含一个4到6位的数字验证码,这个验证码就是用随机数生成。
以4位数字验证码为例:
①、数字首位可以是0
原理是0~9999范围内,随机生成一个数字,如果位数低于4位,在前面用0补齐。
import randomcode = f"{random.randint(0, 9999):04d}"print(code)
f"{x:04d}"是强制格式数字x为4位数字,不足在前面补0。
d = integer,代表这是一个整数4 = 固定显示 4 位数字0 = 不足 4 位时,前面用 0 补齐
我一般会这样写:0>4
0 = 补齐的字符是0> = 对齐方式是右对齐4 = 固定显示4位数
只有在补齐字符是0的时候才可以省略对齐符号,当然除了右对齐>,还有左对齐<,居中对齐^
对齐的用法,比如123和45678两个数字进行对齐:
左对齐
12345678
1和4对齐,空缺位是123后面两位。
右对齐
12345678
3和8对齐,空缺位是123前面两位。
居中对齐
12345678
2和6对齐,空缺位是123前后各一位。
②、首尾不为0
为了方便,重启生成固定位数的时候,首尾都不为零,因为在现实生活中如果一个数字首尾是0,通常是被省略的。
首尾不为0,那么就从1开始,最小的4位数就是1000
import randomcode = random.randint(1000, 9999)print(code)
一个4位数字的验证码短信就可以这样写了:
import randomcode = random.randint(1000, 9999)print(f"【某app】验证码{code},用于手机验证码登录,5分钟内有效。验证码提供给他人可能导致账号被盗,请勿泄露,谨防被骗。")
2、随机操作
用随机数控制判断是否生效。
import randomrndNum = random.randint(1,3)if rndNum == 1:print("执行操作1")if rndNum == 2:print("执行操作2")if rndNum == 3:print("执行操作3")
对于随机执行操作,还可以用random.choice命令。
import randomdef 操作1():print("点这里")def 操作2():print("点那里")def 操作3():print("滑动")random.choice([操作1, 操作2, 操作3])()
把每一个操作封装成一个函数,然后把函数调用做成一个列表[操作1, 操作2, 操作3],最后用random.choice命令随机选一个函数执行。
3、密码/令牌
这个是随机数最常见的用途:生成随机字符串。
①、生成一个八位的随机字符串。
由于是学习,我们不考虑string模块一键生成随机字符串,而是用基础的语法自行编写。
import randomchars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'result = ""for _ in range(8):result += random.choice(chars)print(result)
代码中定义的chars是所有的字母和数字,这里可以用string模块代替。
import stringprint(string.ascii_letters) #大小写字母print(string.ascii_lowercase) #小写字母print(string.ascii_uppercase) #小写字母print(string.digits) #数字
循环部分也可以简写:
import randomchars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'result = ''.join(random.choice(chars) for _ in range(8))print(result)
最终的代码:
import randomimport stringchars = string.ascii_letters + string.digitsresult = ''.join(random.choice(chars) for _ in range(8))print(result)
②、首位字母大写的8位随机字符串
第一位是随机字母,并且还要大写。
import randomimport stringfirst = random.choice(string.ascii_uppercase)rest = ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(7))res = first + restprint(res)
4、抽奖/摇号
这个也是一种常见的随机,它的特点是随机结果不重复。
比如现在有0123456789一共10个小球,我要从里面抽出4个小球,按照上面生成4位随机数字,那么有可能出现4个小球中有相同的序号,这就不符合逻辑了,所以必须不能出现重复的随机数。
方法1:每拿一个小球,就从原来那堆小球中减掉一个。
import randomballs = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]result = []for i in range(4):selected = random.choice(balls)result.append(selected)balls.remove(selected)print("抽到的:", result)print("剩下的:", balls)
方法2:每生成随机一个数字,用一个容器装起来,在下一个随机数放进容器前,先看一下容器内容有没有相同的数字,如果存在就不放入,循环操作,直到容器内有4个数字。
import randomcontainer = []while len(container) < 4:num = random.randint(0, 9)if num not in container:container.append(num)print("最终抽到的4个不重复数字:", container)
方法3:使用random.sample直接生成不重复的随机数
import randomballs = random.sample('0123456789', 4)result = ''.join(balls)print(result)
常用的随机案例就这些,其他像坐标随机、范围随机啊,这些本质上都是用随机数作为控制变量,实现随机功能。
=正文完=
如果有其他问题可以加我的微信(xiaomu86119),或扫下方二维码
