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

2024-09-26 22:42:11 发布

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

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

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、beingsome、jaywalking和loidring。你知道吗

然而,在我的代码中,每个方向只能得到一个结果:闲逛和乱穿马路。我希望有人能给我一些建议,如何使它充分发挥作用。你知道吗

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())

Tags: inforstringlenlinerange单词list
1条回答
网友
1楼 · 发布于 2024-09-26 22:42:11

这段代码没有经过优化(当然可以用更高性能、更高阶的方式来完成),但是请看一下https://repl.it/repls/DependentBubblyAssignment

我认为一个非常清晰且对初学者友好的方法是创建第二个列表,将列重新排序为行,然后以与行中相同的方式搜索列中的匹配项。你知道吗

详细信息复制代码:

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

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

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

对于示例数据,它可以找到['LOITERING', 'SMOKING', 'REDRUM', 'BADSINGING', 'BEINGSMELLY', 'JAYWALKING']

相关问题 更多 >

    热门问题