在文件中查找来自用户的输入字母(切片)开始/结束的单词

时间:2013-12-11 22:44:56

标签: python word

所以我一直在努力实现一个Scrabble文字游戏,其中一部分是让我能够找到以用户输入的一个或多个字母(或拼写,因为这是拼字游戏)开头和结尾的单词。有一个words.txt文件,其中包含所有单词。

真的不知道如何使用多个字母来实现它。我更喜欢一个循环,逐行读取文件,然后检查用户输入。但其他基于功能的答案也很好!

谢谢!

P.S:这是我在这里发表的第一篇文章,所以如果我没有正确提问,我会道歉

3 个答案:

答案 0 :(得分:0)

不确定您要完成的任务,是否可以通过编辑帖子提供更多详细信息?

我试图推断你在某个单词列表中检查所播放的单词?无需检查以一个或多个字母开头的单词,只需将整个单词读入变量和..

word = readTheWord() #read the word into the variable
if word in wordlist: #for some wordlist dictionary
  #accept the input
else:
  #deny the input

这是你想要完成的吗?

答案 1 :(得分:0)

你坚持哪一部分?

Google有关如何逐行阅读文件的教程,如果你还没有那么远的话。

确保文件按字母顺序排序。如果没有太多单词,请在程序开始时将它们全部加载到内存中。使用输入字符串进行二进制搜索。如果没有完全匹配,它应该返回一个索引,其中单词适合。从那里,向前和向后扫描以查找输入字符串的所有单词starting with。这应该花费O(n log n)时间而不是线性时间。

复制单词列表,反转每个字符串,包括输入字符串,然后重复上面的内容,找到以输入字符串结尾的单词。

答案 2 :(得分:0)

您可以尝试以下解决方案。用户必须输入一些字母并且程序看起来是否可以在单词的开头或结尾找到这些字母。

with open('words.txt') as f:
    wordlist = [line.strip().lower() for line in f]

from itertools import permutations
while True:
    userinput = raw_input("Please enter your letters: ").lower()
    # look up any combinations of letters
    for letter_permutation in permutations(userinput):
        s = ''.join(letter_permutation)
        for word in wordlist:
            if word.startswith(s) or word.endswith(s):
                print "'%s' is part of %s" % (s, word)
    if raw_input('Press q to exit, any key to continue... ').lower() == 'q':
        break

对于较小的用户输入长度,您还可以创建具有所有排列的元组,但由于其大小会随着长度的阶乘而增加,我建议使用上面的解决方案。但为了显示酷的python的东西。 (感谢Jon Clements建议使用str.startswithstr.endswith使用元组)

while True:
    userinput = raw_input("Please enter your letters: ").lower()
    # create a tuple with all combinations of letters
    perms = tuple( ''.join(letter_permutation)
                   for letter_permutation in permutations(userinput) )
    # now check if any of the words starts or ends with any of the letter-perms
    for word in wordlist:
        # startswith, endswith also take tuples as arguments
        if word.startswith(perms) or word.endswith(perms):
            print "'%s' can be found in %s" % (userinput, word)

    if raw_input('Press q to exit, any key to continue... ').lower() == 'q':
        break