0

我需要检查构成给定单词的所有字母是否都包含在给定字符串中。我尝试了一些东西但没有用:

def check(texto, control):
    for letra in control:
        if texto.find(letra) == control.find(letra):
            return control + " is not here"
        else:
            return control + " is here!"

打印检查('jshdgfyrgj','Correo')

应该返回“Correo 不在这里”

打印检查('cfgotyrrtepo','Correo')

应该返回“Correo 来了!”

它目前在所有情况下都返回 correo is here。我的代码有什么问题?谢谢!

4

3 回答 3

3

几个问题 - 一个,您希望该函数忽略大小写差异,但不要告诉它这样做。- 'c' 不是'C'。

为了检查一个字母是否在一个字符串中,通常使用letter in text_string比使用str.find()方法更好。确保您了解 find 返回的内容 - 查看文档

在下面的示例中,我使用-如果有重复letter in set(text_string),这只会检查一次的字母。text_string对于小字符串,这不会对性能产生太大影响。

您可以使用该all函数进行一系列布尔检查。

def check(text, control):
    # Set both strings to lower case, since we're ignoring case
    text = text.lower()
    control = control.lower()
    # Check that each character in control is in text
    return all((c in text for c in set(control)))

>>> check('jshdgfyrgj', 'Correo')
2: False
>>> check('cfgotyrrtepo', 'Correo')
3: True
于 2013-07-23T04:41:24.353 回答
1

为什么不这样:

def check(texto, control):
    texto = [letter for letter in texto]
    while texto:
        for letra in control:
            if letra in texto:
                texto.remove(letra)
            else:
                return False
    return True

这确保了重复的字母也在 texto 中重复。

例如

>>> check('abc','bac')
True
>>> check('abc','bacc')
False
于 2013-07-23T04:43:38.327 回答
0

如果顺序无关紧要:

...
return all([letter in texto for letter in control])

如果顺序很重要:

...
texto_modified = "".join([letter for letter in texto if letter in control])
return texto_modified == control
于 2013-07-23T04:59:12.897 回答