if regexp.match(thisword) is not None:
words.add(thisword)
- return list(words) # deduplicate, just in case
+ return list(words)
def wordlist_to_worddict(wordlist):
# Maybe should be a defaultdict, but this reduces dependencies
for word in wordlist:
- try:
- worddict[word[0]].append(word)
- except KeyError:
- worddict[word[0]] = [word, ]
-
+ if word[0] not in worddict:
+ worddict[word[0]] = []
+ worddict[word[0]].append(word)
+
return worddict
words = []
for letter in acrostic:
- try:
+ if letter in worddict: # better than try catch blocks
words.append(rng().choice(worddict[letter]))
- except KeyError:
+ else:
sys.stderr.write("No words found starting with " + letter + "\n")
sys.exit(1)
return words
"""
Choose numwords randomly from wordlist
"""
-
- return [rng().choice(wordlist) for i in xrange(numwords)]
+ assert len(wordlist) > 0
+
+ if len(wordlist) >= numwords:
+ return rng().sample(wordlist, numwords) # ensures no duplicates
+ else:
+ return rng().choices(wordlist, numwords) # allows duplicates if wordlist is small
def try_input(prompt, validate):