Python拼字挑战查找有效单词

Python拼字挑战查找有效单词,python,python-3.x,Python,Python 3.x,我正在尝试完成一个python项目,它基本上接受一个输入,遍历一个有效拼字列表,并确定在给定输入的情况下可以生成哪些单词 第一部分有点简单,但真正重要的是给我一些问题 以下是我目前掌握的情况: import argparse import sys """ Step 1: Get input from the user """ parser = argparse.ArgumentParser() parser.add_argument("rack", type=str, help = "l

我正在尝试完成一个python项目,它基本上接受一个输入,遍历一个有效拼字列表,并确定在给定输入的情况下可以生成哪些单词

第一部分有点简单,但真正重要的是给我一些问题

以下是我目前掌握的情况:

import argparse
import sys

"""

Step 1: Get input from the user

"""

parser = argparse.ArgumentParser()
parser.add_argument("rack", type=str, help = "letters on the rack (no spaces)")
args = parser.parse_args()

rack = args.rack
rack = rack.upper()
rack = sorted(rack)

"""

Step 2: Open the sowpods.txt file, read the contents and turn it into a list

"""

def file_len(fname):
    with open(fname) as f:
        for i, l in enumerate(f):
            pass
    return i + 1

scores = {"a": 1, "c": 3, "b": 3, "e": 1, "d": 2, "g": 2,
         "f": 4, "i": 1, "h": 4, "k": 5, "j": 8, "m": 3,
         "l": 1, "o": 1, "n": 1, "q": 10, "p": 3, "s": 1,
         "r": 1, "u": 1, "t": 1, "w": 4, "v": 4, "y": 4,
         "x": 8, "z": 10}

file = "sowpods.txt"
length = file_len(file)

file = open("sowpods.txt", 'r')
file_list = list(file)

for i in range(length):
    value = file_list[i]
    value = value.rstrip('\n')
    file_list[i] = value

"""

Step 3: Find valid words

"""

#for x in range(len(file_list)):
for x in range(82980,83000):
    tmp = rack
    test = file_list[x]
    pos = []

    if len(test) > len(tmp):
        break
    else:
        for y in range(len(test)):
            letter = test[y]
            if letter in tmp[y:(len(tmp))]:
                pos.append(letter)
        print(pos)
我确信这是非常混乱的,因为我已经有一段时间没有编程了,但我只想找出程序检查有效性的部分。现在,循环通过一个范围,我知道有一些单词可以从机架上制作出来,但我被卡住了。我看了一些帮助的帖子,但说实话,我不确定到底发生了什么


在这里我可能有点不知所措,但我仍然想弄清楚这一点。

检查单词是否有效的最简单方法是使用
集合计数器。您获取机架中每个字母的出现次数,然后获取每个拼字的每个字母出现次数的差值。如果从架子上取下字母后拼字就什么都没有了,那么你就可以制作拼字了

示例代码(使用提供的词典而不是系统词典):

将为您提供:

MEDUSA
AMUSED
SAUTED

检查单词是否有效的最简单方法是使用
collections.Counter
。您获取机架中每个字母的出现次数,然后获取每个拼字的每个字母出现次数的差值。如果从架子上取下字母后拼字就什么都没有了,那么你就可以制作拼字了

示例代码(使用提供的词典而不是系统词典):

将为您提供:

MEDUSA
AMUSED
SAUTED

为什么>=6而不仅仅是>6?拼字字的长度可以与单词的长度相同rack@David谢谢你纠正打字错误。我选择了6个或更多的字母只是为了获得一些但有限的输出,例如复制粘贴/此处。你能解释一下“and not(字母计数-机架)”部分吗。只是想更好地理解代码。谢谢你发布这篇文章。为什么>=6而不仅仅是>6?拼字字的长度可以与单词的长度相同rack@David谢谢你纠正打字错误。我选择了6个或更多的字母只是为了获得一些但有限的输出,例如复制粘贴/此处。你能解释一下“and not(字母计数-机架)”部分吗。只是想更好地理解代码。感谢您的发帖。数据结构通常用于以紧凑的方式表示词典。数据结构通常用于以紧凑的方式表示词典。