2014-12-13 180 views
0

这是一个程序,它可以查找大于15个字母的单词。没有语法错误,但输出不像预期的那样。如果你能指出逻辑错误,我将非常感激在节目中。 我下载了单词列表从http://thinkpython.com/code/words.txt PS-我是新来Python.If有一个更好的方法请告诉我....请帮我调试这个python代码

def anagrams(): 
    fin1=open('words.txt') 
    val=-1 
    fin2=open('dic.txt') 
    for i in range(100000): 
     fin2.seek(0)    
     word1=fin1.readline() 
     if len(word1)>18:    
      for j in range(100000): 
       word2=fin2.readline() 
       flag=1 
       if len(word2)==len(word1)and word1!=word2: 

        for k in range(len(word1)-1): 
         if word1.find(word2[k])==-1: 
          flag=1 
          break 
         else: 
          flag=0 
       if flag==0: 
        print word2,'is anagram of ',word1,'\n' 
+1

添加样本输入和预期输出 – 2014-12-13 15:51:22

+1

您预期了哪些输出(关于哪些输入)以及您得到了什么? – 2014-12-13 15:51:44

+0

val = -1,你不再使用val?所以你为什么定义它 – GLHF 2014-12-13 15:52:00

回答

0

不关你已经发布的代码,但你可以做这使用简单的Counter对象,这将保持你的所有字符的计数。

>>> from collections import Counter 
>>> def is_anagram(string1, string2): 
...  return Counter(string1) == Counter(string2) 
... 
>>> is_anagram("anagram anagram", "gramana anagram") 
True 
0

一个问题,我看到的是,如果这两个词有相同的字母,但在不同的金额,你会声称他们是字谜的时候都没有。

一些改进:

  • 要查看两个词是字谜,在每个&比较(他们应该是相同的)的字母排序(或使用Counter其他地方建议)
  • 您的代码将测试每两个单词两次:(word1,word2)和后面(word2,word1)。
+0

感谢您提出改进建议。请问条件len(word2)== len(word1)不能解决问题吗?如果两个单词具有相同的字母但数量不同,那么它们的长度将会不同,因此它甚至不会进入循环,对吗? – DarkLord 2014-12-13 16:34:34

+0

aab&abb:长度对于anagram(anagrammty?)是必要的,但不是充分的条件吗? – 2014-12-13 17:39:58