如何在python

时间:2016-10-21 15:57:39

标签: python math pygame

我在我正在制作的pygame应用程序中遇到了一些麻烦。菜单中有一些按钮可以更改模拟运行的速度(通过更改speed中的clock.tick(speed*10))。但是,这也会降低菜单按钮响应的速度。如果我将speed设置为低于0.5,则速度和播放/暂停按钮最多需要五秒钟才能注册一次点击。所以我尝试创建自己的方法来解决这个问题:

speed = 1 # defined previously ingame

timeSlow = 0
timeSlowGoal = 0

while True: # game loop

    if speed < 1:

        timeSlowGoal = reciprocal(speed) # well here's my problem

    else:
        timeSlowGoal = -1

    if timeSlowGoal != -1:

        if timeSlow >= timeSlowGoal:
            timeSlow = 0
            # more code that actually does stuff

        else:
            timeSlow += 1
            # doesn't match, try again

在python中,有一些技巧,如int()string()float()来更改变量。当然,reciprocal()不起作用。是否有类似这样的函数得到一个数的倒数(在这种情况下总是一个小数)或者我是否需要做一些花哨的数学来得到它?

(当然,如果所有这些都是不必要的,并且你有一个更好的解决方案来解决我的第一个问题,请告诉我)

编辑:好的,我忽略了一个非常简单的解决方案。 1 / n 总是 n的倒数。不需要一个reciprocal()函数,因为它很简单。这就是我忘记小学数学的原因。

2 个答案:

答案 0 :(得分:2)

假设您使用的是Python 3,请更改

timeSlowGoal = reciprocal(speed)

timeSlowGoal = 1 / speed

如果速度为零,请确保不要尝试这样做。

答案 1 :(得分:1)

我不知道为什么你有这么大的代码,因为Reciprocal of a number可以简单地提到:1/n

因此,您的reciprocal函数可以简单地写为:

def reciprocal(n):
    return 1.0 / n

在这里,我使用1.0/n代替1/n,因为在python中,除法的结果是分数, numerator 分母应该有分数值。

示例运行:

>>> reciprocal(3)
0.3333333333333333
>>> reciprocal(0.3333333)
3.00000030000003   # Not '3' because of the loss in the precision of value entered
>>> reciprocal(reciprocal(3))
3.0   # Doing reciprocal twice returns "3"