見出し画像

ガチャフルコンプを目指すための軍資金を調べるツールを作ってみました

皆様、こんにちは。
もうめっきりガチャに課金しなくなった勢、いぬころんです。
今回はガチャフルコンプ軍資金調査のプログラムを
Pythonで作ってみました。(※文法忘れまくってる件)
是非ご活用くださいませ^^

経緯

先日、プロセカ友達の友人がプロセカウエハースを購入していたのですが、
このウエハースってフルコンプしたらどれくらいの金額が必要なのか?と
なんとなく思い立ってしまったので、久々にPythonで調査!

あくまで確率論にはなるのですが、
ある程度平均値を取ることはできようかと思うので、
これからガチャをされる方はご参考くださいませ。

ファイルダウンロードはこちら

仕様

今回は「経緯」でも紹介したように、ウエハースに入っているトレカの
フルコンプにかかる金額調査となっています。
よって仕様は以下のとおりです。

出来ること

①全部で何種類のカードが有るか?
②1パックを購入するのにいくらかかるか?
以上の2つを指定して、全てをゲットするためにいくらかかるのかを
自動計算してくれます。

注意点

今回のツールでは以下のような前提が存在します。

①1パックに入っているトレカは必ず1枚。
②全てのカードについて、出てくる確率は同様に確からしい。
 (※10種類のカードが有るなら、どのカードもでる確率は10%)
③表示される金額には単純に「はじめに指定した金額×買ったパック数」
 (※はじめに入力した金額が税別なら、消費税を足して見積もるべし!)

ソースコード

ソースコードは以下のとおりです。
今回は比較的短いので関数定義などをしてません。

import random

while True:
    # 種類数を設定
    try:
        serial = int(input("全部で何種類ですか?→"))
    except:
        print("数字を入れてください")
        continue
    break

while True:
    # 単価を設定
    try:
        cash = int(input("何円ですか?→"))
    except:
        print("数字を入れてください")
        continue
    break

times = 0  # 調査回数
openresult = []  # 一回の調査で開けたパック数のリスト
cashresult = []  # 一回の調査でかかった金額のリスト

while True:  # 「もう一度やってみますか」でNOを選択するまで繰り返し
    alllist = list(range(serial))  # 「0~入力した数-1」の整数連番のリスト・表示の際に調整
    times = times + 1
    openpack = 0  # その調査で開けたパック数
    # print(alllist) #初期リストのテスト表示用
    while True:
        openpack = openpack + 1
        getindex = random.randint(0, serial - 1)  # 全体からランダムに数字を抽出

        print(str(openpack) + "個目のパック:" + str(getindex + 1) + "番をゲット!")

        if alllist[getindex] == str("get"):
            print("かぶりです!")
            continue

        print("初ゲットです!")

        # 全体のリストから今回ゲットした番号のものを"get"に変更
        # 同じものが次回以降で出てくる可能性があるため、リストからの削除はNG
        alllist[getindex] = "get"
        # print(alllist) #引いた結果更新されたリストのチェック用

        if alllist.count("get") == serial:  # リストの全ての要素が"get"になったらフルコンプしたとしてループ抜け
            print("フルコンプしました!")
            break

    print("フルコンプまで" + str(openpack) + "このパックを開けました!")
    print("フルコンプにかかった金額は" + str(openpack * cash) + "円です\(^o^)/")

    # 調査内で開けた回数をリストに追加
    openresult.append(openpack)
    # 調査内でかかった金額をリストに追加
    cashresult.append(openpack * cash)

    retry = input("もう一回やりますか?(何も入れずにEntar>終了 それ以外はもう一回)")
    if retry == "":
        break

openindex = 0
opensum = 0
while True:
    opensum = opensum + openresult[openindex]
    openindex = openindex + 1
    if openindex == len(openresult):
        break
openave = opensum / len(openresult)

cashindex = 0
cashsum = 0
while True:
    cashsum = cashsum + cashresult[cashindex]
    cashindex = cashindex + 1
    if cashindex == len(cashresult):
        break
cashave = cashsum / len(cashresult)

print("今回の調査回数:" + str(times))
print("平均の購入パック数:" + str(round(openave,2)) + "個")
print("平均の購入金額:" + str(round(cashave,2)) + "円")
print("今回の調査で開けたパック数の最小数は"+str(min(openresult))+":最大数は"+str(max(openresult))+"でした。")
print("今回の調査でかかった金額の最小額は"+str(min(cashresult))+"円:最大額は"+str(max(cashresult))+"円でした。")

input("enterで終了します。")

実行画面サンプル

※初期段階のものなので後にいくらか追加機能が加わっています

記事をご覧頂きまして、まことにありがとうございます。 「缶コーヒーの差し入れ」くらいの気持ちでサポートをしてくれされば とても励みになります。