请帮助我调试这个python代码
这是一个为大于15个字母的单词查找字谜的程序。没有语法错误,但输出不符合预期。如果您能指出程序中的逻辑错误,我将不胜感激。 我从网上下载了单词表 PS-我是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)
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)
单词大于15个字母
,但在代码中您有len(word1)>18个
,而且,如果一个单词多次具有相同的字符,您使用的方法(find
)将无法处理。例如abash
将匹配bahts
谢谢您提出的改进建议。条件len(word2)==len(word1)不能解决问题吗?如果两个单词有相同的字母,但数量不同,那么它们的长度将不同,因此它甚至不会进入循环,对吗?aab&abb:长度是一个必要的,但不是充分的条件,用于变位符(变位符?)