코딩 경험이 부족합니다. 아래에 작성한 코드는 매우 불편하고보기에는보기 흉한 코드입니다.보다 효율적으로 컴퓨팅 확률
내 질문은 : 어떻게하면 더 효율적으로 할 수 있습니까? 내가 선택한 방식은 다소 비효율적입니다. 코드의 def freq_2dice(n, N):
섹션과 print
문에주의하십시오. 그것들은 내가 더 좋은 코드뿐만 아니라 더 많은 효율성을 필요로하는 분야입니다.
감사합니다.
EDIT :이 할당은 2 개의 주사위를 던질 때 각각의 가능한 합계를 얻는 각각의 가능성을 기록하고 저장하는 함수를 만드는 것입니다. n
번.
나머지 코드는이 확률을 정확한 확률과 비교합니다.
EDIT2 : 그것은, n
수 2
주사위를 던지는 즉 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
나는 그 일을 시도했다. 그러나이를'dict'으로 만들었지 만, 그 함수에서'n'과'N'을 구현하는 방법을 몰랐습니다. 'xrange (n)'과'xrange (N)'에서처럼 나는 그것을 쓰는 방법을 모른다. – FrenziedMango