首页 > 解决方案 > Python上的CWs风格排名系统

问题描述

我正在尝试在 codewars(codewars 风格排名系统)上执行 katta 根据测试,我无法理解我的错误可能在哪里。

编写一个名为 User 的类,用于计算用户通过类似于 Codewars 使用的排名系统的进度。

业务规则:用户从 -8 级开始,可以一直进步到 8 级。没有 0(零)等级。-1 之后的下一个排名是 1。用户将完成活动。这些活动也有等级。每次用户完成排名活动时,用户排名进度都会根据活动的排名进行更新 从完成的活动中获得的进度是相对于用户当前排名与活动排名的比较用户的排名进度开始于零,每次进度达到 100 时,用户的等级会升级到下一个等级。在上一个等级中获得的任何剩余进度都将应用于下一个等级的进度(我们不会丢弃任何进度)。例外情况是,如果没有其他等级可以进步(一旦达到等级 8,就没有更多进步了)。用户不能超过等级 8。等级值的唯一可接受范围是 -8,-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5, 6,7,8。任何其他值都应该引发错误。进度评分如下:

完成一项与用户排名相同的活动将获得 3 分 完成一项排名低于用户排名的活动将获得 1 分 任何已完成的排名低于用户排名 2 级或以上的活动将被忽略完成排名高于当前用户排名的活动将加速排名进展。排名之间的差异越大,进步将越多。公式为 10 * d * d,其中 d 等于活动和用户之间的排名差异。逻辑示例:

user = User()
user.rank # => -8
user.progress # => 0
user.inc_progress(-7)
user.progress # => 10
user.inc_progress(-5) # will add 90 progress
user.progress # => 0 # progress is now zero
user.rank # => -7 # rank was upgraded to -7

我的代码:

class User:
    progress = 0
    rank = -8
    list_of_ranks = [-8, -7, -6, -5, -4, -3, -2, -1, 1, 2, 3, 4, 5, 6, 7, 8]
    ranks = iter(list_of_ranks[1:])

    def inc_progress(self, katta_rank):
        dif = self.list_of_ranks.index(katta_rank) - self.list_of_ranks.index(self.rank)
        if katta_rank not in self.list_of_ranks:
            raise ValueError
        if dif == -1:
            self.progress += 1
        elif dif == 0:
            self.progress += 3
        elif dif > 0:
            self.progress += 10 * (dif**2)

        for _ in range(self.progress//100):
            try:
                self.rank = next(self.ranks)
                self.progress -= (self.progress // 100) * 100
            except StopIteration:
                self.rank = 8
                self.progress = 0

基本测试成功通过,但随后执行了大约 50% 的测试。无法弄清楚逻辑错误在哪里。我将非常感谢您的帮助。

标签: python

解决方案


推荐阅读