比方说,我想对用户名的唯一性给出一个分数(意味着分数越高,别人拥有它的可能性就越小)。例如,用户名“ 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很常见,但是我的系统评价很高。我相信有很多方法可以更好地测试用户名。例如,一些字母很少。解决此问题的最佳方法是什么?谢谢。
答案 0 :(得分:2)
检查非常常见的用户名的最佳方法是简单地下载一个用户名列表(您甚至可以复制粘贴a list like this)并在您的唯一性代码中引用它。这比尝试实现预测人们通常用作用户名的算法要容易得多。
答案 1 :(得分:1)
我仍然不确定为什么需要这个, 在任何情况下,如果想要唯一性,您都无法从某些公式中获得它;如果单词存在,您可以使用某些词典模块来降低得分。 更好的方法是Google根据结果计数减少单词数