Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
wordsearch
#1
Hi, I have got a problem in my searchword. Everything runs properly. Output writes word, coordinates and direction, but i need, that output have same arrangement as second file
First file includes board, where program search:
xmuinjekci
evelkochov
cadvouhrac
feminizaci
pyzlanpbik
ldvojlinky
osvrhloubd
dqldrvandy
yevergreen
olympskout

and second includes words:
dvojlinky
feminizaci
velkochov
dvouhra
olympskou
plody
dyn
rab
svrhlou
np
jo
lordem
velko
injekci
skout
mva
vandy
dvou
evergreen
ech
zla
kb
un
hrr
aj
ona

def find_words(file_inputs, words):
    with open(file_inputs) as file:
        for line in file:
            line = line.replace('\n', '')
            line = line.lower()
            words.append(line)

def get_search_board(file_inputs, search_board):
    with open(file_inputs) as file:
        for line in file:
            if len(line) > 6:
                line = line.lower()
                search_board += line
    length = search_board.index('\n') + 1
    return search_board, length

def main():
    words = []
    search_board = ''
    z = input().split()
    file_input = z[0]
    file_inputs = z[1]
    find_words(file_inputs, words)
    search_board, length = get_search_board(file_input, search_board)
    lines = {}

    lines["1"] = []

    letters = [(letter, divmod(index, length))
               for index, letter in enumerate(search_board)]

    lines['0'] = letters

    for i in range(length):
            for j in range(i, len(letters), length):
                lines["1"].append(letters[j])

    for direction, tuple in lines.items():
        string = ''.join([i[0] for i in tuple])
        for word in words:
            if word in string:
                coordinates = tuple[string.index(word)][1]
                print(word,coordinates[0], coordinates[1], direction)

main()
Output:
plody 4 0 1 dyn 6 9 1 rab 2 7 1 jo 0 5 1 lordem 4 3 1 mva 0 1 1 ech 0 6 1 kb 5 8 1 un 6 7 1 hrr 6 4 1 aj 4 4 1 ona 2 4 1 dvojlinky 5 1 0 feminizaci 3 0 0 velkochov 1 1 0 dvouhra 2 2 0 olympskou 9 0 0 svrhlou 6 1 0 np 4 5 0 velko 1 1 0 injekci 0 3 0 skout 9 5 0 vandy 7 5 0 dvou 2 2 0 evergreen 8 1 0 zla 4 2 0
but i need output like this

