random模块是Python中常用来生成随机数或随机字符串的一个模块。比如你想测试一个登陆接口,需要批量生一些用户名,应户名包括大写字母、小写字母和数字,每个用户名不能重复,这件事就可以交给Python random来实现。
先说一下random的基本用法:
import random,string print(random.random()) #用于生成0-1之间的随机浮点数 print(random.uniform(1,3)) #用于生成一个1-3之间(指定范围内)的随机浮点数 print(random.randint(0,20))#用于生成0-20之间的随机整数 print(random.randrange(1,10))#用于生成一个范围,可以加上步长值,如下 print(random.randrange(2,10,2)) #在2-10之间随机取数,每个数都是2+n*2的值,即只能是2、4、6、8、10这几个数,结果与random.choice(rango())等效 print(random.choice(range(1,10,2))) #在1-10之间随机取数,每个数都是1+n*2的值,即只能是1、3、5、7、9这几个数,结果与random.randrange(*,*,*)等效 print(random.choice(string.ascii_lowercase)) #随机选取a-z之间的一个字母 print(random.choice(string.ascii_uppercase)) #随机选取A-Z之间的一个字母 print(random.choice(string.ascii_letters)) #随机选取a-z和A-Z之间的字母 print(''.join(random.sample('abcdefg12345',6))) #结果为4acg21 print(random.sample('abcdefg12345',6)) #结果为['4', '2', 'c', 'g', '5', '1']
生成一定个数的用户名代码如下(下面代码是生成5个8位长度的用户名):
import random,string,re def username(lenght,sum): #lenght用户名长度,#sum用户名个数 uname_new='' all_uname=[] while sum>0: str = [] lenght1=lenght while lenght1>0: uname = random.choice(string.ascii_letters+'1234567890') str.append(uname) uname_new = ''.join(str) lenght1 -=1 if re.match('^[A-Z][a-z][0-9]',uname_new): #包含大写、小写、数字的用户名写到all_uname里面 all_uname.append(uname_new) sum -= 1 print(all_uname) username(8,5)
还有一种比较方便的方法可以用random.sample(),代码直接可以定义生成的字符串长度
print(''.join(random.sample('abcdefg12345',6))) #结果为4acg21 print(random.sample('abcdefg12345',6)) #结果为['4', '2', 'c', 'g', '5', '1']
def username_RandomSample(lenght,sum): all_uname=[] while sum>0: uname = ''.join(random.sample('abcdefghijklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ0123456789',lenght)) #if re.match('[A-Z]',uname) and re.match('[a-z]',uname) and re.match([0-9]): #包含大写、小写、数字的用户名写到all_uname里面 if re.match('[a-z][A-Z][0-9]',uname): all_uname.append(uname) sum -= 1 print(all_uname) username_RandomSample(3,5)