Как сделать правильный поиск слова с Python? - PullRequest
0 голосов
/ 01 июня 2018

У меня есть задание, в котором мы должны найти слова в поиске слов (минус диагонали).

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,и слоняться без дела.

Тем не менее, в моем коде я получаю результат только по одному от каждого направления: слоняясь и сойка.Я надеялся, что кто-нибудь может дать мне несколько советов о том, как сделать его полностью функциональным.

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 голосов
/ 01 июня 2018

Этот код не оптимизирован (его, конечно, можно сделать более производительным, более высокого порядка), но взгляните на https://repl.it/repls/DependentBubblyAssignment

Я думаю, что очень четкий и удобный для новичков подход заключается в созданиивторой список, который переупорядочивает столбцы как строки, а затем ищет в столбцах совпадения так же, как в строках.

Сведения о коде repl.it:

crime in row or crime in row[::-1] - проверкиесли crime присутствует либо в ltr, либо в rtl row

verticals = ['' for char in slist[0]] - создает список, заполненный пустыми строками, соответствующими длине первой строки (исключая пробелы благодаря предыдущему line.split(' ')

verticals[col] += slist[row][col] - берет символ из исходной строки из col в row и добавляет его к текущей вертикали col index

Для данных в качестве примера этонаходит ['LOITERING', 'SMOKING', 'REDRUM', 'BADSINGING', 'BEINGSMELLY', 'JAYWALKING']

...