代码之家  ›  专栏  ›  技术社区  ›  ohid

纵横字谜中匹配字符的第一个实例的大写

  •  -1
  • ohid  · 技术社区  · 9 年前
    def find_word_horizontal(crosswords,word):
        for rows in crosswords:
            string=''.join(rows)
    
            if word in string:
                #finding index
                row_index=crosswords.index(rows)
                column_index=rows.index(word[0])
                return [row_index,column_index ]
        return None
    
    def find_word_vertical(crosswords,word):
        z=[list(i) for i in zip(*crosswords)]   
        for rows in z:          
            row_index = z.index(rows)
            single_row = ''.join(rows)      
            column_index = single_row.find(word)        
            if column_index >= 0:
                return([column_index, row_index])
    
    def capitalize_word_in_crossword(crosswords,word):
    
        if find_word_horizontal or find_word_vertical is not True:
            result = []
            for w in crosswords:            
                for l in w:
                    if l in word:
                        result.append(l.upper())                        
                    else:
                        result.append(l)
            return result
            #return [[l.upper() if l in word else l for l in w] for w in crosswords]
    crosswords=[['s','d','o','g'],['c','u','c','m'],['a','c','a','t'],['t','e','t','k']]
    word='cat'
    
    print(capitalize_word_in_crossword(crosswords,word))
    

    这是在纵横字谜中查找特定单词的代码。

    在这里,我开发了两个帮助函数来水平和垂直查找单词。如果同时找到水平和垂直匹配,则只返回水平匹配,并将二维列表中匹配的字符大写并返回列表。e、 例如,在我的上述代码中,它应该打印:

    [['s','d','o','g'],['c','u','c','m'],['a','C','A','T'],['t','e','t','k']]
    

    如果找不到匹配项,此函数只返回原始二维列表,不做任何修改。

    但我的代码返回 ['s','d','o','g','C','u','C','m','A','C','A','T','T','e','T','k']

    1 回复  |  直到 9 年前
        1
  •  0
  •   ohid    9 年前
    def capitalize_word_in_crossword(crossword,word):
    
        if not crossword or not word:
            return None
    
        word_find_horizontal_at= find_word_horizontal(crossword,word)
        if word_find_horizontal_at:
            for i in range(len(word)):
                crossword[word_find_horizontal_at[0]][word_find_horizontal_at[1]+i]=crossword[word_find_horizontal_at[0]][word_find_horizontal_at[1]+i].upper()
            return crossword
    
        word_find_vertical_at= find_word_vertical(crossword,word)
        if word_find_vertical_at:
            for j in range(len(word)):
                crossword[word_find_vertical_at[0]+j][word_find_vertical_at[1]]=crossword[word_find_vertical_at[0]+j][word_find_vertical_at[1]].upper()
        return crossword
    

    此代码给出了正确的结果。