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

print check('jshdgfyrgj', 'Correo')

「Correo is not here」を返す必要があります

print check('cfgotyrrtepo', 'Correo')

「Correo is here!」を返す必要があります。

現在、すべてのケースで correo is here が返されます。私のコードの何が問題なのですか? ありがとう!

4

3 に答える 3

3

いくつかの問題 - 1 つは、関数が大文字と小文字の違いを無視することを期待しているが、そのように指示しないことです。- '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
于 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

これにより、繰り返される文字がテキストでも繰り返されることが保証されます。

例えば

>>> 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 に答える