我有一项任务,我们必须在单词搜索中找到单词(减去对角线)。
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())
答案 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