我不能让return和print(Python)一样

2024-06-17 19:44:18 发布

您现在位置:Python中文网/ 问答频道 /正文

sopa=(["PATO", "BOI", "GATO", "CAO"], ["XPATOW", "GATOPA", "YWBIVZ","ZWCAOB", "ABBOIL"])

def obtem_palavras(sopa):
    return sopa[0]

def obtem_grelha(sopa):
    return sopa[1]


def encontra_palavras(sopa):
    tuplo_palavra = obtem_palavras(sopa)
    tuplo_linha = obtem_grelha(sopa)
    for item in tuplo_palavra:
        for item1 in tuplo_linha:
            if item in item1:
                return item, tuplo_linha.index(item1), item1.index(item)

我想要的结果是(("PATO",0,1),("BOI",4,2),("GATO",1,0),("CAO",3,2)) 通过使用return,我只得到了正确的第一部分"('PATO', 0, 1)" 通过使用print,我可以在不同的行中获得每个信息

PATO 0 1 
BOI 4 2
GATO 1 0
CAO 3 2

encontra_palavras(sopa)必须给我在tuplo_palavratuplo_linha中的相同单词,它在tuplo_linha中的位置,以及在项目中的位置 我是Python新手,不知道有没有人能帮忙。我必须使用退货和不打印:)谢谢


Tags: inreturndefitemitem1gatopalavraspalavra
3条回答
sopa=(["PATO", "BOI", "GATO", "CAO"], ["XPATOW", "GATOPA", "YWBIVZ","ZWCAOB", "ABBOIL"])

def obtem_palavras(sopa):
    return sopa[0]

def obtem_grelha(sopa):
    return sopa[1]


def encontra_palavras(sopa):
    tuplo_palavra = obtem_palavras(sopa)
    tuplo_linha = obtem_grelha(sopa)

    final_lst=[]
    for item in tuplo_palavra:
        for item1 in tuplo_linha:
            if item in item1:
                lst=[]
                lst.append(item)
                lst.append(tuplo_linha.index(item1))
                lst.append(item1.index(item))
                final_lst.append(tuple(lst))
    return tuple(final_lst)            
encontra_palavras(sopa)

试试这个!创建一个列表,在其中附加所有元组,并在函数完成执行时返回它。你知道吗

您可以使用两种主要方法:在for循环中构建一个元组,然后返回它;或者将函数设为生成器,然后使用该生成器构建元组。你知道吗

方法1:连接到空元组

def encontra_palavras(sopa):
    result = ()
    tuplo_palavra = obtem_palavras(sopa)
    tuplo_linha = obtem_grelha(sopa)
    for item in tuplo_palavra:
        for item1 in tuplo_linha:
            if item in item1:
                result +=  ((item, tuplo_linha.index(item1), item1.index(item)),)
    return result

这是最简单的方法,但效率不高,因为每个+=操作都会创建一个新元组。您还可以构建一个列表,在返回之前将其转换为元组。你知道吗

方法2:元组理解(技术上是传递给tuple的生成器表达式)

def encontra_palavras(sopa):
    tuplo_palavra = obtem_palavras(sopa)
    tuplo_linha = obtem_grelha(sopa)
    return tuple((item, tuplo_linha.index(item1), item1.index(item)) 
                     for item in tuplo_palavra 
                     for item1 in tuplo_linha 
                     if item in item1)

进近#3发电机

def encontra_palavras(sopa):
    result = ()
    tuplo_palavra = obtem_palavras(sopa)
    tuplo_linha = obtem_grelha(sopa)
    for item in tuplo_palavra:
        for item1 in tuplo_linha:
            if item in item1:
                yield item, tuplo_linha.index(item1), item1.index(item)

def encontra_palavras_as_tuple(sopa):
    return tuple(encontra_palavras(sopa))

如果您通常只是迭代encontra_palavras的结果,这种方法会更好,因为您可以直接使用生成器,而无需将其转换为元组。这意味着您可以遍历encontra_palavras的项,而不将它们存储在内存中(这称为延迟求值)。你知道吗

问题是:

您希望函数encontra_palavrastuplo_palavra中的每个项做一些工作,将工作的结果累积到一个集合中,然后将该集合作为其返回值返回。你知道吗

实际上,您要做的是要求encontra_palavrastuplo_palavra中的每个项目执行一些工作,为第一个项目执行工作,然后返回单个结果,而从不访问tuplo_palavra中的其他项目。你知道吗

要获得所需的结果,必须更改代码,以便将结果添加到集合中,而不是从最内部的循环返回,然后只有在所有循环完成后,才能返回整个集合。你知道吗

它看起来是这样的:

def encontra_palavras(sopa):
    tuplo_palavra = obtem_palavras(sopa)
    tuplo_linha = obtem_grelha(sopa)
    results = [] # make an empty list collection to hold results.
    for item in tuplo_palavra:
        for item1 in tuplo_linha:
            if item in item1:
                # add to the results collection a tuple with the result for this loop
                results.append( (item, tuplo_linha.index(item1), item1.index(item)) )

     return results # return the entire collection now that all work is done.

相关问题 更多 >