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)"
通过使用打印,我可以在不同的行中获取每个信息
PATO 0 1
BOI 4 2
GATO 1 0
CAO 3 2
encontra_palavras(sopa)
必须在tuplo_palavra
和tuplo_linha
中给我相同的单词,它在tuplo_linha
中所处的位置,并且位置in中的项开始
我是Python的新手,我不知道是否有人可以提供帮助。我必须使用RETURN并且没有PRINT :)谢谢
答案 0 :(得分:0)
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)
尝试使用这个!创建一个列表,在其中添加所有元组,并在函数完成执行后将其返回。
答案 1 :(得分:0)
问题出在这里
您希望函数encontra_palavras
为tuplo_palavra
中的每个项目做一些工作,以累计(将工作结果)收集到一个集合中,然后返回该集合作为返回值。
您实际上正在做的是要求encontra_palavras
为tuplo_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.
答案 2 :(得分:0)
您可以使用两种主要方法:您可以在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
的项目而无需将其存储在内存中(这称为惰性评估)。