Output:
dvojlinky 5 1 0 feminizaci 3 0 0 velkochov 1 1 0 dvouhra 2 2 0 olympskou 9 0 0 plody 4 0 1 dyn 6 9 1 rab 2 7 1 svrhlou 6 9 0 np 4 5 0 jo 0 5 1 lordem 4 3 1 velko 1 1 0 injekci 0 3 0 skout 9 5 0 mva 0 1 1 vandy 7 5 0 dvou 2 2 0 evergreen 8 1 0 ech 0 6 1 zla 4 2 0 kb 5 8 1 un 6 7 1 hrr 6 4 1 aj 4 4 1 ona 2 4 1
Can u help me please? Smile
Reply
#2
At the end of your code, you have a for loop on direction/tuple (BTW, you shouldn't name a variable tuple, tuple is a built in function that is lost when you do that). Within that, you have a for loop on words. You want to reverse that: you want the first/outer loop to be on words, and the second/inner loop to be on direction/tuple.

Now, that means you are going to be calculating the string variable a lot more than you were. If that is a problem, I would recommend calculating all of the strings ahead of time. You have a dictionary of directions to tuples, just make one of direction to string. Then you can just access them from the dictionary each loop rather than recalculating them.
Craig "Ichabod" O'Brien - xenomind.com
I wish you happiness.
Recommended Tutorials: BBCode, functions, classes, text adventures
Reply
#3
ok, so i changed the inner/outer loop, but is exactly happening, what u said.
def find_words(file_inputs, words):
    with open(file_inputs) as file:
        for line in file:
            line = line.replace('\n', '')
            line = line.lower()
            words.append(line)

def get_search_board(file_inputs, search_board):
    with open(file_inputs) as file:
        for line in file:
            if len(line) > 6:
                line = line.lower()
                search_board += line
    length = search_board.index('\n') + 1
    return search_board, length

def main():
    words = []
    search_board = ''
    z = input().split()
    file_input = z[0]
    file_inputs = z[1]
    find_words(file_inputs, words)
    search_board, length = get_search_board(file_input, search_board)
    lines = {}

    lines["1"] = []

    letters = [(letter, divmod(index, length))
               for index, letter in enumerate(search_board)]

    lines['0'] = letters
    for i in range(length):
        for j in range(i, len(letters), length):
            lines["1"].append(letters[j])


        for word in words:
            for direction, tple in lines.items():
                string = ''.join([i[0] for i in tple])
                if word in string:
                    coordinates = tple[string.index(word)][1]
                    print(word, coordinates[0], coordinates[1], direction)
main()
and now the output
Output:
dvojlinky 5 1 0 feminizaci 3 0 0 velkochov 1 1 0 dvouhra 2 2 0 olympskou 9 0 0 plody 4 0 1 svrhlou 6 1 0 np 4 5 0 velko 1 1 0 injekci 0 3 0 skout 9 5 0 vandy 7 5 0 dvou 2 2 0 evergreen 8 1 0 zla 4 2 0 dvojlinky 5 1 0 feminizaci 3 0 0 velkochov 1 1 0 dvouhra 2 2 0 olympskou 9 0 0 plody 4 0 1 svrhlou 6 1 0 np 4 5 0 velko 1 1 0 injekci 0 3 0 skout 9 5 0 mva 0 1 1 vandy 7 5 0 dvou 2 2 0 evergreen 8 1 0 zla 4 2 0 dvojlinky 5 1 0 feminizaci 3 0 0 velkochov 1 1 0 dvouhra 2 2 0 olympskou 9 0 0 plody 4 0 1 svrhlou 6 1 0 np 4 5 0 velko 1 1 0 injekci 0 3 0 skout 9 5 0 mva 0 1 1 vandy 7 5 0 dvou 2 2 0 evergreen 8 1 0 zla 4 2 0 dvojlinky 5 1 0 feminizaci 3 0 0 velkochov 1 1 0 dvouhra 2 2 0 olympskou 9 0 0 plody 4 0 1 svrhlou 6 1 0 np 4 5 0 lordem 4 3 1 velko 1 1 0 injekci 0 3 0 skout 9 5 0 mva 0 1 1 vandy 7 5 0 dvou 2 2 0 evergreen 8 1 0 zla 4 2 0 dvojlinky 5 1 0 feminizaci 3 0 0 velkochov 1 1 0 dvouhra 2 2 0 olympskou 9 0 0 plody 4 0 1 svrhlou 6 1 0 np 4 5 0 lordem 4 3 1 velko 1 1 0 injekci 0 3 0 skout 9 5 0 mva 0 1 1 vandy 7 5 0 dvou 2 2 0 evergreen 8 1 0 zla 4 2 0 hrr 6 4 1 aj 4 4 1 ona 2 4 1 dvojlinky 5 1 0 feminizaci 3 0 0 velkochov 1 1 0 dvouhra 2 2 0 olympskou 9 0 0 plody 4 0 1 svrhlou 6 1 0 np 4 5 0 jo 0 5 1 lordem 4 3 1 velko 1 1 0 injekci 0 3 0 skout 9 5 0 mva 0 1 1 vandy 7 5 0 dvou 2 2 0 evergreen 8 1 0 zla 4 2 0 hrr 6 4 1 aj 4 4 1 ona 2 4 1 dvojlinky 5 1 0 feminizaci 3 0 0 velkochov 1 1 0 dvouhra 2 2 0 olympskou 9 0 0 plody 4 0 1 svrhlou 6 1 0 np 4 5 0 jo 0 5 1 lordem 4 3 1 velko 1 1 0 injekci 0 3 0 skout 9 5 0 mva 0 1 1 vandy 7 5 0 dvou 2 2 0 evergreen 8 1 0 ech 0 6 1 zla 4 2 0 hrr 6 4 1 aj 4 4 1 ona 2 4 1 dvojlinky 5 1 0 feminizaci 3 0 0 velkochov 1 1 0 dvouhra 2 2 0 olympskou 9 0 0 plody 4 0 1 rab 2 7 1 svrhlou 6 1 0 np 4 5 0 jo 0 5 1 lordem 4 3 1 velko 1 1 0 injekci 0 3 0 skout 9 5 0 mva 0 1 1 vandy 7 5 0 dvou 2 2 0 evergreen 8 1 0 ech 0 6 1 zla 4 2 0 un 6 7 1 hrr 6 4 1 aj 4 4 1 ona 2 4 1 dvojlinky 5 1 0 feminizaci 3 0 0 velkochov 1 1 0 dvouhra 2 2 0 olympskou 9 0 0 plody 4 0 1 rab 2 7 1 svrhlou 6 1 0 np 4 5 0 jo 0 5 1 lordem 4 3 1 velko 1 1 0 injekci 0 3 0 skout 9 5 0 mva 0 1 1 vandy 7 5 0 dvou 2 2 0 evergreen 8 1 0 ech 0 6 1 zla 4 2 0 kb 5 8 1 un 6 7 1 hrr 6 4 1 aj 4 4 1 ona 2 4 1 dvojlinky 5 1 0 feminizaci 3 0 0 velkochov 1 1 0 dvouhra 2 2 0 olympskou 9 0 0 plody 4 0 1 dyn 6 9 1 rab 2 7 1 svrhlou 6 1 0 np 4 5 0 jo 0 5 1 lordem 4 3 1 velko 1 1 0 injekci 0 3 0 skout 9 5 0 mva 0 1 1 vandy 7 5 0 dvou 2 2 0 evergreen 8 1 0 ech 0 6 1 zla 4 2 0 kb 5 8 1 un 6 7 1 hrr 6 4 1 aj 4 4 1 ona 2 4 1 dvojlinky 5 1 0 feminizaci 3 0 0 velkochov 1 1 0 dvouhra 2 2 0 olympskou 9 0 0 plody 4 0 1 dyn 6 9 1 rab 2 7 1 svrhlou 6 1 0 np 4 5 0 jo 0 5 1 lordem 4 3 1 velko 1 1 0 injekci 0 3 0 skout 9 5 0 mva 0 1 1 vandy 7 5 0 dvou 2 2 0 evergreen 8 1 0 ech 0 6 1 zla 4 2 0 kb 5 8 1 un 6 7 1 hrr 6 4 1 aj 4 4 1 ona 2 4 1
it printed 10 times but just the last one is ok, how i must change the code, so it prints just the last one

Ok, I got it
Reply


Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020