Python 解决文字搜索并删除找到的字符
这就是问题所在: 要解决这个难题,您需要搜索并从单词搜索中删除列表中出现的所有单词(如果有多个) 图中保留的字母,按行和列的顺序排列, 他们将形成游戏的解决方案 文字可以水平显示在图表中(从右到左, 或从左至右),垂直(向下或向下) 顶部)和对角线(从上到下或从下到上) 定义一个函数es1(ftxt),它获取文本文件的地址, 包含拼图的单词图并返回字符串 游戏的解决方案 fname文件包含单词列表后面的单词搜索。 图表前面的一系列1行或多行空行将图表与列表分开 在单词列表之后。 图表按行记录(每行一行和连续行) 每行的制表符由单个字符('\t')分隔。 连续忙字列表,每行一个字Python 解决文字搜索并删除找到的字符,python,solver,wordsearch,crossword,Python,Solver,Wordsearch,Crossword,这就是问题所在: 要解决这个难题,您需要搜索并从单词搜索中删除列表中出现的所有单词(如果有多个) 图中保留的字母,按行和列的顺序排列, 他们将形成游戏的解决方案 文字可以水平显示在图表中(从右到左, 或从左至右),垂直(向下或向下) 顶部)和对角线(从上到下或从下到上) 定义一个函数es1(ftxt),它获取文本文件的地址, 包含拼图的单词图并返回字符串 游戏的解决方案 fname文件包含单词列表后面的单词搜索。 图表前面的一系列1行或多行空行将图表与列表分开 在单词列表之后。 图表按行记录(每
O T N E G R A S A E
R N N C O R A L L O
O A I B L U E E V G
U T O R E N T I I A
V I O L E T T O O R
O C R A R I A E L O
D A B I M A L V A P
I P C I E L O G L R
C O R P O S O U A O
A P I E N O M I L P
ACIDO
ARGENTO
BLU
CIELO
CORALLO
CORPOSO
ELETTRICO
LATTE
LIMONE
MALVA
NERO
OCRA
OPACITA
ORO
PAGLIERINO
PIENO
PORPORA
PRIMITIVO
VIOLA
VIOLETTO
我找到了所有的行、列和50%的对角线,
但我不知道如何找到在各个方向找到的字符的坐标来删除它,然后得到解决方案
这是我的代码:
with open('cp5_Colori.txt', 'r') as f:
data=f.read().replace("\t","")
data=data.split("\n\n")
lista_parole=data[1].split()
lista_orizzontale=data[0].split()
oriz_contraria=[x[::-1] for x in lista_orizzontale]
diz={}
c=0
b=0
cruzi_verticali=[]
for x in lista_parole: #loop to find rows and add the
found
words to a diz
for y in lista_orizzontale:
if x in y:
diz[x]=1
for z in oriz_contraria:
if x in z:
diz[x]=1
while c <= len(lista_orizzontale):
cruzi_verticali.append(lista_orizzontale[c][b]) #loop for
columns
c+=1
if c==len(lista_orizzontale):
cruzi_verticali.append("///")
c=0
b+=1
if b==len(lista_orizzontale):
c=len(lista_orizzontale)+1
joinata="".join(cruzi_verticali)
parole_verticali=joinata.split("///")
vert_contraria=[k[::-1] for k in parole_verticali] #convert to a list
of
strings and find
the
reversed of
colums
conta=0
conta2=0
for x in lista_parole:
for y in parole_verticali:
if x in y: #loop to add search word to
the diz
diz[x]=1
for z in vert_contraria:
if x in z:
diz[x]=1
cruzi_diagonali=[]
parole_diagonali=[]
diag_contraria=[]
prova=[]
itera=len(parole_verticali)**2
while len(prova)!=len(parole_verticali)-1:
cruzi_diagonali.append(parole_verticali[conta][conta2])
conta+=1
conta2+=1
if conta==len(lista_orizzontale):
cruzi_diagonali.append("///")
#loop to find a part of
diagonals
if conta==len(parole_verticali)-1:
conta=0
if conta==0:
prova.append(0)
conta=conta+len(prova)
conta2=0
prova2=[]
conta3=0
conta4=1
while len(prova2)!=len(parole_verticali)-1:
cruzi_diagonali.append(parole_verticali[conta3][conta4])
conta3+=1
conta4+=1
if conta4==len(lista_orizzontale):
cruzi_diagonali.append("///")
#loop to find lower
diagonals
if conta4==len(parole_verticali)-1:
conta4=0
if conta4==0:
prova2.append(0)
conta4=conta4+len(prova2)
conta3=0
joinata2="".join(cruzi_diagonali)
parole_diagonali=joinata2.split("///") #convert diagonals
into
a list of strings
diag_contraria=[k[::-1] for k in parole_diagonali]
for x in lista_parole:
for y in set(parole_diagonali):
if x in y: #loop to add the found words in
the dictionary as keys
diz[x]=1
for z in set(diag_contraria):
if x in z:
diz[x]=1
soluzione=[]
lista_totale=[]
lista_orizzontale2=lista_orizzontale[:]
for k in diz.keys():
for k2 in lista_orizzontale2: #all the found words in
the
row replaced with "*"
if k in k2:
hg=len(k)*"*"
k3=k2.replace(k,hg)
lista_orizzontale2.append(k3)
if "*" not in k2:
lista_orizzontale2.remove(k2)
以open('cp5_Colori.txt','r')作为f的:
data=f.read().replace(“\t”和“”)
data=data.split(“\n\n”)
lista_parole=数据[1]。拆分()
lista_orizzontale=数据[0]。拆分()
oriz_contaria=[x[:-1]代表列表中的x]
diz={}
c=0
b=0
cruzi_verticali=[]
对于列表中的x:#循环查找行并添加
建立
直言不讳
对于lista_orizzontale中的y:
如果x在y中:
diz[x]=1
对于oriz_contraria中的z:
如果x在z中:
diz[x]=1
而c你却让事情变得相当困难。不要在每个方向上变换拼图数组,只需依次访问每个字母,并从该字母开始在八个方向中的每个方向上查找单词
由于这似乎是一项家庭作业,我将让您填写详细信息,但您的代码的基本大纲应该如下所示:
puzzle=[OTNEGRASAE'、'RNNCORALLO'、'OAIBLUEEVG'中行的列表(行),
“UTORENTIIA”、“VIOLETTOOR”、“OCRARIAELO”、“DABIMALVAP”、“IPCIELOGLR”,
“CORPOSOUAO”、“APIENOMILP”]
单词列表=['ACIDO'、'ARGENTO'、'BLU'、'CIELO'、'CORALLO'、'CORPOSO'、'ELETTRICO',
‘拿铁’、‘利蒙’、‘马尔瓦’、‘尼禄’、‘奥克拉’、‘奥帕西塔’、‘奥罗’、‘帕格里里诺’,
“PIENO”、“PORPORA”、“PRIMITIVO”、“VIOLA”、“VIOLETTO”]
对于{单词列表中的每个单词}:
对于{拼图中的每个单元格}:
如果{cell.upper()==单词的第一个字符}:
对于[(1,0),(1,1),(0,1),(-1,1),(-1,0),(-1,-1),(0,-1),(1,-1)]中的方向:
(dx,dy)=方向
{这个拼图是否包含这个方向的所有其他单词字符?}
{如果是,请将这些单元格改为小写,并跳到下一个单词}
{从拼图中提取所有剩余的大写字母}
这是我根据您的想法编写的新代码:
with open('cp5_Colori.txt', 'r') as f:
import pprint
data=f.read().replace("\t","")
A=[]
data=data.split("\n\n")
word_list=data[1].split()
lista_orizzontale=data[0].split()
puzzle=[list(row) for row in lista_orizzontale]
for parola in word_list:
for lista in puzzle:
x=puzzle.index(lista)
for carattere in lista:
y=lista.index(carattere)
if carattere.upper() == parola[0]:
for direction in [(1,0),(1,1),(0,1),(-1,1),(-1,0),(-1,-1),(0,-1),(1,-1)]:
(dx, dy) = direction
for i in range(len(parola)):
if ((puzzle[x+dx*i][y+dy*i].upper()== parola[i]) and ((x+dx*i)<len(puzzle)) and ((y+dy*i)<len(lista))) == True:
A.append(puzzle[x+dx*i][y+dy*i])
if "".join(A)==parola:
else:
break
pprint.pprint(puzzle)
以open('cp5_Colori.txt','r')作为f的:
导入pprint
data=f.read().replace(“\t”和“”)
A=[]
data=data.split(“\n\n”)
word_list=数据[1]。拆分()
lista_orizzontale=数据[0]。拆分()
拼图=[列表中的行的列表(行)]
对于word_列表中的parola:
对于拼图中的lista:
x=拼图索引(列表A)
对于lista中的Caratter:
y=列表索引(克拉特)
如果carattere.upper()==parola[0]:
对于[(1,0),(1,1),(0,1),(-1,1),(-1,0),(-1,-1),(0,-1),(1,-1)]中的方向:
(dx,dy)=方向
对于范围内的i(len(parola)):
如果((拼图[x+dx*i][y+dy*i].upper()==parola[i])和((x+dx*i)谢谢你的帮助,我表示感谢,但不知道如何完成。我只是个乞丐。{这个拼图包含这个方向的所有其他单词字符吗?}怎么说呢..还有另一件事..在第一行它说无效的sytax这不会直接在Python中运行。正如我所说的,你必须自己编写代码。例如,要检查是否存在一个特定的单词,从一个特定的单元格开始(x,y)
方向(dx,dy)
,你可以用一些类似于的东西来表示范围内的i(len(word)):if puzzle[y+dy*i][x+dx*i].upper()!=word[i]:break
…等等……我不太理解你的方法……你能简单地给我写代码来找到单词的坐标吗?从我的代码开始,或者你想怎么做