我正在制作一个简单的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)
答案 0 :(得分:11)
from math import log
...
level = int(log(x, 2))
level = min(level, 10) # as suggested by Morb
print(level)
答案 1 :(得分:3)
基于Daniel's和abarnert'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