【问题标题】:Python Question Relating to Finding Anagram from Dictionary与从字典中查找字谜有关的 Python 问题
【发布时间】:2021-12-06 00:08:22
【问题描述】:

我正在为我正在进行的这个项目而苦苦挣扎。

编辑:我希望程序从字典中找到 2 个单词,它们是输入单词的字谜。我想处理这个程序的方法是使用 counter(input()) 然后遍历字典内容两次(找到第一个单词 anagram 然后下一个)。该循环将从字典中获取每个单词 counter(那个单词),看看它是否是

简单地说,如果我输入一个单词(或短语),我希望程序运行一个字典文本文件(我已经保存)并从字典中找到两个单词,这些单词变成我的字谜输入。例如,如果我输入“宿舍”,程序输出应该是“肮脏的房间”,如果输入“绅士”,则输出“优雅的男人”。这是我到目前为止所做的:

from pathlib import Path
from collections import Counter

my_dictionary = open(Path.home() / 'dictionary.txt')
my_words = my_dictionary.read().strip().split('\n')
my_dictionary.close()

letter_number = 0
my_word = []

print('Please type in your phrase:')
word = input()
word = word.replace(" ","")
word_map = Counter(word.lower())

for a_word in my_words:
    test = ''
    candidate = ''
    test_word = Counter(a_word.lower())
    for letter in test_word:
        if test_word[letter] <= word_map[letter]:
            test += letter
    if Counter(test) == test_word:
        candidate += a_word.lower()
        for a_word in my_words:
            test = ''
            test_word = Counter(a_word.lower())
            for letter in test_word:
                if test_word[letter] <= word_map[letter]:
                    test += letter
            if Counter(test) == test_word:
                candidate += a_word.lower()
            if Counter(candidate) == word_map:
                my_word.append(candidate)

print(my_word)

由于某种原因,我没有从输出中得到任何信息。

  1. 输入后我无法得到任何结果。
  2. 我也尝试过使用 del。从字典中删除第一个单词的单词计数器的命令,然后继续从字典中查找第二个单词,但这也不起作用。

总而言之,代码中一定有一些错误的地方导致程序没有给出任何输出。

请帮我弄清楚我的错误和错误。

提前致谢。

【问题讨论】:

  • 您应该提及您遇到的具体问题
  • 编辑您的问题以粘贴错误回溯
  • 好的 会的。抱歉,我现在到此为止,所以仍在尝试找出选项:(
  • 首先尝试用通俗易懂的英语单词解释您对问题的预期算法方法。
  • @KarlKnechtel 做到了。如果我需要更多说明,请告诉我。给您带来的不便深表歉意:(

标签: python python-3.x python-requests dictionary-comprehension anagram


【解决方案1】:

代码可以优化如下:

# script.py
from pathlib import Path
from collections import Counter

filename = 'dictionary.txt'
my_words = Path.home().joinpath(filename).read_text().strip().splitlines()

word = input('Please type in your phrase:\n').replace(" ","")
word_counter = Counter(word.lower())

def parse(my_words=my_words):
    matches = []
    for a_word in my_words:       
        a_word_counter = Counter(a_word.lower())
        if all(c <= word_counter[w] for c in a_word_counter.values()):
             matches.append(a_word)
    return matches

def exactly_parse(my_words=my_words):
    return [w for w in my_words if Counter(w) == word_counter]
    
my_word = parse()
print(my_word)

假设dictionary.txt的内容:

$ cat dictionary.txt
how
are
you
fine
thanks
  • 输入字为how
  • 预期的输出是什么?如何
$ python script.py
Please type in your phrase:
how
['how']

$ python script.py
Please type in your phrase:
thanksyou
['you', 'thanks']

【讨论】:

  • 感谢您简化代码。详细地说,从单词输入中,我会找到输入的计数器(word_map)。然后我会从字典中取出每个单词并查看它的计数器,比较它是否是 word-Map 的一部分。然后,我会从字典中找到另一个单词,做同样的事情,并希望这两个单词的计数器等于输入的计数器。这样,我会得到 2 个单词的字谜。如果我把宿舍这个词放进去,我希望循环的第一部分找到脏然后找到房间,因为两个词的计数器等于输入的计数器。 (为输入找到 2 个单词字谜)
  • 你最好显示'dictionary.txt'的内容,并给出输入和预期输出的例子。
  • 嘿伙计,我在问题中这样做了。在这里再次列出,示例是,输入:宿舍然后输出:脏+房间或输入:绅士和输出:优雅+男人。另外,对于字典。 txt,它只是文本文件中的字典。 txt 文件中所有单词的列表。
  • 如果你假设dict.txt的内容就是那个,如果你输入how你应该得到how,因为没有其他单词包含“h”“o”“w”对吗?此外,如果您输入“thanksyou”,那么您应该得到“thanks”和“you”,因为它们包含在字典和单词“thanksyou”的字谜中。
  • 嘿伙计,感谢您的工作。我确实看到它比我的简洁。但是,我想知道您是否可以帮助我完成这一部分(也是最后一部分):有没有办法让这个程序找到准确的字谜。具体来说,如果输入是Thanksyou,它有1 T,1 H,1A,1N,...和1U。输出应该是包含完全相同的字母组件的一个或多个单词(使它们成为精确的字谜)
猜你喜欢
  • 2016-03-17
  • 2011-02-07
  • 1970-01-01
  • 2016-03-18
  • 2017-04-05
  • 2014-04-13
  • 2011-08-30
  • 1970-01-01
  • 2016-05-10
相关资源
最近更新 更多