问题
I've started learning Python recently and as a practise I'm working on a text-based adventure game. Right now the code is really ineffective as it checks the user responce to see if it is the same as several variations on the same word. How do I change it so the string check is case insensitive?
Example code below:
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():
should do (assuming choice
is a string). This will be true if choice
contains the word power
. If you want to check for equality, use ==
instead of in
.
Also, if you want to make sure that you match power
only as a whole word (and not as a part of horsepower
or powerhouse
), then use regular expressions:
import re
if re.search(r'\bpower\b', choice, re.I):
回答2:
This if you're doing exact comparison.
if choice.lower() == "power":
Or this, if you're doing substring comparison.
if "power" in choice.lower():
You also have choice.lower().startswith( "power" )
if that interests you.
回答3:
use str.lower()
to convert all entries to lowercase and only check the string against lower case possibilities.
回答4:
The str type/object has a method specifically intended for caseless comparison.
At the python3 prompt:
>>> help(str)
...
| casefold(...)
| S.casefold() -> str
|
| Return a version of S suitable for caseless comparisons.
...
So, if you add .casefold() to the end of any string, it will give you all lowercase.
Examples:
>>> "Spam".casefold()
'spam'
>>> s = "EggS"
>>> s.casefold()
'eggs'
>>> s == "eggs"
False
>>> s.casefold() == "eggs"
True
来源:https://stackoverflow.com/questions/5889944/how-to-make-string-check-case-insensitive