我的函数AB有1个参数,AB有一堆循环,我有一个计数器跟踪它循环的数量。它(必须)返回一个真或假的答案。
我有一个名为AC的第二个函数,它调用了2个AB实例,并为参数添加了不同的东西,并将它们比作它们
if (AB(option1) == True and AB(option2) == False):
result = "Option1 Wins"
elif (AB(option1) == False and AB(option2) == True):
result = "Option2 Wins"
if (AB(option1) == True and AB(option2) == True):
result = ??
但是如果两个案例都是'True',我需要知道哪个案例首先达到'True',所以这意味着我需要知道它循环了多少次(我需要知道计数器变量的值)< / p>
如何访问变量?
我正在考虑使用辅助功能来访问它,但我不确定这是否可能/如何做到
答案 0 :(得分:2)
您可以从python中的函数返回多个值:
def AB(param):
return True, 1
val = AB(1) # it will be (True,1), so it's a set
val, val1 = AB(2) # val = True, val1 = 1
所以在你的代码中你应该检查AB(param)[0]以检查True,如果你只想保留一个返回值(你应该在不同的变量中得到它们)。
但是你的代码是错误的,因为每次检查输出时都会调用AB(),这将执行所有循环,最终可能会为同一输入带来意外的响应。您应该先为每个参数获取AB()的输出,然后在if块中检查它们。
答案 1 :(得分:0)
零评估为False
,非零评估为True
:
如果AB
失败,则返回0
,否则返回循环量:
def AB(param):
if failed:
return 0
else:
return counter
用法:
if AB(option1) and not AB(option2):
result = "Option1 Wins"
elif not AB(option1) and AB(option2):
result = "Option2 Wins"
elif AB(option1) < AB(option2):
result = "Option1 Wins"
else:
result = "Option2 Wins"
答案 2 :(得分:0)
OOP解决方案:使用此方法作为成员函数创建一个类,并将计数器变量创建为成员变量。现在,您可以从任何位置检查该类的任何对象的值。
同样在您的代码中,无需多次调用AB
。
o1 = AB(option1)
o2 = AB(option2)
if o1 and not o2:
result = "Option1 Wins"
elif not o1 and o2):
result = "Option2 Wins"
elif o1 and o2:
result = ??
面向对象的解决方案可能如下所示(代码未经过测试)
class solver(object, option):
reached = 0
option = option
status = False
def AB(self):
# implementation. use self.option and update self.reached and self.status
opt1 = solver(option1)
opt2 = solver(option2)
o1 = opt1.AB()
o2 = opt2.AB()
if o1.status and not o2.status:
result = "Option1 Wins"
elif not o1.status and o2.status):
result = "Option2 Wins"
elif o1 and o2:
if o1.reached < o2.reached:
# o1 reached first
答案 3 :(得分:-1)
您可以使用全局变量来存储计数器的值。有关详细信息,请参阅http://www.diveintopython.net/html_processing/locals_and_globals.html。