2017-02-10 4 views
0

코드의 출력 값은 cnt [ 'yellow'] = 0이지만 코드에 주어진 수식을 적용한 후 예상 값은 (0 +1)/(6 + (1 * 3))이어야합니다. ,예상치 못한 파이썬 카운터 값

from collections import Counter 
cnt = Counter() 
sm = 1 
for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']: 
    cnt[word] += 1 

s = sum(cnt.values()) 
print(s) 

c = len(cnt) 
print(c) 

for k,v in cnt.items(): 
    cnt[k] = (cnt[k] + sm)/(s + (sm *c)) 

print(cnt['yellow']) 
+0

이 있습니까 너 확실해. 파이썬 3.5? – user2357112

+1

사실, '노란색'은 입력에 전혀 없습니다. 기본 카운트를받습니다. 여기서'cnt [ ']'(cnt [k] + sm)/(s + (sm * c))'계산을'cnt [ 'yellow']'에 적용하는 것은 아무것도 없다. – user2357112

+0

이 기본 0을이 계산으로 양의 값으로 변경하고 싶습니다. 할 수있는 것이 있습니다. –

답변

1

내가 프로그램을 모르는, 당신이 우아한 방법이 될 것이다 클래스 및 방법, 를 사용할 수있는 입력 된 값에 함수를 적용하려면,하지만 당신은 더 나은 가독성을 위해 클래스의 이름을 바꿀 수 있습니다 (py2에서 테스트되었지만 py3에서 작동해야합니다.) :

결과 :

0.111111111111 

그리고 : 호출하여

def getCount(counter, key): 
    sm = 1 
    s = sum(cnt.values()) 
    c = len(cnt) 
    return (counter[key] + sm)/(s + (sm * c)) 

그리고 그것을 사용 :

In [13]: print(cntc('red')) 
0.333333333333 

In [14]: print(cntc('blue')) 
0.444444444444 
+0

원하는 결과를 얻기 위해 객체 지향 프로그래밍을 사용하는 이유를 설명해주십시오. –

+0

입력 (함수)에 대한 함수를 실행하는 방법이 필요하고 카운터 객체가 다른 값 (목록)을 저장해야합니다 ../카운터를 독립적으로 저장할 수 있지만 추한/더 우아한 형태는 다른 큰 객체 안에 봉투를 넣는 것입니다.이 중 하나는 요청 된 수식을 인쇄하는 것이고, 나는 강조하기 위해 대답을 업데이트 할 것입니다. –

0

당신은 같은 사용자 정의 메소드를 추가 할 수

print getCount(cnt, "yellow")