带有30个等级的Python排名算法
我在找一个简单的基于Python的排名系统。
这是一个场景:
总共有30个等级,等级1从0分开始。要达到等级30需要2000分。
随着等级的提升,所需的分数会越来越多。
比如,从等级1升到2可能需要3分,从等级2升到3可能需要再加5分。等级29到30可能需要额外的1200分。
因为分数是实时计算的,我还需要一种方法来判断玩家当前的等级。例如,358分的人是哪个等级?
我可以手动设置分数,但2000分的上限每天都会变化,所以这不是一个理想的选择。
我在想,能不能做得像谷歌的PageRank(1-10),从0到4比较容易,但从9到10就很难了。
有没有简单的代码片段或者小技巧?
谢谢!
2 个回答
3
通常的解决办法是使用对数刻度。如果你用的是以2为底的对数,那么每一层级需要的点数就会是之前的两倍。如果你用的是以10为底的对数,那么每一层级需要的点数就会是之前的十倍。这样做可以让曲线“弯曲”得更平滑。想了解更多数学内容,可以查看维基百科页面。
3
使用对数刻度。如果你想要一个代码示例:
base = 2 # change to change the rate at which you go through the levels
levels = 30
finalPoints = 2000
scale = levels/math.log(finalPoints, base)
level = math.floor(scale*math.log(points, base))