python - 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% 的测试。无法弄清楚逻辑错误在哪里。我将非常感谢您的帮助。
解决方案
推荐阅读
- javascript - FizzBuzz 只打印可被三整除的数字
- jquery - 从数据库中检索完整的日期时间并在 MVC 中的视图中显示
- linux - 为什么mount会忽略有效的用户ID
- angular - 在新项目中找不到模块“@angular/core”
- java - 我的 ListView 没有显示我的图像
- sql - Python Django Shell AttributeError:“文章”对象没有属性“标题”
- php - 逗号丢失,编码地址时转换为 &
- php - 循环遍历数据库行时遇到相同的值
- javascript - Javascript - 在函数中传递这个不起作用
- maven - 覆盖 Apache Maven 依赖插件的设置