测试一个单词是否是一个字谜并输出一个布尔值

To test if a word is an anagram and output a boolean

我是一个完全的编程初学者,我正在尝试编写代码来检查一个单词是否是一个输出必须是布尔值的变位词。 当我 运行 代码时,变位词列表将包括列表中第一个最初输入的单词,即如果它是变位词,或者如果不是则仅包含输入的词。然后它 return 是最后一个 return 值,即使它应该是 False。

def find_anagrams(words):

    from iterools import permutations
    import enchant
    d = enchant.Dict("en_GB")
    
    any_word = ("Enter a word /n")
    inp = any_word
    lettr = (x.lower() for x in inp)
    
    for y in  list(permutations(lettr)):
        z = "" join(y)
        if d.check(z):
            print(z)
            if z == inp: 
               return False
            else:
               return True 

print(find_anagrams("word"))   

以下是检查附魔词典中一个词是否为另一个词的变位词的方法:

from itertools import permutations
import enchant
d = enchant.Dict("en_GB")

any_word = input("Enter a word \n")
inp = any_word
lettr = [x.lower() for x in inp]
for y in permutations(lettr):
    z = "".join(y)
    if d.check(z) and z != inp:
        print(True)
        break
else:
    print(False)

测试运行 #1:

Enter a word 
bat

输出:

True

测试运行 #2:

Enter a word 
good

输出:

False

首先,您的代码有错别字:

z = "" join(y)
any_word = ("Enter a word /n")

可能应该是:

z = "".join(y)
any_word = ("Enter a word\n")

它的逻辑不正确,正如@AnnZen 和@furas 指出的那样 (+1)。如果您希望您的函数成为 returns TrueFalse 的谓词,我将以这种方式构建您的代码:

from itertools import permutations
import enchant

def is_anagram(letters):
    for permutation in permutations(letters.lower()):
        word = "".join(permutation)

        if word == letters:
            continue

        if dictionary.check(word):
            return True

    return False

dictionary = enchant.Dict("en_GB")

any_word = input("Enter a word\n")

print(is_anagram(any_word))

以下是如何使用 enchant 获取特定单词的字谜列表。

import enchant
from itertools import permutations

ED = enchant.Dict("en_GB")

def get_anagrams(word):
    wset = {word}
    for wtc in map(''.join, permutations(word)):
        if not wtc in wset and ED.check(wtc):
            wset.add(wtc)
    wset.remove(word)
    return list(wset)

print(get_anagrams('steam'))

输出:

['tames', 'mates', 'meats', 'teams']