見出し画像

宝くじ1等当たるまで買い続けたら破産する説をpyhtonで検証してみた

今回はロト7を例にやってみます。

夢の6億円が当たったらと思うとわくわくしますよね!!
実際に1等当たり続けるまで買うとしたらどうなるのか、現実では怖いのでpyhtonでシミュレーションをしました。

コードは以下になります。

import random

def generate_winning_numbers():
    """当選番号を生成する関数"""
    return set(random.sample(range(1, 38), 7))

def generate_bonus_number(winning_numbers):
    """ボーナス数字を生成する関数"""
    all_numbers = set(range(1, 38))
    return random.choice(list(all_numbers - winning_numbers))

def purchase_loto7_ticket():
    """ロト7のチケットを購入する関数"""
    return set(random.sample(range(1, 38), 7))

def check_winning_level(purchased_numbers, winning_numbers, bonus_number):
    """当選レベルをチェックし、賞金を返す関数"""
    matched_numbers = len(purchased_numbers & winning_numbers)
    if matched_numbers == 7:
        return 600000000, "1等当選! 賞金:6億円"
    elif matched_numbers == 6:
        if bonus_number in purchased_numbers:
            return 7300000, "2等当選(ボーナス数字一致)! 賞金:730万円"
        else:
            return 730000, "3等当選! 賞金:73万円"
    elif matched_numbers == 5:
        return 9100, "4等当選! 賞金:9,100円"
    elif matched_numbers == 4:
        return 1400, "5等当選! 賞金:1,400円"
    elif matched_numbers == 3:
        if bonus_number in purchased_numbers:
            return 1000, "6等当選(ボーナス数字一致)! 賞金:1,000円"
    return 0, "外れ"

def simulate_loto7():
    """ロト7の抽選で1等が当たるまでのシミュレーションを行う関数"""
    cost_per_ticket = 300  # ロト7のチケット1枚の価格
    winnings = 0  # 獲得賞金の累計
    total_spent = 0  # 購入したチケットの金額累計
    tickets_bought = 0  # 購入したチケットの枚数

    while True:
        tickets_bought += 1
        total_spent += cost_per_ticket  # 購入金額の累計

        # 当選番号とボーナス数字を生成
        winning_numbers = generate_winning_numbers()
        bonus_number = generate_bonus_number(winning_numbers)

        # チケットを購入していると仮定し、当選判定
        purchased_numbers = purchase_loto7_ticket()
        prize_amount, message = check_winning_level(purchased_numbers, winning_numbers, bonus_number)
        winnings += prize_amount

        # 3等以上の場合のみ途中経過の表示
        if prize_amount >= 730000:  # 3等以上の条件
            print(message)
            difference = winnings - total_spent
            print(f"購入したチケットの枚数: {tickets_bought}, 購入金額: {total_spent}円, 差分: {difference}円")

        # 1等が当たったらループを終了
        if prize_amount == 600000000:
            print("おめでとうございます! 1等が当選しました!")
            break

    total_cost = tickets_bought * cost_per_ticket
    return total_cost, winnings, tickets_bought

# シミュレーションの実行
total_cost, winnings, tickets_bought = simulate_loto7()

# 最終結果の表示
print("\nシミュレーション結果:")
print(f"購入したチケットの枚数: {tickets_bought}")
print(f"費用の合計: {total_cost}円")
print(f"獲得した賞金: {winnings}円")
print(f"利益または損失: {winnings - total_cost}円")

検証結果は動画を見てください!


この記事が気に入ったらサポートをしてみませんか?