2012-04-03 4 views
-6
f=open('new.txt') 
var=f.read() 
var=var.lower() 
var = var.replace(';','') 
var = var.replace(',','') 
var = var.replace('.','') 
x=var.split() 
dict={} 
dictList=[] 
dict2={} 
for i in xrange(0,len(x)-1): 

    if dict.items(): 
     for k in dict.items(): 
      if x[i] not in k: 

       dict[x[i]]=dict2 
       dict2[x[i+1]]=1 

      else: 
       if dict[x[i]].keys(): 
        if x[i+1] in dict[x[i]].keys(): 
         dict[x[i]][x[i+1]]+=1 
        else: 
         dict[x[i]][x[i+1]]=1 
       else: 
        dict[x[i]][x[i+1]]=1 

    else: 

     dict[x[i]]=dict2 
     dict2[x[i+1]]=1 

print dict 

이 코드는 각 단어의 bigram 개수를 인쇄해야합니다. 나는 dict2를 부적절하게 인스턴스화했다고 확신한다. 나는 이것이 순진 오류라고 확신하지만 어떻게 든 그것을 놓치고 있습니다. 어떤 제안? :)이 코드가 잘못된 곳은

+3

어떤 오류가 발생합니까? – PearsonArtPhoto

+3

"어떤 제안이 있습니까?" 문제를 보여주는 최소한의 예를 적어 라. –

+0

"각 단어의 bigram 카운트를 인쇄하시오"는 의미는 무엇입니까? new.txt 예제와 출력 결과를 제공 할 수 있습니까? –

답변

2

이 코드를 리팩토링해야한다면, 내가보고 싶은데 :

  • 변수 이름. dict과 같은 이름은 코더/관리자에게 아무 것도 말하지 않습니다. dictdict2의 차이점은 무엇입니까? 오늘 알지도 모르지만 ... 내일이 아닐 수도 있습니다.
  • 은/if/for/if/if가 인 경우 중첩됩니다. 모든 경로를 따라 가면서 가능한 오류가 없는지 확인하는 것은 매우 어렵습니다. 별도의 기능으로 나누어서 디버깅하고 독립적으로 테스트 할 수 있습니다.
  • 데이터 구조. 그들은 종종 프로그램의 핵심입니다. 그러나 여기, 그들은 무엇입니까? 그것은 분명하지 않습니다. 즉, 코드가 어떤 작업을 수행하는지 명확하지 않습니다.
  • 오류 처리. 가능한/예상되는 오류는 무엇입니까? 어느 것이 처리되거나 무시 될 것입니까?
+2

'dict'도 내장 사전 클래스와 충돌 (그리고 덮어 쓰기)하기 때문에 사용하지 마십시오. – rplnt

+0

좋은 지적. 'list','int'와 동일합니다 ... –

+0

나는 xrange (...)에 for를 추가 할 것입니다. : 물건 컬렉션을 처리하는 파이썬적인 방법이 아닙니다. 대신 컬렉션을 직접 반복하거나 처리중인 항목의 시퀀스 번호를 확실히 알아야하는 경우에는'enumerate()'를 사용하십시오. –