Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我想为我的函数调用元组中的元素_Python - Fatal编程技术网

Python 我想为我的函数调用元组中的元素

Python 我想为我的函数调用元组中的元素,python,Python,我想在Tictatoe游戏的其中一条线已满时实现: teste5=('O','X','X',' ',' ',' ',' ',' ',' ') teste6=('X','X','X',' ',' ',' ',' ',' ',' ') def vencedor_linha(t): tl1=(t[0],t[1],t[2]) tl2=(t[3],t[4],t[5]) tl3=(t[6],t[7],t[8]) tl=(tl1,tl2,tl3) if tl[0:][

我想在Tictatoe游戏的其中一条线已满时实现:

teste5=('O','X','X',' ',' ',' ',' ',' ',' ')
teste6=('X','X','X',' ',' ',' ',' ',' ',' ')

def vencedor_linha(t):
    tl1=(t[0],t[1],t[2])
    tl2=(t[3],t[4],t[5])
    tl3=(t[6],t[7],t[8])
    tl=(tl1,tl2,tl3)
    if tl[0:][0:]=='X':
        return True
    elif tl[0:][0:]=='O':
        return True
    else:
        return False
因此
vencedor\u linha(teste5)
->
True
vencedor\u linha(teste6)
->
False

问题是:它给了我
vencedor_linha(teste5)
->
False
,因为如果
正常工作,我就无法得到


另外,我不能使用列表,所以不用麻烦告诉我p

如果要检查3个不同的值是否等于某个值,则需要使用all()或3个不同的==条件;检查一个切片是否等于一个值没有任何意义

你想要的是:

def vencedor_linha(t):
    tl1=(t[0],t[1],t[2])
    tl2=(t[3],t[4],t[5])
    tl3=(t[6],t[7],t[8])
    tl=(tl1,tl2,tl3)
    for row in tl:
        if all(x == 'X' for x in row) or all(x == 'O' for x in row):
            return True
    return False

(这将检查所有3行;我不清楚您的原始代码是否仅尝试检查第一行。)

一个使用itertools的单行程序,它与几乎所有使用itertools进行智能化处理的程序一样:

from itertools import groupby
def vencedor_linha(t):
    return any(reduce(lambda x,y:x if x==y and x in ['X','Y'] else False,
        (r[1] for r in row[1])) for row in groupby(enumerate(t),lambda (i,v):i/3))
基本上: 枚举(t)返回一个迭代器,其中每个元素的形式为(t中元素的索引,t中元素)

groupby(iterable,keyfunction)返回一个迭代器,其中每个元素的形式为(value,iterable元素上的迭代器,应用于该元素的keyfunction返回值)

reduce(function,iterable):将两个参数的函数从左到右累积应用于序列项,以便将序列减少为单个值。例如,reduce(lambda x,y:x+y,[1,2,3,4,5])计算(((1+2)+3)+4)+5)。(来自python文档)

如果iterable的任何元素的计算结果为True,则any(iterable)返回True,否则返回False


因此,我们使用groupby将元组分解为多行,计算每行是否同构,是否只包含带reduce的“X”或“Y”,如果其中任何一行为真,则返回True。

tl[0:][0:][code>不代表您可能等待的内容
tl[0:][0:][0:][0:][0:
也是可能的,并返回原始的
tl
。您不能使用列表是什么意思?ty,wooble。问题是我不能使用all和row。@e先生:这是一个大一的项目,还不能在这个项目上使用列表。好吧,你可以展开循环并
all()
到6
if
语句,如果这是你的教授真正想要的。如果是家庭作业,我不会给你写代码。