是否可以循环存储在元组中的函数列表?

时间:2016-12-29 22:36:33

标签: python python-3.x tuples

基本上,我正在创建一个游戏:连接4.如果用户每次移动都要赢,我希望AI在水平和垂直方向上进行检查。实际情况是,它应该一次只执行一次检查,因为无论如何都不能同时进行2次移动。

所以,我创建了2个检查功能。一个用于水平检查,一个用于垂直检查。即:

假设玩家计数器为'X'且AI计数器为'O'

def horizonal_check():
    if 'XXX'= True: 
        AI='XXXO'

我实际游戏中的if语句更加复杂,但实质上,这是它检查的内容然后允许AI将自己的计数器放置在适当的位置并阻止我获胜。

def vertical_check():
    if 'XXX' = True: 
        AI = 'XXXO'

这实现了与上述函数相同的策略,但唯一的区别是,它检查连续3个计数器的垂直组合而不是水平组合。

所以我真正想做的是将这2个检查函数存储在一个元组中,然后使用for循环遍历每个函数。这样可确保一次只运行一次检查。这是我的for循环:

Checks = (horizontal_check(), vertical_check()) # Checks stored in a tuple

for c in Checks:
    return c 

我希望这个for循环一次循环遍历元组中的每个单独检查。但它似乎没有用。 AI什么都不做

2 个答案:

答案 0 :(得分:3)

您当前正在创建一个元组,其中包含两个函数调用的返回值,分别为NoneNone,而不是函数本身。

添加功能:

Checks = (horizontal_check, vertical_check) # Checks stored in a tuple

然后给他们打电话:

for c in Checks:
    c()

另外,我怀疑这是一个微不足道的例子,但仍然是:

  • 您的功能名称不匹配。
  • 'XXX' = True是不允许的(至少在if中),应为'XXX' == True
  • return循环中
  • for:这是一个禁忌。

答案 1 :(得分:0)

很难说,但我想你想要这个

Checks = (horizontal_check, vertical_check) # do not call the function here...

return any(c() for c in Checks) #call it as you loop through ...