Как сделать проверку строки без учета регистра?

Я недавно начал изучать Python и, как практика, я работаю над текстовой приключенческой игрой. В настоящее время код действительно неэффективен, поскольку он проверяет реакцию пользователя, чтобы увидеть, совпадает ли он с несколькими вариантами одного и того же слова. Как я могу изменить его, чтобы проверка строк не учитывала регистр?

Пример кода ниже:

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')

Ответ 1

if 'power' in choice.lower():

должен делать (предполагая, что choice - строка). Это будет верно, если choice содержит слово power. Если вы хотите проверить равенство, используйте == вместо in.

Кроме того, если вы хотите, чтобы вы соответствовали power только как целое слово (а не как часть horsepower или powerhouse), используйте регулярные выражения:

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

Ответ 2

Это, если вы делаете точное сравнение.

if choice.lower() == "power":

Или это, если вы делаете сравнение подстроки.

if "power" in choice.lower():

У вас также есть choice.lower().startswith( "power" ), если это вас интересует.

Ответ 3

используйте str.lower(), чтобы преобразовать все записи в нижний регистр и только проверить строку на более низкие возможности.

Ответ 4

Тип str/object имеет метод, специально предназначенный для сравнения без использования.

В командной строке 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