現在のコマンドライン引数処理部分は、以下のようになっています。
(ファイル名) loto.pyの一部
if len(sys.argv) != 2: print("""引数の数が違います。 loto 種別(5,6,7) 抽選回(1〜) """) sys.exit() div = int(sys.argv[1]) if div < 5 or div > 7: print("宝くじ種別が違います。") print("""宝くじ種別: 5:ミニロト 6:ロト6 7:ロト7""") sys.exit()
このまま突き進むと、プログラムに機能が増えてきた時にえらいことになりそうなので、argparseを使う方法に変更します。
»argparseによるコマンドライン引数の解析
コマンドライン引数解析部分は、以下のようになります。
from argparse import ArgumentParser as ap def main(): parser = ap() loto_choices = ['miniloto', 'loto6', 'loto7'] parser.add_argument("loto_div", help="宝くじ種別(miniloto,loto6,loto7)", choices=loto_choices) parser.add_argument("-f", "--function", help="機能: f)分布図の表示 n)予想抽選番号を当てる", choices=['f', 'n'], default='n') args = parser.parse_args()
プログラムの機能が増えた場合は、-functionオプション引数に選択項目を追加します。
これを踏まえて、loto.pyを書き替えると以下のようになります。
(ファイル名) loto.py
import sys import numpy as np import matplotlib.pyplot as plt from argparse import ArgumentParser as ap from all_loto import AllLoto from miniloto_analysis import MinilotoAnalysis from loto6_analysis import Loto6Analysis from loto7_analysis import Loto7Analysis # from algo.distribution import distribution def main(): parser = ap() loto_choices = ['miniloto', 'loto6', 'loto7'] parser.add_argument("loto_div", help="宝くじ種別(miniloto,loto6,loto7)", choices=loto_choices) parser.add_argument("-f", "--function", help="機能: f)分布図の表示 n)予想抽選番号を当てる", choices=['f', 'n'], default='n') args = parser.parse_args() loto_div = loto_choices.index(args.loto_div) loto_class = [MinilotoAnalysis, Loto6Analysis, Loto7Analysis] all_loto = AllLoto() loto_data = [all_loto.miniloto, all_loto.loto6, all_loto.loto7] analysis = loto_class[loto_div](loto_data[loto_div]) # 機能(--functionオプション)による場合分け if args.function == 'f': ratio = analysis.number_ratio() plt.bar(list(range(1, len(ratio)+1)), ratio) plt.show() elif args.function == 'n': print("抽選番号は〜です。") if __name__ == '__main__': main()