在玩游戏的时候,我们经常会获取到一个随机的,但又(奇奇怪怪)的名字。那么,这种功能是怎么实现的呢?
1.了解原理
我们以一个MC的玩家名为例:
DeavHoog315
该名由"Deav","Hoog","315"三部分组成。
我们把这三部分分别命名为A,B,C。
系统会分别保存ABC的所有可能性,然后在注册账号的时候,随机分配。
有点拗口,我们逐条分析。
1.词库
为了生成,我们需要2个词库,分别代表A,B。
比如:
LIST A:
Deav,John,Keve,Zico
LIST B:
Mary,Hoog,Tire,Pime
有人就要问了:那C呢?
C是三位数,完全可以自动生成。
2.开始生成
接下去就要生成了。
程序会分别从A词库和B词库随机挑选一个词语,把它拼成AB字段。
如DeavHoog,JohnPime,ZicoMary。
C就简单了,直接生成随机数。
如922,456,247,164 。
再把AB字段和C拼在一起,就是完整的名字了。
2.代码实现
说了这么多,终于到了我们的代码环节了L(^_^)
为了随机生成,我们需要python自带的库random。
import random as rd
词库
lib_a = ["Deav","John","Keve","Zico"]
lib_b = ["Mary","Hoog","Tire","Pime"]
AB词段
a = rd.choice(lib_a)
b = rd.choice(lib_b)
ab = a+b
choice,就是在指定的列表里,随机选择一个元素。
C
c = rd.randint(101, 999)
randint生成一个int类型的书,范围在a-b间(不包含b)。
拼接
fin = ab + str(c)
输出
print(fin)
怎么样,简单吧?
完整代码
import random as rd
lib_a = ["Deav","John","Keve","Zico"]
lib_b = ["Mary","Hoog","Tire","Pime"]
a = rd.choice(lib_a)
b = rd.choice(lib_b)
ab = a+b
c = rd.randint(101, 999)
fin = ab + str(c)
print(fin)
运行结果:
JohnHoog822
3.优化改进:
现在,我们的代码存在着问题:
Issue #1:
词库太小了,最多只能生成4*4=16个AB字段。
解决 #1:
这个可以自己去编写,或者如果你有相关经验,也可以通过API调用,来实现更多的AB字段。
这里,我给了大家一个示范:
lib_a = ["Deav","Cole","Ruco","Lisa","Mota","Hirm","Evan"]
lib_b = ["Sepi","Nape","Hoog","Fito","Slom","Kite","Mary"]
Issue #2:
只能运行一次,无法批量生成。
解决#2:
这个for循环就可以解决。
优化后的代码:
这里,程序更加的人性化了。我加上了注释,大家复制吧。
import random as rd # 导入随机库
import time # 时间库
lib_a = ["Deav","Cole","Ruco","Lisa","Mota","Hirm","Evan"] # A词库
lib_b = ["Sepi","Nape","Hoog","Fito","Slom","Kite","Mary"] # B词库
n = int(input("生成次数="))
for i in range(n): # 主循环
a = rd.choice(lib_a) # 生成A
b = rd.choice(lib_b) # 生成B
ab = a+b # ab字段
c = rd.randint(101, 999) #生成范围为101-999(包左不包右)的C
fin = ab + str(c)
print(f"生成名字:{fin}")
time.sleep(1) #休息1秒,为的是减轻电脑负担,也是让用户有时间看
到这吧,bye。