Python 找出字符串是否包含按特定顺序排列的字母组合

Python 找出字符串是否包含按特定顺序排列的字母组合,python,substring,Python,Substring,我正在尝试编写一个程序,以查找英语中包含您选择的3个字母的单词,按顺序排列,但不一定是连续的。例如,字母组合EJS将输出单词弹出。您提供字母,程序输出单词 但是,该程序没有按正确的顺序给出字母,并且根本无法处理双字母,如字母FSF或VVC。我希望有人能告诉我如何修复这个错误 以下是完整的代码: with open("words_alpha.txt") as words: wlist = list(words) while True: elim1 = [] elim2 =

我正在尝试编写一个程序,以查找英语中包含您选择的3个字母的单词,按顺序排列,但不一定是连续的。例如,字母组合
EJS
将输出单词
弹出
。您提供字母,程序输出单词

但是,该程序没有按正确的顺序给出字母,并且根本无法处理双字母,如字母FSF或VVC。我希望有人能告诉我如何修复这个错误

以下是完整的代码:

with open("words_alpha.txt") as words:
    wlist = list(words)
while True:
    elim1 = []
    elim2 = []
    elim3 = []
    search = input("input letters here: ")
    for element1 in wlist:
        element1 = element1[:-1]
        val1 = element1.find(search[0])
        if val1 > -1:
            elim1.append(element1)
    for element2 in elim1:
        val2 = element2[(val1):].find(search[2])
        if val2 > -1:
            elim2.append(element2)
    for element3 in elim2:
        val3 = element3[((val1+val2)):].find(search[1])
        if val3 > -1:
            elim3.append(element3)
    print(elim3)

代码的问题在于,您在第一个循环中使用了特定单词的
val1
,而在第二个循环中使用了另一个单词。因此,
val1
在大多数情况下都是错误的值,因为对于seconds循环中的每个单词,您在第一个循环中检查的最后一个单词的第一个字母的位置都是错误的

有很多方法可以解决你想做的事情。然而,我下面的代码应该与您对解决方案的想法非常接近。我试图解释评论中发生的一切:

#从文件中读取单词
以open(“words_alpha.txt”)作为f:
words=f.readlines()
#开始无限循环
尽管如此:
#获取用户输入
搜索=输入(“在此处输入字母:”)
#循环所有单词
用文字表示:
#删除末尾的换行符
word=word.strip()
#开始查找单词开头的字母
位置=-1
#检查每个字母的位置
搜索中的信件:
位置=单词[position+1:]查找(字母)
#如果找不到字母,则中断循环
如果位置<0:
打破
#如果循环中没有“break”,则该单词包含所有字母
其他:
打印(word)
对于每个新字母,我们从
position+1
开始查找,其中
position
是以前找到的字母的位置。(这就是为什么我们必须执行
position=-1
,因此我们开始在
-1+1=0
处查找第一个字母)

理想情况下,您应该将
\n
的删除移到循环之外,因此您必须执行一次,而不是每次搜索。为了与您的代码保持一致,我将它留在了循环中


另外,顺便说一句,现在还没有处理大小写。例如,对
abc
的搜索是否应该与
abc
不同?我不确定,您需要什么。

代码的问题是,您在第一个循环中的特定单词中使用了
val1
,而在第二个循环中使用了另一个单词。因此,
val1
在大多数情况下都是错误的值,因为对于seconds循环中的每个单词,您在第一个循环中检查的最后一个单词的第一个字母的位置都是错误的

有很多方法可以解决你想做的事情。然而,我下面的代码应该与您对解决方案的想法非常接近。我试图解释评论中发生的一切:

#从文件中读取单词
以open(“words_alpha.txt”)作为f:
words=f.readlines()
#开始无限循环
尽管如此:
#获取用户输入
搜索=输入(“在此处输入字母:”)
#循环所有单词
用文字表示:
#删除末尾的换行符
word=word.strip()
#开始查找单词开头的字母
位置=-1
#检查每个字母的位置
搜索中的信件:
位置=单词[position+1:]查找(字母)
#如果找不到字母,则中断循环
如果位置<0:
打破
#如果循环中没有“break”,则该单词包含所有字母
其他:
打印(word)
对于每个新字母,我们从
position+1
开始查找,其中
position
是以前找到的字母的位置。(这就是为什么我们必须执行
position=-1
,因此我们开始在
-1+1=0
处查找第一个字母)

理想情况下,您应该将
\n
的删除移到循环之外,因此您必须执行一次,而不是每次搜索。为了与您的代码保持一致,我将它留在了循环中


另外,顺便说一句,现在还没有处理大小写。例如,对
abc
的搜索是否应该与
abc
不同?我不确定您需要的是什么。

您需要使用
read()
正确读取文件,因为每个单词之间都有一个换行符,请调用
split('\n')
,以正确创建单词列表。逻辑很简单。如果单词中包含所有字母,则获取每个字母的索引,并检查索引顺序是否与字母顺序匹配

以open('words_alpha.txt')作为文件的
:
word_list=file.read().split('\n')
search=input(“此处输入字母:”).lower()
找到=[]
对于word\u列表中的word:
如果全部(word中的x表示搜索中的x):
i=word.find(搜索[0])
j=word.find(搜索[1],i+1)
k=word.find(搜索[2],j+1)
如果i
使用函数:

def用字母获取单词(单词列表,搜索):
search=search.lower()
对于word\u列表中的word:
如果全部(word中的x表示搜索中的x):
i=word.find(搜索[0])
j=word.find(搜索[1],i+1)
k=word.find(搜索[2],j+1)
如果i
您需要正确读取文件,并使用
read()
,并且由于每个单词之间都有换行,因此请调用
split('\n')
以正确创建单词列表。逻辑是sim