私はいくつかのコーディング経験がないと苦労しています。私が下に書いたコードは、見るのが非常に不便で醜いです。より効率的に計算する確率
私はあなたに質問します: これをより効率的に行うにはどうすればいいですか?私がそれをする方法は、むしろ非効率的です。コードのdef freq_2dice(n, N):
セクションとprint
ステートメントに注意してください。それらは私がより効率的であるだけでなく、より良い見た目のコードを必要とする分野です。
ありがとうございます!
EDIT:この割り当ては、2つのダイスを投げるときに可能な合計のそれぞれを得る確率を記録して格納する関数を作成することです。n
回。
残りのコードは、これらの確率を正確な確率と比較しています。
EDIT2:それは2
サイコロを投げるのn
、すなわち100000
実行する必要がありますようなコードでエラーが発生しました
from random import randint
import sys
def freq_2dice(n, N):
M, A, E, R, T, Y, U, I, O, P, D = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
for reps in xrange(N):
s = 0
for dice in xrange(n):
outcome = randint(1, 6)
s += outcome
if s==2:
M += 1
if s==3:
A += 1
if s==4:
E += 1
if s==5:
R += 1
if s==6:
T += 1
if s==7:
Y += 1
if s==8:
U += 1
if s==9:
I += 1
if s==10:
O += 1
if s==11:
P += 1
if s==12:
D += 1
return N*(float(M)/N), N*(float(A)/N), N*(float(E)/N), N*(float(R)/N), N*(float(T)/N), N*(float(Y)/N), N*(float(U)/N), N*(float(I)/N), N*(float(O)/N), N*(float(P)/N), N*(float(D)/N)
def chance_die():
frequencies = {}
for s in range(2, 13):
frequency = 0
for die1 in range(1, 7):
for die2 in range(1, 7):
if die1 + die2 == s:
frequency += 1
frequencies[s] = frequency
return frequencies
n = int(sys.argv[1])
N = int(sys.argv[2])
print 'No. of twos: %d, probability: %.2f, expected: %.2f' % (freq_2dice(n, N)[0], freq_2dice(n, N)[0]/(N/100), chance_die()[2]/.36)
print 'No. of twos: %d, probability: %.2f, expected: %.2f' % (freq_2dice(n, N)[1], freq_2dice(n, N)[0]/(N/100), chance_die()[3]/.36)
print 'No. of twos: %d, probability: %.2f, expected: %.2f' % (freq_2dice(n, N)[2], freq_2dice(n, N)[0]/(N/100), chance_die()[4]/.36)
print 'No. of twos: %d, probability: %.2f, expected: %.2f' % (freq_2dice(n, N)[3], freq_2dice(n, N)[0]/(N/100), chance_die()[5]/.36)
print 'No. of twos: %d, probability: %.2f, expected: %.2f' % (freq_2dice(n, N)[4], freq_2dice(n, N)[0]/(N/100), chance_die()[6]/.36)
print 'No. of twos: %d, probability: %.2f, expected: %.2f' % (freq_2dice(n, N)[5], freq_2dice(n, N)[0]/(N/100), chance_die()[7]/.36)
print 'No. of twos: %d, probability: %.2f, expected: %.2f' % (freq_2dice(n, N)[6], freq_2dice(n, N)[0]/(N/100), chance_die()[8]/.36)
print 'No. of twos: %d, probability: %.2f, expected: %.2f' % (freq_2dice(n, N)[7], freq_2dice(n, N)[0]/(N/100), chance_die()[9]/.36)
print 'No. of twos: %d, probability: %.2f, expected: %.2f' % (freq_2dice(n, N)[8], freq_2dice(n, N)[0]/(N/100), chance_die()[10]/.36)
print 'No. of twos: %d, probability: %.2f, expected: %.2f' % (freq_2dice(n, N)[9], freq_2dice(n, N)[0]/(N/100), chance_die()[11]/.36)
print 'No. of twos: %d, probability: %.2f, expected: %.2f' % (freq_2dice(n, N)[10], freq_2dice(n, N)[0]/(N/100), chance_die()[12]/.36)
'''
MacBook-Air:python Leroy$ python freq_2dice.py 2 100000
No. of twos: 2680, probability: 2.80, expected: 2.78
No. of threes: 5612, probability: 5.51, expected: 5.56
No. of fours: 8169, probability: 8.43, expected: 8.33
No. of fives: 11099, probability: 10.96, expected: 11.11
No. of sixes: 13827, probability: 13.91, expected: 13.89
No. of sevens: 16610, probability: 16.51, expected: 16.67
No. of eights: 13808, probability: 13.72, expected: 13.89
No. of nines: 10947, probability: 11.22, expected: 11.11
No. of tens: 8249, probability: 8.35, expected: 8.33
No. of elevens: 5540, probability: 5.59, expected: 5.56
No. of twelves: 2805, probability: 2.74, expected: 2.78
'''
変数M、A、... P、Dを使用する代わりに、リスト(配列)が必要になるかもしれません。 – LarsH
まあ、if文のすべてを 'dict'に置き換えることができます。 's_values_dict = {2: 'M'、3: 'A'、4: 'E'、5: 'R'、...}'それでは、 if's。 – blacksite
私はそれをやってみました。しかし、その関数に 'n'と' N'をどのように実装するのか分かりませんでした。 'xrange(n)'と 'xrange(N)'のように、私は単にそれを書く方法を知らなかっただけです。 – FrenziedMango