如何根据用户名的唯一性对其进行排名?

时间:2019-03-24 15:56:40

标签: python math statistics

比方说,我想对用户名的唯一性给出一个分数(意味着分数越高,别人拥有它的可能性就越小)。例如,用户名“ car”应具有非常低的分数,而“ fastredcar1887 $”应具有非常高的分数。

我的代码运行良好,并且失败率很低,但是我认为有更好的方法。字母表中的每个字母将分数提高一个。如果有数字,则分数会提高2,并且名称中数字的总数达到2的幂,符号与数字相同,但不除以2。

scoreNum=(1/2*totalnumbers)^2+2
ScoreAlpha=totalalpha
ScoreSympol=(totalsymbols)^2+2

然后totalscore=scoreNum+Scorealpha+scoresympol

def rating(name):
    rate=0
    num=0
    symbol=0
    thereisnum=False
    thereissymb=False
    for i in range(len(name)):
        if name[i].isnumeric():
            thereisnum=True

            num+=1
        if name[i].isalpha():
            rate+=1
        if name[i] in ",*&^%$#@:!()/\+-.~<>{}?=+@!#":
            thereisnum=True

            symbol+=1
    if thereisnum==True:


        rate+=int(round(1/2*(num)**2+2))
    if thereissymb==True:    
        rate+=int(round((symbol)**2+2))  
    return rate   

例如,我想获得更好的结果,123456789很常见,但是我的系统评价很高。我相信有很多方法可以更好地测试用户名。例如,一些字母很少。解决此问题的最佳方法是什么?谢谢。

2 个答案:

答案 0 :(得分:2)

检查非常常见的用户名的最佳方法是简单地下载一个用户名列表(您甚至可以复制粘贴a list like this)并在您的唯一性代码中引用它。这比尝试实现预测人们通常用作用户名的算法要容易得多。

答案 1 :(得分:1)

我仍然不确定为什么需要这个, 在任何情况下,如果想要唯一性,您都无法从某些公式中获得它;如果单词存在,您可以使用某些词典模块来降低得分。 更好的方法是Google根据结果计数减少单词数