简化RPG级别的Python代码

时间:2015-04-29 07:53:41

标签: python

我正在制作一个简单的RPG游戏,其中角色根据经验(在下面的代码中由x表示)以指数方式进行。水平只达到10级,但如果他们的经验落在指数数字之间,我很困惑该怎么办 - 我在下面编写了这个代码,将它们的级别降低到最低的经验级别,但有没有办法使这个代码更简单或更有效?

  if 2<x<4:
        level=1
    if 4<x<8:
        level=2
    if 8<x<16:
        level=3
    if 16<x<32:
        level=4
    if 32<x<64:
        level=5
    if 64<x<128:
        level=6
    if 128<x<256:
        level=7
    if 256<x<512:
        level=8
    if 512<x<1024:
        level=9
    if x>1024:
        level=10
    print (level)

3 个答案:

答案 0 :(得分:11)

from math import log

...

level = int(log(x, 2))
level = min(level, 10) # as suggested by Morb
print(level)

答案 1 :(得分:3)

基于Daniel'sabarnert's建议

level = min(x.bit_length()) - 1, 10)

答案 2 :(得分:1)

我们想要计算基本上是什么(log_base_2(x))。由于整数以二进制格式存储,因此它们的位对应于2的幂。因此计算级别的一种方法是计算我们的数字变为1所需的右位移数。注意右位移本质上是与将整数除以2并忽略余数相同。

x_ = x
level = 0
while x_ > 1 and level < 10:
    x_ >>= 1
    level += 1