2012-11-06 6 views
2

나는 'possible'이라는 키와 'a'- 'z'라는 목록으로 가득 찬 사전을 가지고 있습니다. 각 키는 목록에 'a'에서 'z'까지의 값을가집니다. 본질적으로, 26 개의 알파벳.사전에있는 목록에있는 문자열을 반복합니다. PYTHON

문자열을 소문자로 지우고 구두점을 제거하고 각 단어를 "cleanedWords"라는 목록에 저장합니다.

목록에있는 단어가 두 글자 밖에없는 경우 두 글자 단어의 두 글자의 키에서 'c'값을 제거하십시오. 그런 다음 다음 2 글자 단어로 이동하고 반복하십시오.

Traceback (most recent call last): 
    File "F:\python\crypto\cipher.py", line 83, in <module> 
    possible[i].remove('c') 
ValueError: list.remove(x): x not in list 

은 분명히 내가 뭔가 잘못하고있는 중이 야 : 여기
for y in cleanedWords: 
    if len(y) == 2: 
     for i in y: 
      possible[i].remove('c') 

오류입니다 :

은 오류가있는 조각이다. 누군가 올바른 방향으로 나를 가리킬 수 있습니까? 내가 어떻게했는지 "y"라고 부를 수는 없습니까?

타일러

+1

'.remove()'앞에 루프 안에'print repr (possible [i])'가있다. 'possible [i]'에''c ''가 있는지 확인하십시오. – Tim

+2

당신은'possible [i] .remove ('c')'를 여러 번 호출 할 수 있습니다. 아마도'cleanedWords'에 포함 된 값에 따라 'i'의 중복 값을 가질 수 있습니다. Tim이 말했듯이,'possible [i]'가'c'를 포함하고 있는지 확인한 후에 그것을 제거해야합니다. – del

+0

고마워, 이제 알 겠어. repr는 그것을 분명히했다. –

답변

1

좋아, 내가 익숙하지 오전 데이터 구조 (당신이 상세한 답변을 원하는 경우 공유)를, 그러나 당신이 당신의 코드를 교체 할 필요가 저를 찾습니다

for word in (x for x in cleanedWords if len(x) == 2): 
    for ch in word: 
     if 'c' in possible[i]: 
      possible[ch].remove('c') 
+0

'possible [i]'는 목록입니다. 추적 목록에 의해 확인되었습니다. – Tim

+0

@ 팀 감사합니다, 내 대답을 수정했습니다 –

0
for y in cleanedWords: 
    if len(y) == 2: 
     print y 
     for i in y: 
      try: 
       possible[i].remove('c') 
      except ValueError: 
       pass 
+0

팁 주셔서 감사합니다 –

관련 문제