请帮助我调试这个python代码

请帮助我调试这个python代码,python,Python,这是一个为大于15个字母的单词查找字谜的程序。没有语法错误,但输出不符合预期。如果您能指出程序中的逻辑错误,我将不胜感激。 我从网上下载了单词表 PS-我是Python新手。如果有更好的方法,请告诉我 def anagrams(): fin1=open('words.txt') val=-1 fin2=open('dic.txt') for i in range(100000): fin2.seek(0)

这是一个为大于15个字母的单词查找字谜的程序。没有语法错误,但输出不符合预期。如果您能指出程序中的逻辑错误,我将不胜感激。 我从网上下载了单词表 PS-我是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'

与您发布的代码无关,但您可以使用简单对象来实现这一点,它将为您维护所有字符的计数

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

我看到的一个问题是,如果两个单词有相同的字母,但数量不同,你会声称它们是字谜,而不是

一些改进:

  • 若要查看两个单词是否为字谜,请对每个单词中的字母进行排序并进行比较(它们应该相同)(或者按照其他地方的建议使用
    计数器
  • 您的代码将测试每对单词两次:(word1,word2)以及更高版本(word2,word1)

添加示例输入和预期输出您预期的输出是什么(在什么输入上),您得到的是什么?val=-1,您不再使用val?那么,为什么您在描述中定义了它,您说的
单词大于15个字母
,但在代码中您有
len(word1)>18个
,而且,如果一个单词多次具有相同的字符,您使用的方法(
find
)将无法处理。例如
abash
将匹配
bahts
谢谢您提出的改进建议。条件len(word2)==len(word1)不能解决问题吗?如果两个单词有相同的字母,但数量不同,那么它们的长度将不同,因此它甚至不会进入循环,对吗?aab&abb:长度是一个必要的,但不是充分的条件,用于变位符(变位符?)