如何跳过多次调用class中的函数?

How to skip multiple times call a function in class?

我设计了一个名为Funcskip的class。我想随机调用 class 中定义的函数。但我也想跳过已经调用的函数。我如何通过以下代码执行此操作。

import random
class Funcskip:
    def __init__(self,
                 min_ops=2,
                 max_ops=4):
      self.min_ops                =   min_ops
      self.max_ops                =   max_ops
      self.ops              =   [self.__add, self.__sub, self.__mult, self.__div]

    def __initParams(self):
      self.num_ops          =    random.randint(self.min_ops,self.max_ops)

    def __add(self, a, b):
      print("1. add")
      return a+b
    def __sub(self, a,b):
      print("2. sub")
      return a-b

    def __mult(self, a, b):
      print("3. mult")
      return a*b
    def __div(self, a,b):
      print("4. div")
      return a//b

    def callF(self,a,b):
        self.__initParams()
        print(self.num_ops)
        total = 0
        for _ in range(self.num_ops):
            total+=random.choice(self.ops)(a,b)
        return total

    

  
obj = Funcskip()
a = 10
b = 5
_total = obj.callF(a,b)
print(_total)
                 

将其从列表中删除:

def callF(self,a,b):
    self.__initParams()
    print(self.num_ops)
    for _ in range(self.num_ops):
        func = random.choice(self.ops)
        total = func(a,b)
    self.ops.remove(func)
    return total

random.choicerange(len(list)) 然后使用 .pop(idx).

试试这个:

def callF(self,a,b):
    self.__initParams()
    print(self.num_ops)
    total = 0
    for _ in range(self.num_ops):
        idx = random.choice(range(len(self.ops)))
        total += self.ops.pop(idx)(a,b)
    return total

只需打乱列表并调用前几个函数:

    def callF(self,a,b):
        self.__initParams()
        ops = self.ops[:]
        random.shuffle(ops)
        print(self.num_ops)
        total = 0
        for op in ops[:self.num_ops]:
            total += op(a, b)
        return total