如何跳过多次调用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.choice
从 range(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
我设计了一个名为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.choice
从 range(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