Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.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_Solver_Wordsearch_Crossword - Fatal编程技术网

Python 解决文字搜索并删除找到的字符

Python 解决文字搜索并删除找到的字符,python,solver,wordsearch,crossword,Python,Solver,Wordsearch,Crossword,这就是问题所在: 要解决这个难题,您需要搜索并从单词搜索中删除列表中出现的所有单词(如果有多个) 图中保留的字母,按行和列的顺序排列, 他们将形成游戏的解决方案 文字可以水平显示在图表中(从右到左, 或从左至右),垂直(向下或向下) 顶部)和对角线(从上到下或从下到上) 定义一个函数es1(ftxt),它获取文本文件的地址, 包含拼图的单词图并返回字符串 游戏的解决方案 fname文件包含单词列表后面的单词搜索。 图表前面的一系列1行或多行空行将图表与列表分开 在单词列表之后。 图表按行记录(每

这就是问题所在:

要解决这个难题,您需要搜索并从单词搜索中删除列表中出现的所有单词(如果有多个)

图中保留的字母,按行和列的顺序排列, 他们将形成游戏的解决方案

文字可以水平显示在图表中(从右到左, 或从左至右),垂直(向下或向下) 顶部)和对角线(从上到下或从下到上)

定义一个函数es1(ftxt),它获取文本文件的地址, 包含拼图的单词图并返回字符串 游戏的解决方案

fname文件包含单词列表后面的单词搜索。 图表前面的一系列1行或多行空行将图表与列表分开 在单词列表之后。 图表按行记录(每行一行和连续行) 每行的制表符由单个字符('\t')分隔。 连续忙字列表,每行一个字

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
…等等……我不太理解你的方法……你能简单地给我写代码来找到单词的坐标吗?从我的代码开始,或者你想怎么做