2012-12-07 4 views
0

나는 anagrams을 찾는 파이썬으로 프로그램을 만들려고하고있다. 내가 문제 아나그램을 출력하는 데파이썬 3.3, anagrams 찾는 중?

def anagram(word,checkword): 
    for letter in word: 
     if letter in checkword: 
      checkword = checkword.replace(letter, '') 
     else: 
      return False 
    return True 

while True: 
    f = open('listofwords.txt', 'r') 
    try: 
     inputted_word = input('Word? ') 
     for word in f: 
      word = word.strip() 
      if len(word)==len(inputted_word): 
       if word == inputted_word: 
        continue 
       elif anagram(word, inputted_word): 
        print(word) 
         #try: 
          #if word == 1: 
          #print ('The only anagram for', user_input, 'is', word) 
         #elif word > 1: 
          #print ('The anagrams for', user_input, 'are', word) 
         #except TypeError: 
          #pass 
    except: 
     break 

: 여기에 내 현재 코드입니다. anagrams은 한 줄에 있어야하며, 단어는 발견 된 anagrams의 양을 반영해야합니다. 이러한

... 등 "이 하나 (입력 삽입 단어)에 대한 (삽입 철자 바꾸기)"

""(입력 삽입 단어)에 대한 (삽입 아나그램)가있다 "

가 (입력 삽입 단어) "

는"(입력 삽입 단어)에 대한 아나그램은 사전 ") 여기

+1

우리는 당신을 위해 숙제를하러 온 것이 아닙니다. 너 뭐 해봤 니? – Colleen

+0

좋아, 나는 질문을 편집했다. 코드의 주석은 제가 시도한 것입니다. – Ace

+1

anagram() 함수는 다른 단어의 일부 단어 (예 : '대처'에 대해 '고양이'를 확인했다면 여전히 사실이 될 것입니다. . . 두 단어를 목록으로 바꾸고 정렬 된 목록을 비교하는 것이 좋습니다. – ernie

답변

2

몇 가지 힌트가 있습니다에서가 없습니까 :

첫 번째로, anagrams를 인쇄하기 전에 인쇄해야하는 경우, 반복하는 동안 anagrams의 목록을 유지해야합니다. 이런 식으로 뭔가 :

anagrams = [] 
for word in f: 
    word = word.strip() 
    if len(word)==len(inputted_word): 
     if word == inputted_word: 
      continue 
     elif anagram(word, inputted_word): 
      anagrams.append(word) 

지금 방금 anagrams 목록에 무엇을 기반으로, 마지막에 적절한 텍스트를 인쇄하는 방법을 파악해야한다. 당신이 뭘하려에 관해서는

는 :

#try: 
    #if word == 1: 
    #print ('The only anagram for', user_input, 'is', word) 
#elif word > 1: 
    #print ('The anagrams for', user_input, 'are', word) 
#except TypeError: 
    #pass 

이 가능성이 작동하지 않을 수 있습니다. 첫째, word은 단어이므로 1 또는 1보다 클 수는 없습니다. 또한 사전에있는 처음 20 단어 만 살펴보고 첫 번째 아나그램을 발견 한 경우 이것이 어떻게 유일한 아나그램인지 어떻게 알 수 있습니까? 사전의 나머지 부분에는 1000 개가있을 수 있습니다. 사전 전체를 마칠 때까지 인쇄 할 문장을 결정할 수 없습니다.

한편 '한 가지만 있음'과 '사전에 없음'이 서로 다른 경우가 있습니다. 그래서, 당신은 그 안에 if 문을 설정하는 "사전에 입력 된 단어를 찾았습니다"라는 플래그를 필요로합니다. 아니면 특수 사례를 남겨 둘 수 있습니다. 예를 들어, 결과가 0 일 경우 사전에없는 것으로 알고 있습니다. 그것은 당신이 마지막에 더 많은 로직을 원하는지 또는 루프 내부에 원하는지에 달려 있습니다.