Skip to main content
Code Review

Return to Question

Tweeted twitter.com/StackCodeReview/status/979324827017404418
deleted 14 characters in body; edited tags; edited title
Source Link
Jamal
  • 35.2k
  • 13
  • 134
  • 238

From a set of words, output all words that fit a string of random letters (like Scrabble) in Python

I am in my first year of programming with Python 3 and am wondering if anyone had a better way to program this problem. When the user provides up to 7 random letters as a single string, the program should read the ‘wordlist.txt’ file, list the words from that file that can be constructed using some or all of those letters.

For example, if the user provides three letters, ‘AER’ as a string, the program will suggest the following words from the given file: 'AE', 'AR', 'ARE', 'EA', 'EAR', 'ER', 'ERA', 'RE'

This is what I have for now:

wordlist=list(line.strip('\n') for line in open('wordlist.txt','r'))
def wordFinder():
 words=[]
 letters=str.upper(input('enter up to 7 letters:'))
 for word in wordlist:
 candidate=True
 letterlist=list(letters)
 for letter in word:
 if letter not in letterlist:
 candidate=False
 break
 else:
 letterlist.remove(letter)
 if candidate==True:
 words.append(word) 
 return words
>>>options()
enter up to 7 letters:aer
>>>['AE', 'AR', 'ARE', 'EA', 'EAR', 'ER', 'ERA', 'RE']

Even though it works I am looking to see if there is an easier/more efficient way for doing it. I came close with list comprehension, but I couldn't figure out how to avoid input letters matching more than once with the potential words.

def options2():
 words=[]
 letters=set(str.upper(input('Enter up to 7 letters:')))
 words=[w for w in wordlist
 if set(w).issubset(letters)
 and len(w)<=len(letters)]
 return words
>>>options2()
enter up to 7 letters:aer
>>>['AA','AE','AR','ARE','EA','EAR','EE','ER','ERA','ERE','ERR','RE','REE']

If any changes could be made for the second function to work that would be awesome. Thanks!

From a set of words, output all words that fit a string of random letters (like Scrabble) in Python

I am in my first year of programming with Python 3 and am wondering if anyone had a better way to program this problem. When the user provides up to 7 random letters as a single string, the program should read the ‘wordlist.txt’ file, list the words from that file that can be constructed using some or all of those letters.

For example, if the user provides three letters, ‘AER’ as a string, the program will suggest the following words from the given file: 'AE', 'AR', 'ARE', 'EA', 'EAR', 'ER', 'ERA', 'RE'

This is what I have for now:

wordlist=list(line.strip('\n') for line in open('wordlist.txt','r'))
def wordFinder():
 words=[]
 letters=str.upper(input('enter up to 7 letters:'))
 for word in wordlist:
 candidate=True
 letterlist=list(letters)
 for letter in word:
 if letter not in letterlist:
 candidate=False
 break
 else:
 letterlist.remove(letter)
 if candidate==True:
 words.append(word) 
 return words
>>>options()
enter up to 7 letters:aer
>>>['AE', 'AR', 'ARE', 'EA', 'EAR', 'ER', 'ERA', 'RE']

Even though it works I am looking to see if there is an easier/more efficient way for doing it. I came close with list comprehension, but I couldn't figure out how to avoid input letters matching more than once with the potential words.

def options2():
 words=[]
 letters=set(str.upper(input('Enter up to 7 letters:')))
 words=[w for w in wordlist
 if set(w).issubset(letters)
 and len(w)<=len(letters)]
 return words
>>>options2()
enter up to 7 letters:aer
>>>['AA','AE','AR','ARE','EA','EAR','EE','ER','ERA','ERE','ERR','RE','REE']

If any changes could be made for the second function to work that would be awesome. Thanks!

From a set of words, output all words that fit a string of random letters (like Scrabble)

I am in my first year of programming with Python 3 and am wondering if anyone had a better way to program this problem. When the user provides up to 7 random letters as a single string, the program should read the ‘wordlist.txt’ file, list the words from that file that can be constructed using some or all of those letters.

For example, if the user provides three letters, ‘AER’ as a string, the program will suggest the following words from the given file: 'AE', 'AR', 'ARE', 'EA', 'EAR', 'ER', 'ERA', 'RE'

This is what I have for now:

wordlist=list(line.strip('\n') for line in open('wordlist.txt','r'))
def wordFinder():
 words=[]
 letters=str.upper(input('enter up to 7 letters:'))
 for word in wordlist:
 candidate=True
 letterlist=list(letters)
 for letter in word:
 if letter not in letterlist:
 candidate=False
 break
 else:
 letterlist.remove(letter)
 if candidate==True:
 words.append(word) 
 return words
>>>options()
enter up to 7 letters:aer
>>>['AE', 'AR', 'ARE', 'EA', 'EAR', 'ER', 'ERA', 'RE']

Even though it works I am looking to see if there is an easier/more efficient way for doing it. I came close with list comprehension, but I couldn't figure out how to avoid input letters matching more than once with the potential words.

def options2():
 words=[]
 letters=set(str.upper(input('Enter up to 7 letters:')))
 words=[w for w in wordlist
 if set(w).issubset(letters)
 and len(w)<=len(letters)]
 return words
>>>options2()
enter up to 7 letters:aer
>>>['AA','AE','AR','ARE','EA','EAR','EE','ER','ERA','ERE','ERR','RE','REE']

If any changes could be made for the second function to work that would be awesome.

Source Link
jtdans
  • 43
  • 1
  • 4

From a set of words, output all words that fit a string of random letters (like Scrabble) in Python

I am in my first year of programming with Python 3 and am wondering if anyone had a better way to program this problem. When the user provides up to 7 random letters as a single string, the program should read the ‘wordlist.txt’ file, list the words from that file that can be constructed using some or all of those letters.

For example, if the user provides three letters, ‘AER’ as a string, the program will suggest the following words from the given file: 'AE', 'AR', 'ARE', 'EA', 'EAR', 'ER', 'ERA', 'RE'

This is what I have for now:

wordlist=list(line.strip('\n') for line in open('wordlist.txt','r'))
def wordFinder():
 words=[]
 letters=str.upper(input('enter up to 7 letters:'))
 for word in wordlist:
 candidate=True
 letterlist=list(letters)
 for letter in word:
 if letter not in letterlist:
 candidate=False
 break
 else:
 letterlist.remove(letter)
 if candidate==True:
 words.append(word) 
 return words
>>>options()
enter up to 7 letters:aer
>>>['AE', 'AR', 'ARE', 'EA', 'EAR', 'ER', 'ERA', 'RE']

Even though it works I am looking to see if there is an easier/more efficient way for doing it. I came close with list comprehension, but I couldn't figure out how to avoid input letters matching more than once with the potential words.

def options2():
 words=[]
 letters=set(str.upper(input('Enter up to 7 letters:')))
 words=[w for w in wordlist
 if set(w).issubset(letters)
 and len(w)<=len(letters)]
 return words
>>>options2()
enter up to 7 letters:aer
>>>['AA','AE','AR','ARE','EA','EAR','EE','ER','ERA','ERE','ERR','RE','REE']

If any changes could be made for the second function to work that would be awesome. Thanks!

lang-py

AltStyle によって変換されたページ (->オリジナル) /