現在のコマンドライン引数処理部分は、以下のようになっています。
(ファイル名) 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()