如何用Python创建一个合适的单词搜索器?

时间:2018-06-01 11:21:18

标签: python python-3.x list file loops

我有一项任务,我们必须在单词搜索中找到单词(减去对角线)。

M L G Y J U G D T W W I S F P
G Y O H I K O P V F J B J J H
N B I M T M Y W R D J E C A I
I Y M X C U E U Z G U I J Y C
K D P S L R W J I N C N S W T
O P S D I D A B Z I D G D A B
M X D H K E B H U G T S I L G
S G D U Y R V D G N D M L K M
S P X K T W E F P I G E J I T
B U L B C M K I F S I L F N W
Z Q L X H G C J N D I L B G C
M T B W Z L A D A A X Y O K X
A E C Z K F Y V F B U V G A W
Y G O Z E A W J R N S Q J E A
L O I T E R I N G H F I P G R

这是我们作为文本文件提供的15x15字词搜索。我们必须在列表中找出搜索中的犯罪词语:

["JAYWALKING", "BURGLARY", "LAUNDERING", "BADSINGING", "REDRUM", "SMOKING", "BEINGSMELLY","CONNING", "SCAMS", "LOITERING"]

我已经完成了搜索这个词,并确定需要找到的词是:redrum,badsinging,beingsmelly,jaywalking和loitering。

然而,在我的代码中,我只从每个方向得到一个结果:游荡和jaywalking。我希望有人能就如何使其全面运作给我一些建议。

def crossword():
empty_list = []
crimes = ["JAYWALKING", "BURGLARY", "LAUNDERING", "BADSINGING", "REDRUM", "SMOKING", "BEINGSMELLY",
          "CONNING", "SCAMS", "LOITERING"]
confession = open("confession.txt", "r")
for line in confession:
    line = line.strip("\n")
    new_list = line.split(' ')
    empty_list.append(new_list)

#horizontal
words = []

for i in range(len(empty_list)):
    string_1 = ""
    string_2 = ""
    m = len(empty_list[i])
    for j in range(len(empty_list[i])):
        string_1 = string_1 + empty_list[i][j]
        string_2 = string_2 + empty_list[i][m-1-j]
    for k in range(len(crimes)):
        if crimes[k] in string_1 or crimes[k] in string_2:
            words.append(crimes[k])


#vertical
for i in range(len(empty_list)):
    string_1 = ""
    string_2 = ""
    m = len(empty_list[i])
    for j in range(len(empty_list[i])):
        string_1 = string_1 + empty_list[j][i]
        string_2 = string_2 + empty_list[j][m-1-i]
    for k in range(len(crimes)):
        if crimes[k] in string_1 or crimes[k] in string_2:
            words.append(crimes[k])
            return words

print("Gentleman GoGo is guilty of:")
print(crossword())

1 个答案:

答案 0 :(得分:0)

此代码未经过优化(当然可以采用更高性能,更高阶的方式完成),但请查看https://repl.it/repls/DependentBubblyAssignment

我认为一种非常清晰且适合初学者的方法是创建第二个列表,将列重新排序为行 - 然后以与行中相同的方式搜索列匹配。

repl.it代码的详细信息:

crime in row or crime in row[::-1] - 检查ltr或rtl crime中是否存在row

verticals = ['' for char in slist[0]] - 创建一个列表,其中填充了与第一行长度相对应的空字符串(由于之前的line.split(' ')

,所以不包括空格

verticals[col] += slist[row][col] - 从col的{​​{1}}获取原始字符串中的字符,并将其附加到当前垂直row索引

对于您的示例数据,它会找到col