web-dev-qa-db-ja.com

文字列チェックの大文字と小文字を区別しないようにするにはどうすればよいですか?

私は最近Pythonを学び始め、練習としてテキストベースのアドベンチャーゲームに取り組んでいます。現在、コードはユーザーの応答をチェックして、それがそうであるかどうかを確認するため、実際には効果がありません。同じWordのいくつかのバリエーションと同じですが、文字列チェックで大文字と小文字が区別されないように変更するにはどうすればよいですか?

以下のサンプルコード:

if str('power' and 'POWER' and 'Power') in str(choice):
    print('That can certainly be found here.')
    time.sleep(2)
    print('If you know where to look... \n')
13
Jack
if 'power' in choice.lower():

choiceが文字列であると仮定して)行う必要があります。これは、choicecontains Word powerの場合に当てはまります。等しいかどうかを確認する場合は、inの代わりに==を使用してください。

また、単語全体としてのみ(powerまたはhorsepowerの一部としてではなく)powerhouseに一致することを確認する場合は、正規表現を使用します。

import re
if re.search(r'\bpower\b', choice, re.I):
26
Tim Pietzcker

これは、正確な比較を行っている場合です。

_if choice.lower() == "power":
_

または、これは、部分文字列の比較を行っている場合です。

_if "power" in choice.lower():
_

興味があれば、choice.lower().startswith( "power" )もあります。

9
S.Lott

Strタイプ/オブジェクトには、ケースレス比較を特に目的としたメソッドがあります。

Python3プロンプトで:

>>> help(str)
...
 |  casefold(...)
 |      S.casefold() -> str
 |      
 |      Return a version of S suitable for caseless comparisons.
...

したがって、文字列の末尾に.casefold()を追加すると、すべて小文字になります。

例:

>>> "Spam".casefold()
'spam'
>>> s = "EggS"
>>> s.casefold()
'eggs'
>>> s == "eggs"
False
>>> s.casefold() == "eggs"
True
3
DaneM

str.lower()を使用して、すべてのエントリを小文字に変換し、文字列を小文字の可能性に対してのみチェックします。

3
Jordan