检查每个字母是否包含所需的所有字母,此代码不起作用

2024-10-04 11:34:07 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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!"

print check('jshdgfyrgj', 'Correo')

应该返回“科雷奥不在这里”

print check('cfgotyrrtepo', 'Correo')

应该返回“科雷奥来了!”你知道吗

它目前返回科雷奥在这里的所有情况。我的代码怎么了? 谢谢!你知道吗


Tags: 字符串forreturnhereisdefcheck字母
3条回答

为什么不这样做:

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

有几个问题-第一,您希望函数忽略大小写差异,但不要告诉它这样做。-“c”不是“c”。你知道吗

要检查字母是否在字符串中,最好使用letter in text_string而不是str.find()方法。确保您了解find返回的内容-查看docs。你知道吗

在下面的例子中,我使用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

如果顺序无关紧要:

...
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

相关问题 更多 >