pythonstringlistwordsearch

Word Searcher from Words.list


I was helping my mom with this word search app earlier while taking a break from some python tutorials and I realized -- what a perfect example of something interesting for me to work on/learn from.

Here's what I came up with, and while it works, I have to do some extra steps to figure out the words.

It seems that my double characters don't register as two, and one of them gets replaced with a non-relevant letter.

I've tried a lot of different things -- popping, removing. for character in words and not in myletters (to subtract out the difference). A lot of what I found involving this stuff were grids, and directionals, but I'm really just interested in a split list of words from my character input. Any help is appreciated.

Sidenote - I am very new to coding, so idk if this was the appropriate route. This x was x * 10 simpler than any example I could find. (Maybe why it doesn't work the way I want it to? ;p)

wordlist = open("PossibleWords.txt", "r").read().split()
myletters = input("Letters?: ").lower()
s = list()
sorted = str(myletters)

for word in wordlist:
    if len(word) == len(myletters) and all(letter in word for letter in sorted):
        s.append(word)
for length in s[:100]:
print(length)

Solution

  • Based on the OP's recent comment, it sounds like we're taking about word search. To not lose the double letters, we'll use Counter and compare counters:

    from collections import Counter
    
    def is_sub_count(counter_super, counter_sub):
    
        counter_sub.subtract(counter_super)
    
        return all(count <= 0 for count in counter_sub.values())
    
    myLetters = input("Letters?: ").lower()
    myCount = Counter(myLetters)
    myLength = len(myLetters)
    
    words = open("PossibleWords.txt").read().split()
    
    found = list()
    
    for word in words:
        if len(word) <= myLength and is_sub_count(myCount, Counter(word.lower())):
            found.append(word)
    
    print(*found, sep='\n')
    

    USAGE

    > python3 test.py
    Letters?: uassage
    a
    age
    ague
    as
    ass
    assuage
    gas
    gauss
    guess
    sag
    saga
    sage
    sausage
    sea
    sue
    us
    usage
    use
    >