Как сделать проверку строки без учета регистра?
Я недавно начал изучать 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