User:3 d20サイコロをロールするコードをPythonに書き込み、2つの最高のロールを合計して、最低ロールを取り除きます。これを100回繰り返し、ループの最後に各数値の周波数のヒストグラムを形成します。 Assistant:これは、3 d20サイコロをロールするPythonコードを紹介し、2つの最高のロールを合計して、最低ロールを取り除きます。このプロセスを100回繰り返し、ループの最後に各数値の周波数のヒストグラムを形成します。
`` `
ランダムをインポートします
pltとしてmatplotlib.pyplotをインポートします

rolls = []
範囲（100）のIの場合：
    dice = [random.randint（1、20）for _ in range（3）]
    rolls.append（sum（sorted（dice）[1：]））
    
plt.hist（rolls、bins = range（3、41））
plt.xlabel（「2つの最高のロールの合計」）
plt.ylabel（ '頻度'）
plt.title（ 'サイコロロールのヒストグラム'）
plt.show（）
`` `

説明：

必要なモジュールをインポートすることから始めます。ランダムにランダム数とmatplotlib.pyplotを生成して、ヒストグラムをプロットします。
ロールと呼ばれる空のリストを作成して、各ロールの結果を保存します。
LOOPを使用して、ロールプロセスを100回繰り返します。ループの各反復で：
リスト理解とrandom.randint（）関数を使用して、1〜20（包括的）の間の3つのランダム整数を含むサイコロと呼ばれるリストを生成します。
sorted（）関数を使用して昇順でリストを並べ替え、[1：]を使用して最初の要素（つまり、最低ロール）をスライスします。
残りの2つの要素を合計（）関数を使用して合計し、結果をロールリストに追加します。
最後に、PLT.HIST（）を使用してロールリストのヒストグラムをプロットし、ビンを3（最低2つの最高のロールの最小合計）から40（最大2つの最高のロールの最大合計）に設定します。Plt.xlabel（）、plt.ylabel（）、およびplt.title（）を使用して、ラベルとタイトルをプロットに追加します。 
User:なぜ2つの最高のサイコロロールの合計が3になるのでしょうか？3つのサイコロがすべて1を示している場合、2つの「最高」ダイの合計は2で、3ではなく2です！

また、さまざまな数の合計ロール（ハードコード100ではありません）でこれを試してみたいと思います。次のようにコードを編集してください。
* 2の合計はヒストグラムに含まれています
*ロールの総数を定義する引数で、コマンドラインからこのスクリプトを呼び出すことができます。
あなたは正しいです。2つの最高のサイコロロールの合計は、決して3になりません。以前の回答の間違いをお詫びします。

3つのサイコロが表示され、ヒストグラムに2の合計が含まれ、コマンドライン引数を受け入れてロールの総数を指定するシナリオを正しく処理するコードの更新された実装は次のとおりです。

    ランダムをインポートします
    pltとしてmatplotlib.pyplotをインポートします
    sysをインポートします

    ＃コマンドラインでロールス引数の総数が提供されているかどうかを確認します
    Len（Sys.Argv）> 1の場合：
        total_rolls = int（sys.argv [1]）
    それ以外：
        total_rolls = 100＃引数が提供されていない場合のデフォルトの合計ロール

    ＃空のリストを初期化してロール結果を保存する
    結果= []

    ＃指定された回数をサイコロします
    範囲のi（total_rolls）：
        ＃ロール3 D20サイコロ
        rolls = [random.randint（1、20）for _ in range（3）]
    
        ＃ロールを降順で並べ替えます
        rolls.sort（reverse = true）
    
        ＃2つの最高のロールの合計を取得し、結果リストに追加します
        ロール[1] == 1とロールス[0] == 1の場合：
        ＃すべてのロールが1の場合、結果リストに2を追加します
            results.append（2）
        それ以外：
            results.append（rolls [0] + rolls [1]）
    
    ＃各数値の周波数のヒストグラムを生成する
    plt.hist（results、bins = range（2、41）、align = 'left'、rwidth = 0.8）
    plt.xticks（範囲（2、41））
    plt.xlabel（「2つの最高のロールの合計」）
    plt.ylabel（ '頻度'）
    plt.show（）

更新されたコードは、最初にコマンドライン引数が提供されているかどうかを確認し、それを使用してロールの総数を設定します。引数が提供されていない場合、デフォルトの合計ロールを100に設定します。

コードの残りの部分は、以前の実装に似ています。指定された回数を3 d20サイコロし、ロールを降順でソートし、2つの最高のロールの合計を取得します。3つのロールがすべて1の場合、「結果」リストに2が追加されます。それ以外の場合は、「結果」リストに2つの最高のロールの合計を追加します。

最後に、コードは、 `plt.hist（）`関数から `matplotlib.pyplot`を使用して、各数値の周波数のヒストグラムを生成します。「ビン」パラメーターは、ヒストグラムビンの範囲を指定します。これは、3つのロールすべてが1の場合に発生する2つの最高のロールの可能な限り低い合計）から40（2つの2つの最高の合計の2つの最高のロールの最低合計）に設定されています。最高のロール）。「XTicks」パラメーターは、2〜40の範囲に設定されているX軸ティックの範囲を指定します。「XLabel」および「Ylabel」関数は、それぞれX軸とY軸のラベルを設定するために使用されます。。

指定された数のロールでスクリプトを実行するには、このようなロールの総数を定義する引数でコマンドラインからスクリプトを呼び出すことができます。

    Python Script.py 200

これにより、200ロールでスクリプトが実行されます。引数が提供されていない場合、デフォルトの合計ロールは100になります。