计算基本的数学运算

时间:2016-10-25 07:11:06

标签: python

我想猜测我的算法的计算工作量,在这种情况下意味着:我在算法中添加,减去,乘法和除法的频率

示例:

def b(a):
    a = a + 3  #1
    a = a * a  #2
    a = a * -1 #3
    return a

if __name__ == "__main__":
    for i in range(10):
        b(1)

分析的输出应该是:

1:+ - > 1数学运算

2:* - > 1数学运算

3:+, - - > 2个数学运算

对于每个循环,因此在此程序上运行的分析器应返回 40

1 个答案:

答案 0 :(得分:1)

Pythonic解决方案可能是创建一个类操作数,带有相关的运算符+, - ,*,/,用特殊方法指定(__add __,__ radd __,__ mult __,__ rmult__等)。如果您使用" __ r"正确的方法你可以开始包括几乎任何顺序的litterals(1,2.0,3.0),只要有一个操作数。

该类将有一个计数器,在创建时设置为零。每次调用都会增加1,但也会添加每个运算符的计数器(默认值= 0)。

然后你可以写:

a = Operand(2)
b = a+2-5
assert b.effort == 3

然后你可以继续计算你的努力:

a = Operand(5)
a = a + 3  #1
a = a * a  #2
a = a * -1 #3
print(a.effort)

在第一行中,您将创建对象。在第二行中,+ 3的结果为8,结果对象的努力为1。在第三个中,它的努力为3(1 + 1表示+ 1)。在第四,它努力4.等。

我还没有实施和测试它,但它应该根据这些原则或多或少地起作用。

关于litterals的注意事项: a + 2 + 3会给你一个3的计数,但是2 + 3 + a可能会给你一个2的计数(因为5仍然是一个整数,而不是一个操作数)。所以也许你想避免__r方法,保持安全......这取决于。