测试游戏取名库

随机取名出现了屏蔽字

在测试随机取名功能的时候,出现过这样一个Bug:随机出来的名字里边有屏蔽字

随机名字的生成是由前端负责的,从两个名字库A,B中,各随机出一个名字,组合起来。

如名字库A中有:傲慢的,愤怒的,早安,晚安

名字库B中有:南希,萝莉,爱丽丝

某次随机的结果是:晚安南希,中招了,安南是屏蔽字,于是确认取名的时候,后端后端校验提示有屏蔽字符。

解决方式

方式1:前端在每次随机出名字后,使用前端的屏蔽字库检测名字是否含有屏蔽字,含有则重新随机一个。

方式2:要从根源上解决问题的话,我们需要保证,从名字库中随机到的名字,不会出现屏蔽字。

解决思路:

  1. 穷举所有可能被随机出的名字。
  2. 对每个名字,一一进行屏蔽字校验。
  3. 汇总出现屏蔽字的名字,交由策划修改。

非常简洁的思路~

大概计算了下,有30W个名字吧,这种事情,当然不能手工来做,可以用python实现一个检测的小工具。

检测函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def check_shield(first_name, last_name, shield_words):
"""屏蔽字检测
:param first_name:名字前半部分
:param last_name: 名字后半部分
:param shield_words:屏蔽字库,list
:return:
"""
remove = []
player_name = first_name + last_name
for shield_word in shield_words:
if shield_word in player_name:
print '{0}__{1} 出现了屏蔽字:{2}'.format(first_name, last_name, shield_word)
remove.append(shield_word)
for shield_word in remove:
shield_words.remove(shield_word)
print 'shield words remove {0},remain {1}'.format(shield_word, len(shield_words))

部分检测结果

晚安__拉里 出现了屏蔽字:安拉

剑神__汉纳 出现了屏蔽字:神汉

处女座__安 出现了屏蔽字:处女

午夜的__安 出现了屏蔽字:午夜