Python网格单词查找函数返回None 输出不符合预期如何解决
问题分析与修复
你代码里存在3处问题:
- 语法错误:
rows、cols函数中调用join的写法错误,你写的是""join,正确写法是"".join,缺少了字符串和join方法之间的点号。 - 逻辑错误1:所有辅助函数的返回值都是「两个列表组成的元组」,比如
rows(grid)返回的是(正序行字符串列表, 逆序行字符串列表)。你直接遍历这个元组时,每次循环拿到的是一整个列表,此时if w in col判断的是w是否和列表中某一个完整字符串完全相等,而非w是某个字符串的子串。 - 逻辑错误2:你没有把辅助函数返回的两个列表中的所有字符串展开遍历,漏掉了大量需要检查的内容。
修正后完整代码
def diagsDownRight(M): n = len(M) m = [[''] * (n - i - 1) + row + [''] * i for i, row in enumerate(M)] return ([''.join(col) for col in zip(*m)]), [''.join(col[::-1]) for col in zip(*m)] def diagsUpRight(M): n = len(M) m = [['']*i + row + ['']*(n-i-1) for i, row in enumerate(M)] return [''.join(col) for col in zip(*m)], [''.join(col[::-1]) for col in zip(*m)] def rows(M): return ["".join(row) for row in M], ["".join(reversed(row)) for row in M] def cols(M): return ["".join(col) for col in zip(*M)], [''.join(col[::-1]) for col in zip(*M)] def contains_word(grid: list[list[str]], w: str): # 遍历所有辅助函数返回的元组 for group in [diagsUpRight(grid), diagsDownRight(grid), rows(grid), cols(grid)]: # 遍历元组里的两个列表(正序、逆序) for str_list in group: # 遍历列表里的每个字符串,检查子串 for s in str_list: if w in s: return w return None print(contains_word(grid=[ ["r","a","w","b","i","t"], ["x","a","y","z","c","h"], ["p","q","b","e","i","e"], ["t","r","s","b","o","g"], ["u","w","x","v","i","t"], ["n","m","r","w","o","t"]] , w='raw'))
运行后将输出你预期的raw。
内容的提问来源于stack exchange,提问作者Bruffff
相关产品推荐
相关产品推荐

