From 2bc9d9fb9ecb6f420f9c9ba9c46e9b26d61736ac Mon Sep 17 00:00:00 2001 From: Cameron Blankenbuehler Date: Wed, 24 May 2023 19:20:30 -0400 Subject: [PATCH] Add argument parsing to main module --- boggler/__main__.py | 41 ++++++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/boggler/__main__.py b/boggler/__main__.py index bbc82fe..e4ab7f6 100755 --- a/boggler/__main__.py +++ b/boggler/__main__.py @@ -1,24 +1,35 @@ """Boggler Demo""" +import argparse import sys from pathlib import Path from .boggler_utils import BoggleBoard, build_full_boggle_tree, read_boggle_file -def main(): - if len(sys.argv) < 3 or len(sys.argv) > 4: - print('Usage: python3 boggler.py [MAX_WORD_LENGTH]') - sys.exit(1) +parser = argparse.ArgumentParser( + prog="boggler", + description="Boggle board game solver" +) - board = read_boggle_file(Path(sys.argv[1])) - if len(sys.argv) == 3: - boggle_board = BoggleBoard(board) - elif len(sys.argv) == 4: - try: - boggle_board = BoggleBoard(board, int(sys.argv[3])) - except ValueError: - print("Invalid MAX_WORD_LENGTH. Please try again with a valid integer.") - sys.exit(1) +parser.add_argument("board", type=Path, help="Path to board CSV file") +parser.add_argument("wordlists", type=Path, + help="Path to directory of wordlist files. The directory must contain \ + text files of the form words_X.txt where \"X\" is a character of \ + the alphabet") +parser.add_argument("max_word_length", nargs="?", type=int, default=16, + help="Maximum length of words searched for on provided board") + +args = parser.parse_args() + +def main(): + """Command line tool for sovling Boggle boards""" + board = read_boggle_file(args.board) try: - boggle_tree = build_full_boggle_tree(boggle_board, Path(sys.argv[2])) + boggle_board = BoggleBoard(board, args.max_word_length) + except ValueError: + print("Invalid MAX_WORD_LENGTH. Please try again with a valid integer.") + sys.exit() + + try: + boggle_tree = build_full_boggle_tree(boggle_board, args.wordlists) print("\nBOARD") print(boggle_board) @@ -28,7 +39,7 @@ def main(): for word in tree.word_paths: print(f"{word[0]: <{boggle_board.max_word_len}}: {word[1]}") - except ValueError as e: + except ValueError: print("The [MAX_WORD_LENGTH] argument must be an integer.") print("Please try again.") sys.exit(1)