2014-11-08 3 views
0

내 코드 : 나는 그것이 진짜 단어인지 아닌지 확인 영어 단어의 텍스트 파일을 통해 각 순열을 단어의 모든 순열을 발견하고 실행하여 단어를 해독하려고왜 내 목록을 이해하면 단어의 순열과 일치하는 단어가 아닌 전체 텍스트 문서가 코드로 반환됩니까?

from itertools import permutations 

original = str(input('What word would you like to unscramble?: ')) 

inputFile = open('dic.txt', 'r') 
compare = inputFile.read().split('\n') 
inputFile.close() 



for now in permutations(original): 
    car = [print(now) for now in compare if now in compare] #supposed to compare iterations of input word to text file. 

. 내 이전 버전은 모든 순열을 목록에 저장했습니다 (이제는 잘못된 생각입니다). 이 코드는 여기 내 텍스트 파일 전체를 인쇄하기 때문에 그 이유가 확실하지 않습니다. 나는 입력 단어의 순열을 반복하는 것보다는 단어의 전체 텍스트 파일을 인쇄하는 목록 이해력으로 내가 뭘 잘못하고 있는지 알고 싶다.

+0

왜 둘 다 '비교'*와 * 비교를 통해 '비교'를 반복합니까? 정의에 따르면 모든 단어가 일치합니다. –

+0

여기에있는 목록 이해에서 루프 변수와 루프 변수 모두에 대해 'now'를 사용할 수 없습니다. –

답변

1

당신은 당신이 더 많은 파이썬 관용적 여러 가지 방법을 코딩 할 수 있습니다 :

from itertools import permutations 

original = str(input('What word would you like to unscramble?: ')) 

with open('dic.txt') as input_file: 
    compare = input_file.readlines() 

for permutation in permutations(original): 
    if permuation in compare: 
     print(permutation) 

이 당신이 찾고있는 무엇을 할 수 있습니까?

+0

그럴 듯 보이지만, 그것을 실행할 때 목록에있는 단어를 입력해도 여전히 아무것도 반환하지 않습니다. 또한 with 및 with를 사용하여 inputFile = open ('dic.txt')과 다른 작업을 수행합니까? – TimeWillTell

+0

비교를 확인하기 전에'' '.join (permutation)'을해야합니다. 단어가 아닌 문자 목록이 될 것입니다. –

+1

@SteveBarnes는 그의 의견에 맞습니다. 순열에 먼저 참여해야합니다. 'with'를 사용하면 파일을 닫을 때 신경 쓰지 않아도됩니다. (심지어 오류 등의 경우에도) 꽤 멋졌습니다. –