2017-04-06 6 views
1

run_sim関数nsim回(パラメータN、D、p)を実行し、長さnmaxのnumpy配列を返す関数collect_sims(nsim、N、D、p = 0.5、nmax = 10000)シミュレーションが指定された回数だけ停止する回数を指定します。たとえば、nsimが8で、run_simの連続実行が3,4,4,3,6,5,4,4を与えたとします。あなたはPythonダイスの結果数

def collect_sims(nsim, N, D, p=0.5, nmax=10000): 
    run_sim(N=20, D=6, p=0.5, itmax=5000) 
    onecount = 0 
    twocount = 0 
    threecount = 0 
    fourcount = 0 
    fivecount = 0 
    sixcount = 0 
    for k in range (n): 
     if D == 1: 
      onecount += 1 
     if D == 2: 
      twocount += 1 
     if D == 3: 
      threecount += 1 
     if D == 4: 
      fourcount += 1 
     if D == 5: 
      fivecount += 1 
     if D == 6: 
      sixcount += 1 

return(k) 

print(onecount, "1",twocount,"2",threecount,"3",fourcount,"4",fivecount,"5",sixcount,"6") 

は、それは私の6つの変数は、私がどのように定義することができ、定義されていないなど、twocount、onecount言う「... 2つの3S、4つの4S、1 5、1 6、ゼロ7S、ゼロ8S」としてこれを集計しますそれら?また、私のコードを修正するために何ができるでしょうか?

答えて

0

インデントループのためのあなたの:あなたが投稿コードで、それが元のインデントレベル(ためのfor文なし)であります。これはあなたの機能を終了し、ループはメインプログラムにあります。あなたの変数はまだ定義されていません(関数内の変数と同じではないため)戻り値は不正です。

これはおそらく試してみますか?

def collect_sims(nsim, N, D, p=0.5, nmax=10000): 
    run_sim(N=20, D=6, p=0.5, itmax=5000) 
    onecount = 0 
    twocount = 0 
    threecount = 0 
    fourcount = 0 
    fivecount = 0 
    sixcount = 0 
    for k in range (n): 
     if D == 1: 
      onecount += 1 
     if D == 2: 
      twocount += 1 
     if D == 3: 
      threecount += 1 
     if D == 4: 
      fourcount += 1 
     if D == 5: 
      fivecount += 1 
     if D == 6: 
      sixcount += 1 

    print(onecount, "1",twocount,"2",threecount,"3",fourcount,"4",fivecount,"5",sixcount,"6") 

collect_sims() 

十分なコードを提供していないため、テストできません。また、のprintステートメントをデバッグトレースとしてそのまま残しておきます。あなたは配列を返さなければなりません、あなたはそれをまだやろうとしていません。元のコードはkです。これはn + 1でなければなりません。これは呼び出し元のプログラムにとっては役に立ちません。


FURTHER HELP

はカウントのための6つの要素ではなく、6つの別々の変数のリストを使用することを学びます。さらに、すべてのダイスロールをリストに入れて、カウント機能を使用して、それぞれの数を決定します。

1

なぜあなたはkを返すのかわかりません。

とにかく、問題は、oncount、twocount、...などは印刷するスコープが異なることです。たぶん、この他のソリューションはあなたを助けることができる

def collect_sims(nsim, N, D, p=0.5, nmax=10000): 
    run_sim(N=20, D=6, p=0.5, itmax=5000) 
    onecount = 0 
    twocount = 0 
    threecount = 0 
    fourcount = 0 
    fivecount = 0 
    sixcount = 0 
for k in range (n): 
    if D == 1: 
     onecount += 1 
    if D == 2: 
     twocount += 1 
    if D == 3: 
     threecount += 1 
    if D == 4: 
     fourcount += 1 
    if D == 5: 
     fivecount += 1 
    if D == 6: 
     sixcount += 1 

return(onecount, twocount, threecount, fourcount,fivecount,sixcount) 

onecount, twocount, threecount, fourcount,fivecount,sixcount = collect_sims (...) 

print(onecount, "1",twocount,"2",threecount,"3",fourcount,"4",fivecount,"5",sixcount,"6") 

別のソリューション

:そのようないくつかのあなたは、関数内でプリントを()に置くこともできますし、カウント

でタプルを返すことができます。

https://stackoverflow.com/a/9744274/6237334

関連する問題