From: Rahul Goswami Date: Wed, 28 Feb 2018 20:14:26 +0000 (+0000) Subject: Update xkcd_password.py X-Git-Url: http://git.99rst.org/?a=commitdiff_plain;h=b282ba93f1105284c98322d22be5d023d9f2843e;p=redacted-XKCD-password-generator.git Update xkcd_password.py Replaced unnecessary try-except blocks with if-else statements and some other changes. --- diff --git a/xkcdpass/xkcd_password.py b/xkcdpass/xkcd_password.py index aee8319..193bf52 100755 --- a/xkcdpass/xkcd_password.py +++ b/xkcdpass/xkcd_password.py @@ -134,7 +134,7 @@ def generate_wordlist(wordfile=None, 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): @@ -147,11 +147,10 @@ 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 @@ -191,9 +190,9 @@ def find_acrostic(acrostic, 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 @@ -203,8 +202,12 @@ def choose_words(wordlist, numwords): """ 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):