fork download
  1. from math import log
  2.  
  3. next_lvl_k = 1.2
  4. exp_per_level = 1000
  5.  
  6. def experience_for_level(level, q=next_lvl_k):
  7. # geometric progression b * (q ^ n - 1) / (q - 1)
  8. return round(exp_per_level * (q ** level - 1) / (q - 1))
  9.  
  10. def calculate_level(exp, q=next_lvl_k):
  11. lvl = int(log(1 + (exp / exp_per_level) * (q - 1), q))
  12. exp_next_lvl = experience_for_level(lvl + 1)
  13.  
  14. if exp >= exp_next_lvl:
  15. return lvl + 1, exp_next_lvl - exp
  16. else:
  17. return lvl, exp - experience_for_level(lvl)
  18.  
  19. print(calculate_level(0) == (0, 0))
  20. print(calculate_level(999) == (0, 999))
  21. print(calculate_level(1000) == (1, 0))
  22. print(calculate_level(1024) == (1, 24))
  23. print(calculate_level(2200) == (2, 0))
  24. print(calculate_level(3640) == (3, 0))
  25. print(calculate_level(5368) == (4, 0))
  26. print(calculate_level(5400) == (4, 5400 - 5368))
Success #stdin #stdout 0.01s 27656KB
stdin
Standard input is empty
stdout
True
True
True
True
True
True
True
True