Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python制作合适的单词搜索器?_Python_Python 3.x_List_File_Loops - Fatal编程技术网

如何使用Python制作合适的单词搜索器?

如何使用Python制作合适的单词搜索器?,python,python-3.x,list,file,loops,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

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

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
单词搜索。我们必须从列表中找出搜索范围内的犯罪词语:

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
["JAYWALKING", "BURGLARY", "LAUNDERING", "BADSINGING", "REDRUM", "SMOKING", "BEINGSMELLY","CONNING", "SCAMS", "LOITERING"]
我已经完成了单词搜索,并确定需要找到的单词有:红色、唱衰、气味难闻、乱穿马路和游荡

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
然而,在我的代码中,我只从每个方向得到一个结果:游荡和乱穿马路。我希望有人能给我一些建议,如何使它充分发挥功能

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

这段代码没有经过优化(当然可以以更高性能、更高阶的方式完成),但请看一看

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
我认为一种非常清晰且对初学者友好的方法是创建第二个列表,将列重新排序为行,然后以与行中相同的方式搜索列中的匹配项

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
repl.it代码的详细信息:

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
在行犯罪或在行犯罪[:-1]
-检查ltr或rtl
在行犯罪是否存在

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
verticals=[''用于slist[0]]
-创建一个列表,该列表中填充了与第一行长度相对应的空字符串(不包括前一行的空格)。拆分('')

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
verticals[col]+=slist[row][col]
-从
行的
col
中的原始字符串中获取字符,并将其附加到当前的垂直
col
索引中

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

对于您的示例数据,它会发现
['loiring'、'SMOKING'、'REDRUM'、'BADSINGING'、'beingsomethy'、'arywilking']

首先您要返回循环内部,就在最后一次打印之前。这意味着它将进入循环内部,追加并返回单词列表。其中只有一个条目yes:/也停止使用“open”-改为使用“with open”构造,以避免像当前代码中那样的错误-您从未关闭过该文件非常感谢。我注意到一个错误,其中一个水平词(loiding)被省略,以换取不存在的东西(smoking)当代码运行时。我将尝试修复此问题。对我来说,此代码比我尝试执行的操作更容易理解。YW-但您指的是输入数据或代码中的错误(我不理解该部分)?我添加了一些调试代码-我不确定您在哪里看到错误发生,您能解释一下吗?如果您查看单词search本身,在底部水平线上,您可以看到单词“loiding”。但是,您生成的代码返回“smoking”这在拼图中完全不存在。垂直部分产生了预期的结果,但水平部分没有。我很抱歉。它现在输出的是游荡。我不知道发生了什么,我在前面查看时完全错过了垂直部分的吸烟。非常感谢。
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