Python 如何从有字母的行和列中获取单词?
在做作业时,我突然想到了这个问题Python 如何从有字母的行和列中获取单词?,python,python-3.x,Python,Python 3.x,在做作业时,我突然想到了这个问题 def board_contains_word(board, word): '''(list of list of str, str) -> bool Return True if and only if word appears in board. Precondition: board has at least one row and one column. >>> board_contains_
def board_contains_word(board, word):
'''(list of list of str, str) -> bool
Return True if and only if word appears in board.
Precondition: board has at least one row and one column.
>>> board_contains_word([['A', 'N', 'T', 'T'], ['X', 'S', 'O', 'B']], 'ANT')
True
'''
return word in board
但是我得到了FALSE
提前感谢中的python
操作符的工作方式与您使用它的方式略有不同。以下是一些例子:
>>> 'laughter' in 'slaughter'
True
>>> 1 in [1,6,5]
True
>>> 'eta' in ['e','t','a']
False
>>> 'asd' in ['asdf','jkl;']
False
>>>
如您所见,它有两个主要用途:测试一个字符串是否可以在另一个字符串中找到,以及测试一个元素是否可以在数组中找到。还要注意,这两种用途不能结合使用
现在,关于解决你的问题。您需要某种循环,以便逐个遍历所有行。一旦选择了一行,就需要某种方法将所有数组元素连接在一起。在那之后,你就可以知道这个单词是否在棋盘上
注意:这只解决了水平搜索的问题。不知道这是不是全部任务。您可以使用zip
功能调整此方法以进行垂直搜索。以下是一些可以让您摆脱困境的方法:
def board_contains_word(board, word):
# check accross
for row in board:
return word in ''.join(row):
# try with board's rows and columns transposed
for row in zip(*board):
return word in ''.join(row):
return False
print board_contains_word([['A', 'N', 'T', 'T'], ['X', 'S', 'O', 'B']], 'ANT')
print board_contains_word([['A', 'N', 'T', 'T'], ['X', 'S', 'O', 'B']], 'TO')
提示:您可以通过使用any()
函数来简化操作。那么,您是在尝试查看单词是否出现在一行中,还是在尝试查看单词是否出现在板中的某个位置,如交叉字谜?只需在黑板上检查单词
两种方法都不起作用,但如果你想要一个易懂的答案,你真的需要更清楚。要添加到@BenTrofatter的注释中,对角线需要匹配吗?向后的单词(例如,一行['T','N','a']
)如何?至少,您需要手动检查任何子列表是否以正确的顺序包含单词的所有字母。如果您还必须检查任何一列字母是否包含这些字母,则必须将其作为单独的电路板数据进行传递,对角线也是如此。仅供参考,您可以使用zip(*board)
来处理所有电路板尺寸。顺便说一句,list
调用是不必要的<代码>for
循环足够智能,可以在没有它们的情况下打开发电机的包装。@NickODell:好的,删除了。很明显,我不是Py 3高手。感谢@martineau和Nick ODell…分享你的知识,帮助我解决问题。你发布的代码是我的实际问题。这对我来说更好…谢谢!!