如何在Python 3.2中使字符串检查不区分大小写?

Jac*_*ack 13 python string case-insensitive

我最近开始学习Python,作为一种练习,我正在研究基于文本的冒险游戏.现在,代码实际上是无效的,因为它检查用户的响应,看它是否与同一个单词的几个变体相同.我如何更改它,以便在Python 3.2中字符串检查不区分大小写?

示例代码如下:

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')
Run Code Online (Sandbox Code Playgroud)

Tim*_*ker 24

if 'power' in choice.lower():
Run Code Online (Sandbox Code Playgroud)

应该做(假设choice是一个字符串).如果choice 包含这个词,那将是真的power.如果要检查是否相等,请使用==而不是in.

另外,如果你想确保power只匹配整个单词(而不是作为horsepower或的一部分powerhouse),那么使用正则表达式:

import re
if re.search(r'\bpower\b', choice, re.I):
Run Code Online (Sandbox Code Playgroud)


S.L*_*ott 9

如果您正在进行精确比较.

if choice.lower() == "power":
Run Code Online (Sandbox Code Playgroud)

或者,如果你正在进行子串比较.

if "power" in choice.lower():
Run Code Online (Sandbox Code Playgroud)

choice.lower().startswith( "power" )如果你感兴趣的话,你也有.


小智 5

str 类型/对象有一个专门用于无大小写比较的方法。

在 python3 提示符处:

>>> help(str)
...
 |  casefold(...)
 |      S.casefold() -> str
 |      
 |      Return a version of S suitable for caseless comparisons.
...
Run Code Online (Sandbox Code Playgroud)

因此,如果您将 .casefold() 添加到任何字符串的末尾,它会给您全部小写。

例子:

>>> "Spam".casefold()
'spam'
>>> s = "EggS"
>>> s.casefold()
'eggs'
>>> s == "eggs"
False
>>> s.casefold() == "eggs"
True
Run Code Online (Sandbox Code Playgroud)