Python выбрать метод, основанный на argparse - PullRequest
0 голосов
/ 10 ноября 2018

Я хочу выполнить разные методы, основанные на аргументах из CLI. Мой main.py:

from option import Option
import argparse

parser = argparse.ArgumentParser()
parser.add_argument( "--word", "-w", help="Find score for word", type=str)
args = parser.parse_args()

option = Option()
option.score_from_word(args.word)

и Option.py:

class Option():
    SCRABBLES_SCORES = [(1, "E A O I N R T L S U"), (2, "D G"), (3, "B C M P"),
                (4, "F H V W Y"), (5, "K"), (8, "J X"), (10, "Q Z")]
    global LETTER_SCORES 
    LETTER_SCORES = {letter: score for score, letters in SCRABBLES_SCORES
             for letter in letters.split()}

    def score_from_word(self,word):
        score = 0
        for w in word:
            if w in LETTER_SCORES.keys():
                score += LETTER_SCORES.get(w)
        print(score)

    def score_from_file(self):
        file = [line.rstrip('\n') for line in open('dictionary.txt', "r")]
        print(max(sum(LETTER_SCORES[c.upper()] for c in word) for word in file))

Если в командной строке я пишу: python -w KOT возвращает 7 и все в порядке. Но как добавить еще один аргумент и зависит от него выбрать другой метод для выполнения?

1 Ответ

0 голосов
/ 10 ноября 2018

Просто добавьте еще один аргумент и определите, в каком случае вы тестируете атрибуты args (Namespace).

from option import Option
import argparse

parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument( "--word", "-w", help="Find score for word", type=str)
group.add_argument( "--file", "-f", help="Find score for words in file", action='store_true')
args = parser.parse_args()

option = Option()
if args.word:
    option.score_from_word(args.word)
elif args.file:
    option.score_from_file()
...